真实图形学(光照模型)

一 、颜色模型

     真实感图形学, 简单地说,就是希望用计算机生 成像照相机拍的照片一样逼真的图形图像 。 要实现这个目标 ,需要三部曲:
  • 第一步:建立三维场景(建模);
  • 第二步:消隐解决物体深度的显示及确定物体之内的相互关系;
  • 第三步:在解决了消隐问题之后,在可见面上进行明暗光泽的处理,然后进行绘制(渲染)。

一 、颜色模型概述
    
      颜色: 人的视觉系统对可见光的感知结果,感知到的颜 色由光波的波长决定。 人眼对于颜色的观察和处理是一种生理和心理现象 。 视觉系统能感觉的波长范围为380~780nm 。

     颜色模型 (空间) 表示颜色的一种数学方法,人们 用它来指定颜色和标定产生的颜色。通常用三个参数表 示。 几乎所有的颜色模型都是从RGB颜色模型导出。 现有颜色模型还没有一个完全符合人的视觉感知特 性、颜色本身的物理特性或发光物体和光反射物体的特 性 。

  • RGB 颜色工业模型
                   
        如图所示,单位立方体中的三个角对应 红色(R)、绿色(G)、蓝色(B)三基色, 而其余三个角分别对应于三基色的补 色——青色(C)、黄色(Y)、品红色(M) 。
        从RGB单位立方体的原点即黑色(0,0,0)到白色顶点 (1,1,1)的主对角线被称为灰度线,线上所有的点具有 相等的分量,产生灰度色调 。
  • 其它颜色工业模型
          主要用于彩色电视信号传输标准,主要有YIQ、 YUV、 YCbCr彩色模型。三种彩色模型中,Y分量均代表黑白亮度分 量,其余分量用于显示彩色信息。这样,只需利用Y分量进 行图像显示,彩色图像就转换为灰度图 。
  • 颜色视觉模型
         以上彩色模型是从色度学或硬件实现的角度提出的, 但用色调(Hue)、饱和度(Saturation,也称彩度)、 亮度(Illumination)三要素来描述彩色空间能更好地 与人的视觉特性相匹配 。
         颜色的三个基本属性( 也称人眼视觉三要素)
  •  色调(Hue):由物体反射光线中占优势的波长决定的,是彩色互相区分的基本特性。
  • 饱和度(Saturation)或彩度:彩色的深浅程度,它取决于彩色中白色的含量。饱和度越高,彩色越深,白色光越少。
  • 亮度(Illumination):光波作用于感受器所发生的效应,它取决于物体的反射系数。反射系数越大,物体亮度越大

HSI彩色模型是截面为三角形或 圆形的锥体模型
        

色调(H)也称为色相,指颜色的外观, 色调H用角度表示: 如赤橙黄绿青蓝紫,角度从(红)→(绿)→(蓝)→ (红)。

饱和度,分成 :
  • 低(0%~20%),不管色调如何而产生灰色;
  • 中(40%~60%),产生柔和的色泽(pastel);
  • 高(80%~100%),产生鲜艳的颜色(vivid color)。

强度(Intensity)是颜色的亮度(Illumination);
  • 取值范围从0%(黑)~100%(最亮);
  • 强度也指明度(value)或光亮度(lightness或Brightness) 。

  • 其他颜色视觉模型
         HSV(hue, saturation and value)  彩色模型 , HSL采用亮度L(lightness)、HSV采 用明度V(value)作为坐标
     

二 、 简单光照模型

1、光照模型

          当物体的几何形态确定之后,光照决定了整个场景的显示结果 。因此,真实感图形的生成取决于如何建立一个合适的光照模型(illumination model)。 光照明模型:模拟物体表面的光照明物理现象的数学模型。

2 、背景物理知识

  • 光的传播规律
               反射定律:入射角等于反射角,而且反射光线、入射光线与法向量在同一平面上。

                                    

          折射定律:折射线在入射线与法线构成的平面上,折射角与入射角满足如下关系 :

              
  • 能量关系
               在光的反射和折射现象中的能量分布(满足能量守恒):

                              

漫反射光  :光线射到物体表面上后(比如泥塑物体的 表面,没有一点镜面效果),光线会沿着不同的方向等量 的散射出去,这种现象称为漫反射。漫反射光在不同方向 都是一样的 。漫反射光均匀向各方向传播,与视点无关,它是由表面的粗糙不平引起的 。

镜面反射光  :一束光照射到一面镜子上或不绣钢的表面,光 线会沿着反射光方向全部反射出去,这种叫镜面反射光。

折射光  :比如水晶、玻璃等,光线会穿过去一直往前走

吸收光 :比如冬天晒太阳会感觉到温暖,这是因为吸收了太 阳光。

3 、 Phong  光照模型  (  环境光+漫反射光+镜面反射光 

环境光 :邻近各物体所产生的光的多次反射最终达到平衡时的一种光。可近似认为同一环境下的环境光,其光强分布是均匀的。

                                         

漫反射光 :光照射到比较粗糙的物体表面,物体表面某点的明暗程度不随观测者的位置变化,这种等同地向各个方向散射的现象称为光的漫反射。漫反射光强近似服从Lambert定律 :


镜面反射光  :光照射到相当光滑的物体表面,就产生镜面反射光,其特点是在光滑表面会产生高光区域。一般用Phong提
出的经验模型表达 :


Phong  光照模型


          这就是经典的Phong模型。I a、I p都是常数,k也是已知的,L是光源的方向也是已知的,N是物体表面的法向可以算出来的,v是视线的方向,R也可以算出来。


结合RGB颜色模型, Phong光照明模型最终有如下的形式 :



Phong模型扫描线算法



Phong光照明模型是真实感图形学中提出的 第一个有影响的光照明模型,生成图象的真实度已经达到可以接受的程度。

Phone模型用来模拟光从物体表面到观察者眼睛的反射。尽管这种方法符合一些基本的物理法则,但它更多的是基于对现象的观察,所以被看成是一种 经验式的方法。


Phong光照明模存在的问题 :

  • 显示出的物体象塑料,无质感变化
  • 没有考虑物体间相互反射光
  • 镜面反射颜色与材质无关
  • 镜面反射入射角大,会产生失真现象

4 、 增量式光照模型Gouraud明暗处理

一 、为什么要进行明暗处理 ?

  • 三维物体通常用多边形( 三角形 )来近似模拟 。
  • 由于每一个多边形的法向一致,因而多边形内部的象素的颜色都是相同的,而且在不同法向的多边形邻接处,光强
    突变,使具有不同光强的两个相邻区域之间的光强不连续性 ( 马赫带效应 ) 。
     
二 、如何进行明暗处理 ?
 
          基本思想 :每一个多边形的顶点 处计算出光照强度或参数,然后 在各个多边形内部进行均匀插值

常用方法:
  • Gouraud明暗处理 ( 双线性光强插值算法 )
  • Phong明暗处理 ( 双线性法向插值算法 )
      
Gouraud明暗处理步骤 :

                     
第一步 : 计算多边形顶点的平均法向 。
       与某个顶点相邻的所有多边形的法向平均值近似作为该顶点的近似法向量,顶点A相邻的多边形有k个,它的法向量计算为 :
        
第二步 : 用 Phong 光照模型计算顶点的光强。
          Phong 光照模型出现前,采用如下光照模型计算 :
  
第三步 :  插值计算离散边上个点的光强。
第四步 :   插值计算多边形内域中各点的光强

增量计算 :为减少计算量,采用增量计算方法 。


5 、 增量式光照模型 ( Phong 明暗处理 )

        Gouraud 明暗处理的不足 :最大的缺点,就是不能有镜面反射光( 高光 )。双线性插值是把能量往四周均匀,平均的结果就是光斑被扩大了,本来没有光斑的地方一插值反而出现了光斑 。  解决办法? === >   Phong明暗处理

  • 与 Gouraud 明暗处理的区别           双线性光强插值 ?    === >   双线性法向插值
  • 以时间为代价,引入镜面反射,解决高光问题

Phong明暗处理基本步骤:

  • 计算每个多边形顶点处的平均单位法矢量,这一步骤与Gouraud明暗处理方法的第一步相同。
  • 用双线性插值方法求得多边形内部各点的法矢量。
  • 最后按光照模型确定多边形内部各点的光强。


Phong明暗处理是先算角点的法向量,再算内部点的法向量,最后再用新的光照模型算内部点的颜色值。


点A的法向量NA为N1与N2的线性插值,点B的法向量NB为N1与N3的线性插值,点P的法向量Np为NA与NB线性插值。


  • 两种增量式光照模型比较

  • 增量式光照模型总结

  • 双线性光强插值(Gouraud模型)能有效的显示漫反射曲面,计算量小,速度快。
  • 双线性法向插值(Phong模型)可以产生正确的高光区域,但是计算量要大的多。

  • 增量式光照明模型的不足

    • 物体边缘轮廓是折线段而非光滑曲线
    • 等间距扫描线会产生不均匀效果
    • 插值结果取决于插值方向

5、  局部光照模型


      一、什么是局部光照模型 ?

  • 局部光照模型:仅处理光源直接照射物体表面的光照模型。
  • 简单光照模型是一个比较粗糙的经验模型,不足之处:镜面反射项与物体表面的材质无关。
  • 从光电学知识和物体微平面假设出发,介绍镜面反射与物体材质有关的普遍局部光照模型

     

      二、局部光照模型

           自然光反射率系数可用Fresnel公式计算

                 
               

          

反射率与折射率有关,是波长的函数 
                                                                  
  • 微观情况下,物体表面粗糙不平 。

                                    
        宏观上看,这是一个平面,法向朝上。实际上它是由许多微小平面构成的,微小平面的法向是各异的 。

  • 反射率计算
    • 微平面是理想镜面,反射率可用Fresnel公式计算,而粗糙表面的反射率与表面的粗糙度有关。

                        
  • Torrance 和 Sparrow采用 Gauss分布函数模拟法向分布 :

                

  • 衰减因子G在局部光照明模型中也可以反映物体表面的粗糙程度。
  • 衰减因子是由于微平面的相互遮挡或屏蔽而产生的
  • 微平面相互遮挡的光衰减因子G,有三种情况:


Cook和Torrance于 1981年提出了局部光照模型

     
  • 入射光能量Ei ,可用入射光的光强 Ii 和单位面积向光源所张的立体角 d w表示为 :   

  • 反射率系数可表示为漫反射率与镜面反射率的代数和:


     
  • 局部光照模型表示

      
  • 局部光照模型的优点 :

  • 相对于简单光照模型而言
    • 基于入射光能量导出的光辐射模型
    • 反映表面的粗糙度对反射光强的影响
    • 高光颜色与材料的物理性质有关
    • 改进入射角很大时的失真现象
    • 考虑了物体材质的影响,可以模拟磨光的金属光泽

光 透 射 模 型
     
一 、 为什么考虑光透射模型 ?

     简单和局部光照模型没有考虑光的透射现象 。
      适用于场景中有透明或者半透明的物体的光照处理 。
      早期用颜色调和法进行模拟。

二、 光透射模型

                                           

     不考虑透明体对光的折射以及透明物体本身的厚度,光通过物体表面是不会改变方向的,可以模拟平面玻璃 。

三、Whitted 光透射模型


6、 整体光照模型

一、 为什么需要整体光照模型 ?

  • 简单和局部光照模型不能很好地模拟光的折射、反射和阴影等,也不能用来表示物体间的相互光照影响 。
  • 整体光照模型是更精确的光照模型,主要有光线跟踪 和 辐射度两种方法 。 


二、光线跟踪基本原理(Ray Tracing)

        光线跟踪算法是真实感图形学中的主要算法之一,该算法具有原理简单、实现方便和能够生成各种逼真的视觉效果等突出的优点,综合考虑了光的反射、折射、阴影等。

三、光线跟踪基本过程


在这个场景中,有一个点光源  L,两个透明体 O 1O 2,一个不透明体 O 。首先,从视点出发经过视屏一个像素点的视线E传播到达球体O 1,交点为P 1。从P 1向光源L作一条阴影测试线S 1,可以发现其间没有遮挡的物体,那么就用局部光照模型计算光源对P 1在其视线E方向上的光强,作为该点的局部光强 ;在反射光线R 1方向上,没有再与其他物体相交,那么就设该方向的光强为0,并结束这条光线方向的跟踪。然后对折射光线T 1方向进行跟踪,计算该光线的光强贡献 。折射光线T 1在物体O 1内部传播,与O 1相交于点p 2,由于该点在物体内部,假设它的局部光强为0。该点处同时产生了反射光线R 2和折射光线T 2,在反射光线R 2方向,可以继续递归跟踪下去计算它的光强。而对折射光线T 2则继续进行跟踪 。T 2与物体O 3交于点p 3,作P 3与光源L的阴影测试线S 3,没有物体遮挡,正常计算该处的局部光强。由于该物体是非透明的,可以只继续跟踪反射光线R 3方向的光强,结合局部光强得到P 3处的光强 。反射光线R 3的跟踪与前面的过程类似,算法可以递归地进行下去。重复上面的过程,直到光线满足跟踪终止条件。这样最终可以得到视屏上一个像素点的光强,也就是它相应的颜色值 。

四、光线跟踪怎么停止 ? 
          
          在算法应用的意义上,可以有以下几种终止条件 。
  • 该光线未碰到任何物体
  • 该光线碰到了背景
  • 光线在经过许多次反射和折射以后,就会产生衰减,光线对于视点的光强贡献很小
  • 光线反射或折射次数即跟踪深度大于一定值
                  
五、光线跟踪伪代码

          光线跟踪算法的函数名为RayTracing( ),光线的起点为start,方向为direction,光线的衰减权值为weight,初始值
为1,算法最后返回光线方向上的颜色值color 。 对于每一个像素点,第一次调用RayTracing(),可以设起点start为视点,而direction为视点到该像素点的射线方向 。

六、光线跟踪缺点

  • 光线跟踪方法由于要进行大量的求交运算,且每一条射线都要和所有的物体求交,因此效率很低,需要耗费大量的计算时间。
  • 光线跟踪方法可以进行加速。
     
七、光线跟踪加速

  • 提高求交速度:针对性的几何算法、...
  • 减少求交次数:包围盒、空间索引、...
  • 减少光线条数:颜色插值、自适应控制、...
  • 采用广义光线和采用并行算法等
           
包围盒求交测试

   

层次包围盒求交测试

空间网格剖分和三维DDA算法
空间八叉树剖分

7、 纹  理  映  射

      一 、 纹理有什么用 ?

         表面可以用纹理来代替,不用痛苦地构造模型和材质细节,节省时间和资源,让用户做其他更重要的东西 。可以用一个粗糙的多边形和纹理来代替详细的几何构造模型,节省时间和资源。

      二、 纹理分类

           颜色纹理 颜色或明暗度变化体现出来的表面细节,如刨光 木材表面上的木纹 。
           几何纹理:由不规则的细小凹凸体现出来的表面细节,如桔子皮表面的皱纹。

     三、 图形学中纹理定义
               
               在真实感图形学中,可以用下列两种方法来定义纹理 :
           ( 1 )图象纹理:将二维纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应的纹理图案中相应点的颜色值。
           ( 2 )函数纹理:用数学函数定义简单的二维纹理图案,如方格地毯;或用数学函数定义随机高度场,生成表面粗糙纹理几何纹理。

四、 纹理映射

          纹理映射(Texture Mapping):通过将数字化的纹理图像覆盖或投射到物体表面,而为物体表面增加表面细节的过程 。1974年Catmull首次提出了纹理映射的概念,其主要思想是通过寻找一种从纹理空间(u,v)到三维曲面(s, t)之间的映射关系,将点(u,v)对应的彩色参数值映射到相应的三维曲面(s, t)上,使三维曲面表面得到彩色图案 。

颜色纹理坐标转换通常使用下列两种方法 :

(1)在绘制一个三角形时,为每个顶点指定纹理坐标,三角形内部点的纹理坐标由纹理三角形的对应点确定。即指定 :

                                      

几何纹理  使用一个称为扰动函数的数学函数进行定义。 扰动函数通过对景物表面各采样点的位置作微小扰动来改变表面的微观几何形状。

  
五、阴影处理

       一、 什么是阴影?
               
         阴影是由于观察方向与光源方向不重合而造成的 ; 阴影使人感到画面上景物的远近深浅,从而极大地增强画面的真实感。
     
       二、 什么是本影

umbra-本影区-场景中的一个点P,如果它不被光源的任何一部分所照射到,就称为在本影区里。本影就是不被任何光源所照到的区域 。

三、 什么是半影
 

     
Occluder-遮挡物:阴影的生成是因为空间有遮挡物。这些遮挡物把光源挡住了,所以在receivers上有些部分就很
阴暗。阴影是本影和半影的组合。求出本影和半影的并集(union)来绘出阴影。

四、阴 影
          
  • 自身阴影:由于物体自身的遮挡而使光线照射不到它上面的某些面;
  • 投射阴影:由于物体遮挡光线,使场景中位于它后面的物体或区域受不到光照射而形成的。
   
五、阴影算法( 1 )

          阴影体法( Shadow Volume )

                          

由一个点光源和一个三角形可以生成一个无限大的阴影体。落在这个阴影体中的物体,就处于阴影中 。在对光线进行跟踪的过程中,如果这条射线穿过了阴影体的一个正面(朝向视点的一个面),则计数器加1。如果这条射线穿过了阴影体的一个背面(背向视
点的一个面),则计数器减1。如果最终计数器的数值大于0,则说明这个象素处于阴影中,否则处于阴影之外 。

六、阴影算法( 2 )

       阴影图法( Shadow Mapping )
  • 这种方法的主要思想是使用Z缓冲器算法,从投射阴影的光源位置对整个场景进行绘制 。
  • 这时,对于Z缓冲器的每一个象素,它的z深度值包括了这个象素到距离光源最近点的物体的距离。一般将Z缓冲器中的整个内容称为阴影图(Shadow Map),有时候也称为阴影深度图 。

                           

  • 为了使用阴影图,需要对场景进行二次绘制,不过这次是从视点的角度来进行的  。
  • 在对每个图元进行绘制的时候,将它们的位置与阴影图进行比较,如果绘制点距离光源比阴影图中的数值还要远,那么这个点
    就在阴影中,否则就不在阴影中  。

猜你喜欢

转载自blog.csdn.net/smilejiasmile/article/details/80148318