Shader "Custom/LightingMyForwardLit" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 //.1 Pass { Tags {"LightMode"="ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" struct vertOut { float4 pos:SV_POSITION; float4 color:COLOR; }; vertOut vert(appdata_base v) { vertOut o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.color = float4(0, 1, 0, 1);//输出绿色 return o; } float4 frag(vertOut i):COLOR { return i.color; } ENDCG } //.2 Blend One One CGPROGRAM #pragma surface surf MyForwardLit sampler2D _MainTex; struct Input { float2 uv_MainTex; }; //为Forward模式提供Lighting Model函数 half4 LightingMyForwardLit (SurfaceOutput s, half3 lightDir, half atten) { //以下为漫反射公式 //NdotL值越大受环境光影响越大 half NdotL = dot (s.Normal, lightDir); half4 c; c.rgb = s.Albedo * _LightColor0 * (NdotL * atten *2); c.a = s.Alpha; return c; } void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }
运行效果(设置像机渲染路径为Deferred Lighting)
上图输出了绿色说明Unity在Deferred渲染路径下没找到适合Deferred模式的Pass,从而执行了适合Forward模式的Pass