真实感图形学

Posted by Haiden on April 17, 2019

一、颜色模型

颜色模型是表示颜色的一种数学方法,用它来指定颜色和标定产生的颜色。

1.1 常用颜色模型

1.1.1 RGB颜色工业模型:

单位立方体中的三个角对应红色(R)、绿色(G)、蓝色(B)三基色,而其余三个角分别对应于三基色的补色——青色(C)、黄色(Y)、品红色(M)。立方体的原点即即黑色(0,0,0)到白色顶点(1,1,1)的主对角线被称为灰度线。

1.1.2 其它颜色工业模型:

主要有YIQ、 YUV、YCbCr彩色模型。Y分量均代表黑白亮度分量,其余分量用于显示彩色信息。

1.1.3 颜色视觉模型:

颜色的三个基本属性

(1) 色调(Hue):由物体反射光线中占优势的波长决定的,是彩色互相区分的基本特性。

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

(2) 饱和度(Saturation)或彩度: 彩色的深浅程度,它取决于彩色中白色的含量。饱和度越高,彩色越深,白色光越少。

(3) 亮度(Illumination):光波作用于感受器所发生的效应,它取决于物体的反射系数。反射系数越大,物体亮 度越大。

1.1.4 其他颜色视觉模型

(1) HSV(hue, saturation and value)彩色模型

(2) HSL模型: HSL采用亮度L(lightness)、HSV采用明度V(value)作为坐标。

二、简单光照模型

光照明模型:模拟物体表面的光照明物理现象的数学模型。

2.1 物理知识

2.1.1 光的传播规律

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

2.1.2 折射定律

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

其中:η1、η2分别是入射光线在空气,物体中的折射率,θ和ψ分别是入射角和折射角。

2.1.3 能量关系

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

2.1.4 漫反射光

光线射到物体表面上后(比如泥塑物体的表面,没有一点镜面效果),光线会沿着不同的方向等量的散射出去,这种现象称为漫反射。

2.1.5 镜面反射光

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

2.1.6 折射光

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

2.1.7 吸收光

光照射在物质上,会吸收光子的能量。

2.2 Phong光照模型

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

漫反射光: 光照射到比较粗糙的物体表面,向各个方向散射的现象称为光的漫反射。

$I_{p}$ 点光源光强 $K_{a}$ 物体表面漫反射率

镜面反射光:光照射到相当光滑的物体表面,就产生镜面反射光。

$I_{p}$ 点光源光强 $K_{s}$ 物体表面某点的高光亮系数

Phong光照模型

$I_{a}$ 、$I_{p}$ 都是常数,k也是已知的,L是光源的方向也是已知的,N是物体表面的法向可以算出来的,v是视线的方向,R也可以算出来。

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

三、增量式光照模型

3.1 Gouraud明暗处理

Gouraud明暗处理又称双线性光强插值。基本步骤由四步构成。

(1) 计算多边形顶点的平均法向

与某个顶点相邻的所有多边形的法向平均值近似作为该顶点的近似法向量。

(2) 用Phong光照模型计算顶点的光强

采用如下光照模型计算:

(3) 插值计算离散边上个点的光强

(4) 插值计算多边形内域中各点的光强

增量计算

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

3.2 Phong明暗处理

Phong明暗处理使用双线性法向插值,以时间为代价,引入镜面反射,解决高光问题。

Phong明暗处理基本步骤:

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

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

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

Phong方法 Gouraud方法
产生的效果高光明显 效果并不明显
高光多位于多边形内部 多边形内部无高光
明暗变化缺乏层次感 光强度变化均匀,与实际效果更接近

四、局部光照模型

局部光照模型:仅处理光源直接照射物体表面的光照模型。

4.1 局部光照模型参数

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

θ是入射角,若发生反射的物体表面两侧折射率分别为和 ,n1 n2 那么 $\varphi $ 满足这样的一个式子:

(2) 反射率与折射率有关,是波长的函数

(3) 微观情况下,物体表面粗糙不平

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

(4) 反射率计算

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

实际物体反射率: $DG \rho(\theta,\lambda)​$

D为微平面法向的分布函数;G为由于微平面的相互遮挡或屏蔽而使光产生的衰减因子。

Gauss分布函数的法向分布:

k为常系数;a为微平面的法向与平均法向的夹角,即(N.H);

m为微平面斜率的均方根,表示表面的粗糙程度。

衰减因子G

衰减因子G在局部光照明模型中也可以反映物体表面的粗糙程度。

衰减因子是由于微平面的相互遮挡或屏蔽而产生的。

微平面相互遮挡的光衰减因子G,有三种情况:

4.2 Cook和Torrance提出的局部光照模型

$R_{bd}$ 表示物体对入射光的反射率系数

$I_{r}$ — 反射光的光强

$E_{i}$ — 单位时间内单位面积上的入射光能量

入射光能量 $E_{I}​$ ,可用入射光的光强 $I_{i}​$ 和单位面积向光源所张的立体角 $d\varpi ​$ 表示为:

于是有反射光光强:

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

漫反射与镜面反射系数: $K_{d} + K_{s} = 1$ ;

物体表面的漫反射率:$R_{d} = R_{d}(\lambda)$ ;

物体表面的镜面反射率:

局部光照模型表示

$I_{r}$ 物体表面反射光强

$I_{a}K_{a}$ 表示环境光的影响

最后一项是考虑了物体表面性质后的反射光强度量,是该局部光照模型的复杂性与普遍性所在。

五、光透射模型

适用于场景中有透明或者半透明的物体的光照处理。

光透射模型早期用颜色调和法进行模拟。

5.1 颜色调和法

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

5.2 Whitted 光透射模型

在简单光照明模型的基础上,加上透射光项就得到Whitted光透射模型:

六、整体光照模型

整体光照模型是更精确的光照模型,主要有光线跟踪辐射度两种方法。

6.1 光线跟踪停止条件

1
2
3
4
(1) 该光线未碰到任何物体
(2) 该光线碰到了背景
(3) 光线在经过许多次反射和折射以后,就会产生衰减,光线对于视点的光强贡献很小
(4) 光线反射或折射次数即跟踪深度大于一定值

6.2 光线跟踪加速

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

七、纹理映射

7.1 纹理分类

颜色纹理:颜色或明暗度变化体现出来的表面细节,如刨光木材表面上的木纹。

几何纹理:由不规则的细小凹凸体现出来的表面细节,如桔子皮表面的皱纹。

7.2 图形学中纹理定义

(1) 图象纹理:将二维纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应的纹理图案中相应点的颜色值。

(2) 函数纹理:用数学函数定义简单的二维纹理图案,如方格地毯;或用数学函数定义随机高度场,生成表面粗糙纹理即几何纹理。

7.3 纹理映射

纹理映射(Texture Mapping):通过将数字化的纹理图像覆盖或投射到物体表面,而为物体表面增加表面细节的过程。

颜色纹理坐标转换方法:

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

(2)指定映射关系:

几何纹理处理

几何纹理使用一个称为扰动函数的数学函数进行定义。

扰动函数通过对景物表面各采样点的位置作微小扰动来改变表面的微观几何形状。

八、阴影处理

8.1 概念定义

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

本影

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

半影

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

阴影

自身阴影:由于物体自身的遮挡而使光线照射不到它上面的某些面。

投射阴影:由于物体遮挡光线,使场景中位于它后面的物体或区域受不到光照射而形成的。

8.2 阴影算法

8.2.1 阴影体法( Shadow Volume )

由一个点光源和一个三角形可以生成一个无限大的阴影体。落在这个阴影体中的物体,就处于阴影中。

在对光线进行跟踪的过程中,如果这条射线穿过了阴影体的一个正面(朝向视点的一个面),则计数器加1。如果这条射线穿过了阴影体的一个背面(背向视点的一个面),则计数器减1。如果最终计数器的数值大于0,则说明这个象素处于阴影中,否则处于阴影之外。

8.2.2 阴影图法( Shadow Mapping )

这种方法的主要思想是使用Z缓冲器算法,从投射阴影的光源位置对整个场景进行绘制。

这时,对于Z缓冲器的每一个象素,它的z深度值包括了这个象素到距离光源最近点的物体的距离。一般将Z缓冲器中的整个内容称为阴影图(Shadow Map)。