GameTech/URP 渲染实战
源码 / shaders/Ch08/CubeDisplay.glsl
shaders/Ch08/CubeDisplay.glsl
// 调试用:按法线方向采样一张 cubemap 并原样显示(看环境本身,或看预先积分好的辐照度图)。(GLSL 版,对应 Ch08/CubeDisplay.shader)
Shader "Cookbook/Ch08/CubeDisplay"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" "Queue"="Geometry" }
        GLSLINCLUDE
        uniform vec4  _Albedo;
        uniform float _Exposure;
        ENDGLSL
        Pass
        {
            Name "Unlit"
            Tags { "LightMode"="UniversalForwardOnly" }
            GLSLPROGRAM
            uniform samplerCube _Cube;
            VARYING vec3 normalWS;
            #ifdef VERTEX
            void main()
            {
                gl_Position = TransformObjectToHClip(positionOS.xyz);
                normalWS = TransformObjectToWorldNormal(normalOS);
            }
            #endif
            #ifdef FRAGMENT
            void main()
            {
                vec3 c = textureLod(_Cube, normalize(normalWS), 0.0).rgb;
                fragColor = vec4(c * _Albedo.rgb * _Exposure, 1.0);
            }
            #endif
            ENDGLSL
        }
        Pass
        {
            Name "DepthOnly"
            Tags { "LightMode"="DepthOnly" }
            ZWrite On ColorMask R
            GLSLPROGRAM
            #include "Ch08/Ch08Passes.glsl"
            #ifdef VERTEX
            void main() { gl_Position = Ch08DepthVert(); }
            #endif
            #ifdef FRAGMENT
            void main() { fragColor = Ch08NullFrag(); }
            #endif
            ENDGLSL
        }
    }
}