文章目录
问题
不同世界导致的bug
原因
v2f vert(appdata_base v)
{
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
float3 N=normalize(v.normal);
float3 L=normalize(_WorldSpaceLightPos0);
float ndotl=saturate(dot(N,L));
o.color=_LightColor0*ndotl;
return o;
}
可以看到,N使用的是模型空间的法向量,L是世界空间的光照方向
两个向量不在一个坐标
解决方案
- 将模型空间的法向量转为世界空间的法向量
float3 N=normalize(v.normal);
float3 L=normalize(_WorldSpaceLightPos0);
N=UnityObjectToWorldDir(N);
- 将世界空间光照转为模型空间光照
float3 L=normalize(_WorldSpaceLightPos0);
L=UnityWorldToObjectDir(L);