Shader学习使用的是Unity2018.1.0b
void vert(in a2v v,out v2f o){ o.pos=UnityObjectToClipPos(v.vertex); fixed3 Amb = UNITY_LIGHTMODEL_AMBIENT.xyz; float3 worldNormal = normalize(mul(v.normal,(float3x3)unity_WorldToObject)); float3 worldLight = normalize(_WorldSpaceLightPos0.xyz); fixed halfLan = 0.5*dot(worldNormal,worldLight) + 0.5; fixed3 diffuse1 = _LightColor0.rgb * _Diffuse.rgb * halfLan; o.color = Amb + diffuse1; }
右侧为半兰伯特模型的表现效果:
上图有加入了环境光。
然后,当我们把hierarchy面板中的Directional Light禁用掉,有趣的现象就出现了。
直接看代码,半兰伯特漫反射模型的光照是环境光+漫反射才对,然而,我们看到的却是:
为了能让半兰伯特漫反射模型能在无光照时正确的表现环境光的效果,代码可以进行一点点修改即可:
fixed halfLan = 0.5*dot(worldNormal,worldLight) + 0.5; fixed3 diffuse1 = _LightColor0.rgb * _Diffuse.rgb * max(0.0,halfLan);
对半兰伯特模型的参数进行不小于0的限制,就可以正常的反应环境光了。
至于具体的原因嘛,要对shader进行调试才知道啦~~或者哪位看到的大佬直接留言告诉我,万分感谢呢