zoukankan      html  css  js  c++  java
  • Unity3D ShaderLab Half Lambert光照模型

    Half Lambert光照模型

    说到Half Lambert ,就不得不说反恐精英了,在制作反恐精英的过程中,为了防止物体的背面光丢失而显得太过平面化,就用了这个称之为half lambert的技术

    。但是这个half lambert的光照模型是没有任何特殊物理原理,仅仅是增强玩家视觉的一个简单的光照模型例子。

    具体的介绍可以参见Valvewiki

    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。那么我们通过推算,光照值为0half算得值依然为0.5,而普通的lambert就会是0

    所以有了上面的HalfLambert光照曲线图。Blue的曲线总是比Red曲线要高出一半。这就保证了在光照很差的场景中,我们依然不会看不清物体的背光面。

  • 相关阅读:
    Paths on a Grid
    Three Kingdoms(优先队列+bfs)
    Factstone Benchmark(数学)
    C. Searching for Graph(cf)
    B. Trees in a Row(cf)
    String Successor(模拟)
    乘积最大的分解(数学)
    Kindergarten Election
    In 7-bit
    Friends
  • 原文地址:https://www.cnblogs.com/2Yous/p/4206959.html
Copyright © 2011-2022 走看看