Half Lambert 光照模型是 Value 公司提出的,应用在低光照的区域 ,提高材质和物体表面周围的漫反射光照。
https://developer.valvesoftware.com/wiki/Half_Lambert
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
来看看 Lambert 和 Half Lambert 不同的效果对比。光照强度为0.05。
对比 人物模型的屁股那里,可以看到 Half Lambert 提高了屁股那一块的漫反射。
来自Value的更清晰的对比:
以上一次的代码进行修改,上一次自定义了漫反射光照模型,然后发现其实自定义的漫反射光照模型函数就是照抄了 Lambert 光照模型函数。
现在进行修改如下:
//不需要视角方向的前向着色 inline half4 LightingBasicDiffuse(SurfaceOutput s,half3 lightDir,half atten) { float difLight = max(0,dot(s.Normal,lightDir) );//dot表示cos值,范围(-1,1) max将difLight的范围限定到了(0,1) float hLamert = difLight * 0.5 +0.5;//Half Lamert光照模型就表现在这一句,将漫反射的光照值范围限定到了 (0.5,1),所以原来是 0 的地方现在就是 0.5 了,明亮度顿时提升,而原来已经很亮的地方并没有很大的变化。 half4 color=(0,0,0,0); color.rgb=s.Albedo * _LightColor0.rgb * ( hLamert * atten * 2 ); color.a=s.Alpha; return color; }
float difLight = max(0,dot(s.Normal,lightDir) );
dot表示cos值,范围(-1,1) max将difLight的范围限定到了(0,1)
float hLamert = difLight * 0.5 +0.5;
Half Lamert光照模型就表现在这一句,将漫反射的光照值范围限定到了 (0.5,1),所以原来是 0 的地方现在就是 0.5 了,明亮度顿时提升。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
用函数曲线图来理解
示例项目打包下载
https://pan.baidu.com/s/1qWUrtO4