Unity Shaders and Effects Cookbook:HalfLambert光照模型
发表于2017-11-24
Half Lambert 光照模型是 Value 公司提出的,应用在低光照的区域 ,提高材质和物体表面周围的漫反射光照。下面就给大家介绍下如何创建Half Lambert光照模型。
来看看 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 了,明亮度顿时提升。
用函数曲线图来理解
示例项目打包下载:https://pan.baidu.com/s/1qWUrtO4