Unity Shaders and Effects Cookbook (1-3) 创建 Half Lambert 光照模型

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

用函数曲线图来理解

Unity Shaders and Effects Cookbook (1-3) 创建 Half Lambert 光照模型_第1张图片




示例项目打包下载

https://pan.baidu.com/s/1qWUrtO4


你可能感兴趣的:(unity3d,shader)