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

用函数曲线图来理解




示例项目打包下载

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值