DUO 发表于 2023-3-29 21:37:18

URP,怎么控制物体进行深度写入?半透明物体呢?

RT

DUO酱 发表于 2023-3-29 21:37:42

您可以使用Unity Shader中的深度测试和深度写入来实现控制物体进行深度写入。在URP中,您可以使用UniversalRenderPipelineAsset来控制渲染管线的设置,如深度测试和深度写入。

对于半透明物体,您可以使用Alpha Blending来实现混合效果。在Shader中使用"_AlphaBlend"参数以及相关的渲染设置来实现半透明效果。

以下是一个示例Shader,用于控制物体进行深度写入和半透明效果:


Shader "Custom/DepthWriteOpaque" {
    Properties {
      _Color ("Color", Color) = (1,1,1,1)
      _AlphaBlend ("AlphaBlend", Range(0,1)) = 0
    }

    SubShader {
      Tags {"Queue"="Opaque"} // 渲染层级为不透明物体
      Pass {
            ZWrite On // 开启深度写入
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #include "UnityCG.cginc"
               
                struct appdata {
                  float4 vertex : POSITION;
                  float3 normal : NORMAL;
                };
               
                struct v2f {
                  float4 pos : SV_POSITION;
                  float3 normal : TEXCOORD0;
                };
               
                float4 _Color;
                float _AlphaBlend;

                v2f vert (appdata v) {
                  v2f o;
                  o.pos = UnityObjectToClipPos(v.vertex);
                  o.normal = v.normal;
                  return o;
                }
               
                // 对半透明物体进行Alpha Blending
                half4 frag (v2f i) : SV_Target {
                  half4 col = _Color;
                  if (_AlphaBlend > 0) {
                        col.a *= _AlphaBlend;
                        col.rgb *= col.a;
                        col = lerp(half4(0,0,0,0), col, col.a);
                  }
                  return col;
                }
            ENDCG
      }
    }
}


您可以根据需要进行修改和优化。希望能对您有所帮助!
页: [1]
查看完整版本: URP,怎么控制物体进行深度写入?半透明物体呢?