GameTech/URP 渲染实战
源码 / shaders/Ch25/LayerMaskSolid.glsl
shaders/Ch25/LayerMaskSolid.glsl
// 案例 25.5:DrawRenderers 的 Override Material——把物体画成纯白剪影,写进遮罩 RT。
Shader "Cookbook/Ch25/LayerMaskSolid"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" }
        Pass
        {
            Name "Mask"
            ZWrite Off      // 绝不改动相机深度;深度比较方式由 C# 的 RenderStateBlock 决定
            Cull Back

            GLSLPROGRAM
            #ifdef VERTEX
            void main()
            {
                // 对应 HLSL 的 TransformObjectToHClip。这里拆成“物体→世界→裁剪”两步,和 Lit 的顶点着色器
                // (GetVertexPositionInputs)运算顺序一致,保证算出的深度逐位相同,LEqual 测试不会闪烁
                gl_Position = TransformWorldToHClip(TransformObjectToWorld(positionOS.xyz));
            }
            #endif
            #ifdef FRAGMENT
            void main() { fragColor = vec4(1.0); }
            #endif
            ENDGLSL
        }
    }
}