Unity Shader踩坑笔记-2 ForwordBase-半兰伯特光照模型的问题记录

匿名 (未验证) 提交于 2019-12-03 00:38:01

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进行调试才知道啦~~或者哪位看到的大佬直接留言告诉我,万分感谢呢


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!