GameTech/URP 渲染实战
源码 / shaders/Ch06/DepthOnlyPass.glsl
shaders/Ch06/DepthOnlyPass.glsl
// DepthOnly Pass:只写深度。URP 做深度预渲染(Depth Prepass)、生成 _CameraDepthTexture 时会用到它。(GLSL 版,对应 Ch06/DepthOnlyPass.hlsl)

#if defined(_ALPHATEST_ON)
VARYING vec2 uv;
#endif

#ifdef VERTEX
void main()
{
    gl_Position = TransformObjectToHClip(positionOS.xyz);
#if defined(_ALPHATEST_ON)
    uv = TransformTex(texcoord0.xy, _BaseMap_ST);
#endif
}
#endif

#ifdef FRAGMENT
void main()
{
#if defined(_ALPHATEST_ON)
    if (texture(_BaseMap, uv).a * _BaseColor.a - _Cutoff < 0.0) discard;
#endif
    // 深度由硬件写入;某些路径会把深度作为颜色写进 R 通道(Pass 里 ColorMask R),所以照 URP 的做法返回 z
    fragColor = vec4(gl_FragCoord.z);
}
#endif