Half Lambert光照模型
说到Half Lambert ,就不得不说反恐精英了,在制作反恐精英的过程中,为了防止物体的背面光丢失而显得太过平面化,就用了这个称之为half lambert的技术
。但是这个half lambert的光照模型是没有任何特殊物理原理,仅仅是增强玩家视觉的一个简单的光照模型例子。
具体的介绍可以参见Valve的wiki:
https://developer.valvesoftware.com/wiki/Half_Lambert
左边是普通的Lambert光照模型效果,右边就是我们说到的HalfLambert。
通过点乘的曲线图,我们可以看到使用HalfLambert的光照模型值是要高一半的。
那么我们怎么来实现呢,下面就动手吧。基于【Unity3D ShaderLab 自定义光照模型】的BasicMyCusDiffuse代码我们继续改。
以上的31行下面添加关键代码>>float halfLight=difLight*0.5+0.5;
再把col.rgb的赋值处的difLight替换为halfLight。这就完成了。
下面是效果图,场景的灯光为0.2。我们可以看出左侧使用halfLambert光照模型的方块背光面没有右侧的默认Lambert光照模型那么暗。
总结而来,Half Lambert的实现原理就是把漫反射的光照值范围分成2半,然后再加上固定的0.5。那么我们通过推算,光照值为0,half算得值依然为0.5,而普通的lambert就会是0,
所以有了上面的HalfLambert光照曲线图。Blue的曲线总是比Red曲线要高出一半。这就保证了在光照很差的场景中,我们依然不会看不清物体的背光面。