光特性

参考OpenGL的光照模型,把光分成4种独立的成分:

  1. 环境光
  2. 散射光
  3. 镜面光
  4. 发散光

环境光:ambient light

环境光是那些在环境中进行了充分的散射,无法分辨其方向的光。它会均匀的照亮物体。

漫反射光:diffuse light

漫反射光来自某个方向,但在物体表面上向各个方向上反射,无论在何处观察,散射光看上去亮度都相同。我们之所以能看到物体,就是因为物体将入射的光向各个方向反射(所以称之为漫反射)

镜面光:specular light

镜面光来自一个特定的方向,并在物体表面以特定的方向反射出去。所以镜面光会让物体看起来有光泽,如金属表面的光泽。

发射光:emission light

发射光是由物体本身发射的光。

材质属性

光分成了4种成分,那么对应的材质也有对着4种光成分的反射率。物体最终呈现的颜色就是物体表面(材质)对不同光成分反射后所得到的颜色。

  1. 环境光材质
  2. 漫反射光材质
  3. 镜面光材质
  4. 发射光材质

环境光材质

环境光材质的反射率影响物体的整体颜色,并且反射率不受观察点影响。

漫反射光材质

漫反射光材质的反射率同样影响物体颜色。对颜色的影响取决于漫反射光的颜色以及与法线的夹角的影响,而不受观察点位置的影响。

镜面光材质

物体对光的镜面反射材质属性决定了光泽的颜色、大小和亮度。镜面反射光的强度还取决于观察点的位置,当观察点正好处于入射光的反射光线上,亮斑的亮度到达最大值。

发射光材质

前面提到的三种材质都是被动地反射来自外界的光线,而有些物体本身可以发射光。

光照计算

光照效果是由发射光,环境光,漫反射光以及镜面高光四部分组成,这四部分各自独立计算,然后再累加起来得到最终的光照效果。 对于光照着色有高洛德着色(Gouraud Shading)与冯氏着色(Phong Shading)。

  • 高洛德着色:也被称为Per-Vertex着色,它是在顶点着色阶段对顶点进行颜色计算,然后在光栅化阶段对这些顶点颜色进行线性插值形成片段的颜色。
  • 冯氏着色:也被称为Per-Pixel像素着色,它是在片段着色阶段对每一个片段(像素)进行颜色计算。

冯氏着色得到效果更好。

05-11 19:33