Unity Shaders and Effects Cookbook:HalfLambert光照模型

发表于2017-11-24
评论0 1.1k浏览

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

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引