t2.0光照模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/webzhuce/article/details/82563191

基本概念

   学习《3D数学基础:图形与游戏开发》(美)Fletcher Dunn ,Ina Parberry著 15.4节的笔记。对计算机图形中,光照模型多了一份理解。
   这里无法详尽讨论光照这样复杂而丰富的主题,几乎是不可能的。我们甚至连不同的光照计算都难以一一述及;它们中的每一个都有大部头的著作来描述。这里主要讨论大多数API(OpenGL和DirectX)中的“标准”光照模型。这种模型尽管有其自身的局限,但却是实际上的标准。
  标准光照模型是局部模型中的一种,即当处理一个物体时,不考虑其他物体的影响。物体也不向别的物体投下影子,实际上,物体自身也无法生成影子。影子是使用全局光照模型生成的。这里不讨论。

标准光照方程

  光照方程定义了标准光照模型,用于计算单个像素的颜色。标准方程可简写为如下:
Clit = Cspec + Cdiff + Camb
其中:Clit 是打开光照情况下计算颜色值的结果。Cspec 是镜面反射分量。Cdiff是散射分量。Camb是环境变量。
物体外观主要取决于以下四点因素:
- 物体表面的性质,即材质属性。
- 表面的方位与朝向。朝向常用单位法向量表示。
- 照射来的各光源性质。
- 观察者位置。
方程中的三个组成部分,分布考虑了上述因子的不同组合。标准光照方程的镜面反射分量指由光源直接经物体表面反射入眼睛的光线。与镜面反射类似,漫发射分量也刻画直接照射物体的光线。漫反射反应的是散开的随机方向上的反射,这是由物体表面的粗糙引起的,相反的,镜面反射则反应良好的反射。漫反射不依赖于视点的位置,因为它本来就是随机的。光源与物体的相对位置反而显得更重要。下图显示了当光分量独立存在时,各分量的视觉效果以及合成效果。
这里写图片描述

flat着色与Gourand着色

  若渲染速度并不重要,我们可以逐像素地计算光照和雾化。(对于光照,这项技术称作Phong着色模型——不要和镜面反射的Phong模型混淆。)然而这样做计算量过于巨大,所以我们必须折中并减少计算的频率。有两种选择:逐多边形或逐顶点计算。这两项技术分别称作flat着色和Gourand着色。
使用flat着色,对整个三角形只计算一次光照值。通常,计算光照的“位置”为三角形中心,表面法向量为三角形法向量。如下图所示,使用flat着色,物体由多边形构成的本质表漏无疑,没有任何光泽而言。
这里写图片描述

   Gourand着色,又称作顶点着色或插值着色。在顶点级计算光照和雾,然后这些值被线性插值用于整个多边形面,下图采用Gourand着色。
这里写图片描述

    显然,Gourand着色在保持物体的光滑性上做的较好。当被模拟的值本来就是线性时,Gourand着色能得到很好的效果。问题在于如果这些值不是线性变化,比如镜面高光。比较Gourand着色茶壶的高光部分和Phong着色茶壶的高光部分,如下图所示。Phong着色中,除去几何不连续的把手、壶嘴部分,高光的连续性很好,而Gourand着色中,由其高光面甚至可辨出各个小面元的分布。
这里写图片描述

   线性插值的基本问题是内插值不可能大于较大的顶点值,所以高光只能在顶点出现,充分细化可解决这一问题。尽管有着自身的局限性,Gourand着色仍是现今硬件最常用的方法。

猜你喜欢

转载自blog.csdn.net/webzhuce/article/details/82563191