反射方向
fixed3 reflectDir = normalize(reflect(-worldLightDir,worldNormal));
reflect
reflect是cg的函数,reflect(i,n) i为入射方向,n为法线方向,返回反射方向
worldLightDir
worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldpos));
UnityWorldSpaceLightDir()
UnityCG中的内置函数,仅用于前向渲染,输入一个世界坐标中的顶点位置,返回从该点到光源的光照方向,没有被归一化
所以worldLightDir表示一个归一化的从顶点指向光源的矢量,所以在作为入射方向时需要加负号
视角方向
fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldpos);
_WorldSpaceCameraPos
Unity内置的摄像机变量,float3类型,表示该摄像机在世界坐标下的位置
高光反射
公式
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0,dot(reflectDir,viewDir)),_Gloss);