GameTech/URP 渲染实战
源码 / shaders/Ch02/SrpBatcherBroken.glsl
shaders/Ch02/SrpBatcherBroken.glsl
// 第 2 章 2.10 节 / 案例 2.6:一个“看起来没问题”、却不兼容 SRP Batcher 的 Shader
// 问题:_BaseColor 是材质属性,却声明在 CBUFFER 之外。Inspector 里会显示
// “SRP Batcher: not compatible”,原因是 “Material property is found in another cbuffer than UnityPerMaterial”。
// (GLSL 版)WebGL 没有 SRP Batcher,也没有 CBUFFER 的区别:材质属性都是普通 uniform,画面和兼容版完全一样。
Shader "Cookbook/Ch02/SrpBatcherBroken"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" "Queue"="Geometry" }
        Pass
        {
            Tags { "LightMode"="UniversalForward" }
            GLSLPROGRAM
            uniform sampler2D _BaseMap;
            uniform vec4 _BaseMap_ST;     // ✗ 不在 UnityPerMaterial 里
            uniform vec4 _BaseColor;      // ✗ 不在 UnityPerMaterial 里

            VARYING vec2 uv;

            #ifdef VERTEX
            void main()
            {
                gl_Position = TransformObjectToHClip(positionOS.xyz);
                uv = TransformTex(texcoord0.xy, _BaseMap_ST);
            }
            #endif
            #ifdef FRAGMENT
            void main()
            {
                fragColor = texture(_BaseMap, uv) * _BaseColor;
            }
            #endif
            ENDGLSL
        }
    }
}