[Unity]ShaderPass中漏加LightMode的严重性

2020/04 17 17:04

具体表现为,同一份材质,同一份Mesh的两个不透明物件
在渲染时使用了两个Keywords
一个使用了DIRECTIONAL
一个使用 DIRECTIONAL, SHADOWS_SCREEN

测试方法一:
建立空场景,将此材质赋于一对象,再加一默认Sphere,移动此Sphere,查看表现;
随机 表现1:此材质接受到了阴影
随机 表现2:此材质无法接受阴影

    SubShader
    {
        LOD 300
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_fwdbase_fullshadows 
            #include "UnityCG.cginc"
            #include "UnityStandardConfig.cginc"
            #include "UnityStandardUtils.cginc"
            #include "AutoLight.cginc"
            #include "300.cginc"
            ENDCG
        }
    }

经代码对比,发现漏写了LightMode

    SubShader
    {
        LOD 300
        Pass
        {
            Tags { "LightMode"="ForwardBase" }
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_fwdbase_fullshadows 
            #include "UnityCG.cginc"
            #include "UnityStandardConfig.cginc"
            #include "UnityStandardUtils.cginc"
            #include "AutoLight.cginc"
            #include "300.cginc"
            ENDCG
        }
    }

问题解决,表现正常;

从以上问题可以看出:
1、Unity引擎内置了潜规则
2、Unity代码质量低,优质的代码质量要么错要么对,Unity是随机错误
3、一切按Unity的潜规则来方能保平安