GameTech/URP 渲染实战
源码 / Ch30/PixelValidator.shader
Ch30/PixelValidator.shader
// 30.7 节:像素校验全屏 Pass——把 NaN / Inf / 负数 / 超范围的像素涂成醒目的颜色。
// 与 Rendering Debugger 里的 “Highlight NaN, Inf and Negative Values” 思路相同,但可以放进任何管线阶段。
Shader "Cookbook/Ch30/PixelValidator"
{
    Properties
    {
        _MaxValue ("Highlight Above", Float) = 64
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" }
        ZWrite Off ZTest Always Cull Off Blend Off
        Pass
        {
            Name "Validate"
            HLSLPROGRAM
            #pragma vertex Vert
            #pragma fragment Frag
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"

            CBUFFER_START(UnityPerMaterial)
                float _MaxValue;
            CBUFFER_END

            float4 Frag(Varyings input) : SV_Target
            {
                float4 c = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_PointClamp, input.texcoord);
                // 背景压暗、去色,让标记更显眼
                float3 bg = Luminance(saturate(c.rgb)) * 0.35;
                if (AnyIsNaN(c))              return float4(1, 0, 1, 1);   // 品红:NaN
                if (AnyIsInf(c))              return float4(0, 1, 1, 1);   // 青:Inf
                if (any(c.rgb < 0))           return float4(1, 1, 0, 1);   // 黄:负数
                if (any(c.rgb > _MaxValue))   return float4(1, 0.3, 0, 1); // 橙:异常大的 HDR 值
                return float4(bg, 1);
            }
            ENDHLSL
        }
    }
}