目录
光照模型
第一节 漫反射及具体光源的照明
1. 环境光
2. 漫反射
3. 镜面反射与Phong模型
4. 光的衰减
第二节 多边形网的明暗处理
1. 常数明暗法
2. Gouraud方法
3 .Phong方法
材质模型
光照模型
参考链接:
百度文库/view/58a87e9a7d192279168884868762caaedd33baa7.html 用计算机在图形设备上生成连续色调的真实感图形必须完成四个基本的任务。
1.用数学方法建立所构造三维场景的几何描述,并将它们输入计算机。这部分工作可由三维立体造型或曲面造型系统来完成。场景的几何描述直接影响图形的复杂性和图形绘制的计算费用,选择合理而有效的数据表示和输入手段是极其重要的。
2.将三维几何描述转换为二维透视图。这可通过对场景的透视变换来完成。
3.确定场景中的所有可见面,这需要使用隐藏面消除算法将被其它物体遮挡的不可见面消去。
4.计算场景中可见面的颜色,就是根据基于光学物理的光照明模型计算可见面投射到观察者眼中的光亮度大小和颜色组成,并将它转换成适合图形设备的颜色值,从而确定投影画面上每一象素的颜色,最终生成图形。
当光照射到物体表面时,光线可能被吸收、反射和透射。被物体吸收的部分转化为热,反射、透射的光进入人的视觉系统,使我们能看见物体。为模拟这一现象,需要建立一些数学模型来替代复杂的物理模型,这些模型就称为明暗效应模型或者光照(明)模型。
应用光照模型可计算物体表面向空间给定方向辐射的光亮度。
在光栅图形系统上显示的三维图形的真实感取决于能否成功地模拟明暗效应,这要求设计较好的明暗模型,用以计算可见表面应该显示的亮度和彩色。
明暗模型并不需要精确地考虑真实世界中光线和表面的性质,而只需要在兼顾精确程度和计算成本的要求下,追求更好的显示效果。通常设计一个明暗模型需要考虑的主要问题是照明特性、表面特性和观察角度。
>照明特性是指可见表面被照明的情况,主要有光源的数目和性质,环境光及阴影效应等。
>表面特性主要是指表面对入射光线的反射、折射或透明的不同情形,还有表面的纹理及颜色等。
>观察角度是指观察景物时观察者相对可见表面所在的位置。
已经有许多不同的明暗模型都较好地处理了上述各问题。不同明暗模型的区别主要在于模拟的方法,实现的复杂程度,及取得的显示效果等方面。
一般来说,明暗模型可以分解为三个部分,即漫射照明、具体光源的照射及透射效应。具体光源的照明产生的效果又分为漫反射和镜面反射两部分。
简单的光照模型仅考虑光源照射在物体表面产生的反射光。这种光照模型通常假定物体是光滑的且由理想材料构成,所生成的图形可以模拟出不透明物体表面的明暗过渡,具有一定的真实感效果。这类光照明模型称为局部光照明模型。
复杂的光照明模型除了考虑上述因素之外,还要考虑周围环境的光对物体表面的影响。如光亮平滑的物体表面会将环境中其它物体映像在表面上,而通过透明物体也可看到其后的环境景象。这类光照模型称为整体光照模型,它能模拟出镜面映像、透明等精细的光照明效果。
为了表现自然界中的阴影,在应用光照模型时还需要物体表面是否位于阴影区内,以取舍相应光源的照明影响。
更精致的真实感图形绘制还要考虑物体表面的细节纹理,这可以通过一种称为“纹理映射”的技术把已有的平面花纹图案映射到物体表面上,并在应用光照明模型时将这些花纹的颜色考虑进去。物体表面细节的模拟使绘制的图形更接近自然景物。
第一节 漫反射及具体光源的照明
1. 环境光
在多数实际环境中,存在由于许多物体表面多次反射而产生的均匀的照明光线,这就是环境光线。环境光线的存在使物体得到漫射照明。
这时亮度可以如下简单地计算:
I=Ia·Ka
其中I是可见表面的亮度,Ia是环境光线的总亮度,Ka是物体表面对环境光线的反射系数,取值在0到1之间,与表面的性质有关,表明了有多少环境光线从物体的表面反射出去。
2. 漫反射
具体光源在物体表面可以引起漫反射和镜面反射。
漫反射是指来自具体光源的能量到达表面上的某一点后,就均匀地向各个方向散射出去,使得观察者从不同角度观察时,这一点呈现的亮度是相同的。漫反射与观察者的位置是无关的。通常不光滑的粗糙表面总是呈现出漫反射的效果。
Lambert定律指出,漫反射的效果与表面相对于光源的取向有关,即:
Id=Ip·Kd·cosθ
其中Id是漫反射引起的可见表面上一点的亮度。Ip是点光源发出的入射光线引起的亮度。Kd是漫反射系数,取值在0到1之间,随物体材料不同而不同。θ是可见表面法向N和点光源方向L之间的夹角,即入射角,它应该在0°到90°之间。
漫反射系数kd介于0,1之间的球面,在一点光源照射下产生的漫反射。
假定向量N和L都已经正规化,即已经是长度为1的单位向量,这样就可以使用向量的数量积或内积。
因为这时cosθ=N·L,于是得:ld=Ip·Kd·(L·N)
考虑将环境光线和漫反射的效果结合起来,计算亮度的公式应该写成:
I=Ia·Ka+Ip·Kd·(L·N)
考虑到光线随距离增加而减弱这一情况,设R是光线从光源发出到达表面再返回到视点的距离,于是可以把上述公式改为:
I=Ia·Ka+Ip·Kd·(L·N)/R²
但这一公式实际应用的效果不好。因为对于平行投影,光源在无穷远处,故距离R成为无穷大。对于透视投影,1/R²也常常有很大的数值范围而使效果不好。一种比较逼真的效果,可通过用r+k代替R²来获得:
I=Ia·Ka+Ip·Kd·(L·N)/(r+k)
其中r是光源到表面的距离,k是根据经验选取的一个常数。
在许多情形中,与景物的内部距离相比,光源与景物之间的距离大得多。例如太阳光照射一个城市的情形。在这种情形中,可以假定从光源发出的照明作用在整个景物上是恒定的,而可以完全不考虑由于距离所引起的变化。
3. 镜面反射与Phong模型
镜面反射是指来自具体光源的光能到达可见表面上的某一点后,主要沿着由入射角等于反射角所决定的方向传播,从而使得观察者从不同角度观察时,这一点呈现的亮度并不相同。在任何有光泽的表面上都可以观察到镜面反射的效果。
在理想的光泽表面上,例如在非常好的镜面上,反射光线只是在由入射角等于反射角所确定的方向上才有。这意味着只有当观察者相对表面的方向V与反射光线的方向R之间的夹角α为零时,才能看到镜面反射引起的反射光线。对于不是非常理想的光泽表面,例如一个苹果,反射光线引起的亮度随着α的增大而迅速下降。
由Phong Bui-Tuong提出的光照明模型,用(cosα)^n来近似反射光线引起的亮度随着α增大而下降的速率。n取值一般在1到2000之间,决定于反射表面的有关性质。对于理想的反射表面,n就是无穷大。这里选用(cosα)^n,是以经验观察为基础的。
对实际物质来说,被镜面反射的入射光的数量是与入射角θ有关的。如果将镜面反射光的百分数记为W(θ),那么就可以将计算表面亮度的公式修改而得到:
假定反射光线的方向向量R和指向观察点的向量V都已经正规化,即已经是长度为1的单位向量,于是可以简单地利用向量内积计算余弦值:cosα=R·V。
对W(θ),通常根据经验选取一个常数Ks来代替,这样上面的公式可写成下面更容易计算的形式:
实验表明,应用上述公式已经可以得到很好的具有明暗表现的画面,这个公式是形成具有明暗表现画面的良好基础。
对于彩色表面,上述各公式也可以应用,只需分别应用于对各颜色分量的计算。例如,选择通常的红、绿、蓝颜色系统,这时上述公式中有关亮度及反射系数等,就要看做是三元向量。通过分别对各颜色分量进行计算,就可以完成对彩色表面的亮度计算。
4. 光的衰减
光在传播的过程中,其能量会衰减。光的传播过程分为两个阶段:从光源到物体表面的传播及从物体表面到人眼的传播。光的第一个传播阶段的衰减使物体表面的入射光强度变弱第二个阶段的衰减使人眼接受到的物体表面的反射光的强度变弱,总的效果是使物体表面的亮度下降。
1) 光在光源到物体表面的过程中的衰减
在同一光源的照射下,距光源近的物体看起来亮,而距光源较远的物体看起来暗,这是因为光在从光源到物体表面的传播过程中发生了衰减。衰减比例为光的传输距离平方的倒数,若以衰减函数f(d)来表示衰减的比例,则:
f(d)=1/d²
其中,d为光的传播距离。
以上的衰减函数很简单,但应用于本节的光照模型常常不能产生好的效果。虽然这种变化规律对点光源来说是正确的,但真实的世界中物体并不是以点光源照射的。为了弥补点光源的不足,产生真实感更强的图形,一个有效的衰减函数的取法如下:
用户可以调节C0,C1,C2的值以控制f(d)变化的快慢,常数C0用来防止f(d)变得过大。f(d)的最大值为1。
考虑f(d),得到光照明计算式:
2) 光在物体表面到人眼过程中的衰减
为模拟光在这段传播过程中的衰减,许多系统采用深度暗示技术(Depth Cueing)。深度暗示技术最初用于线框图形的显示,使距视点远的比近的点暗一些。经过改进,这种技术现在同样适用于真实感图形的显示。
首先,在投影坐标系(记为xyz)中定义两个平面Z=Zf,Z=Zb,分别为前参考面与后参考面,并赋予比例因子Sf和Sb(Sf,Sb∈[0,1])。
给定物体上一点的深度值Z0,该点对应的比例因子S0这样来确定:
亮度I(由光照明模型计算出来的值)按比例S0与亮度Idc混合,目的是获得最终用于显示的亮度I', Idc由用户指定,
I'=S0I+(1-S0)Idc
例如:若取Sf=1,Sb=0,Idc=0,则当物体位于前参考面之前(Z0>Zf)时,I'=I,即亮度没有被衰减。当物体位于后裁剪面之后(Z0<Zb)时,I'=Idc=0,即亮度被衰减为0。而当Z0∈[Zb,Zf]时,I'=S0I,亮度被部分衰减。由此可以产生真实效果较好的图形。
第二节 多边形网的明暗处理
多边形网方法是指用若干多边形表面去拟合任意形状复杂形体的方法。对用多边形网方法表现的任意形体,形成明暗有三种基本的方法:
常数明暗法(均匀着色法)
亮度插值明暗法(Gouraud着色方法)
法向量插值明暗法(Phong着色方法)
这三种方法每个比前一个复杂。在应用这三种方法时,各种实际计算亮度的明暗模型都可以使用。
1. 常数明暗法
常数明暗法又称均匀着色法,就是对每个多边形表面,整个地用一个亮度值(或颜色值)。应用这种方法,应该有以下假设成立:
(1)光源在无穷远处。这样在多边形表面上的任意点,上节讨论过的L·N是常数。
(2)观察者在无穷远处。这样在多边形表面上的任意点上节讨论过的R·V也是常数。
(3)该多边形表面代替了被模拟的真实表面,而并不是对一个曲面的近似。
如果前面两个假设不管那一个不成立,那么有关的量,例如L和V,可以采用平均值,比方采用在多边形表面中心处求得的值。
假设(3)常常会产生较大误差。这时用来逼近曲面的各多边形表面可能会被分辨出来。由于每个小面与其相邻的小面在亮度上常有差别,所以在显示图形时就能看到这种差别,这种差别由于Mach带效应而得到加强。Mach带效应是指当亮度发生不连续的突然变化时,看上去会有一种边缘增强的感觉。视觉上会感到边缘的亮侧更亮,暗侧更暗。Mach带效应是一种由人类视觉系统加工处理而产生的一种感受现象。
2. Gouraud方法
亮度(或颜色)插值明暗法,通常被称为Gouraud着色方法。这种方法可以消除多边形面上亮度变化的不连续性,但是不能完全消除由于Mach带效应引起的亮或黑的带。增加逼近空间形体的多边形表面的数目,Mach带效应可以随之减弱。
亮度(或颜色)插值明暗法处理步骤:
(1)计算各多边形表面的法向量。
(2)计算各顶点的法向量。这里顶点的法向量,指共享该顶点的所有多边形表面法向的平均值。如果有一条边是作为边界准备显示出来的,可以对这条边的每个顶点,计算两个法向量,每个是一侧各边形表面法向量的平均值。
如在上图中,N为N1~N4的平均值。
(3)计算各顶点的亮度。因为各顶点的法向量已经求得,所以可以利用上节讨论的计算亮度的公式进行计算。
(4)计算各多边形表面上任意点处的亮度值,实现对多边形表面的明暗处理。做法是先利用顶点的亮度值,在边上做线性插值,求得边上的亮度值。再用之在扫描线上做线性插值,从而求得多边形面内任意点处的亮度值。
着色结果:
3 .Phong方法
该方法称为法向量插值着色方法或Phong着色方法。这个方法是对法向量进行插值,而不是对亮度进行插值。在求得各顶点法向量后求多边形边上各点及多边形面内任意点处法向量所用的插值方法,与亮度插值明暗法中进行插值计算的方法相同。因此这个插值也可以很好地应用前面提到的扫描线算法。
求得扫描线上每点的法向量后,在每点处实际计算亮度,可以应用任何一种光照明模型。如果应用镜面反射,比起亮度插值法会得到明显的改进,因为强光能更加真实地得到反映。即使不应用镜面反射,法向插值的结果也比亮度插值的结果好。这是因为对每一点都使用法向量的近似值,使得可以减少Mach带效应引起的问题。但另一方面,对每一点都要计算亮度,使得计算量大为增加。
Phong方法绘制多边形的步骤:
(1)计算多边形的单位法向量。
(2)计算多边形顶点的单位法向量。
(3)在扫描线消隐算法中,对多边形顶点的法向量进行双线性插值,计算出多边形内部(扫描线上位于多边形内部)各点的法向量。
同样,采用如下增量方法可以提高计算速度。
①当扫描线y递增一个单位变为y+1时,NA,NB的增量分别为△NA,△NB,即:
②当x递增一个单位(P点沿扫描右移一个单位)时,Np增量为△Np,即:
(4)利用光照明模型计算P点的颜色。
Phong着色方法中,多边形上每一点需要计算一次光照明模型,因而计算量远大于Gouraud着色方法。但是Phong着色方法绘制的图形更加真实,特别体现在如下两个场合(考虑要绘制一个三角型)。
①如果镜面反射指数n较大,三角形左下角的顶点a(R与V的夹角)很小,而另两个顶点的a很大,以光照明模型计算的结果是左下角顶点的亮度非常大(高光点),另两个顶点的亮度小。若采用Gourauf方法绘制,由于它是对顶点的亮度进行插值,导致高光区域不正常地扩散成很大一块区域。而根据n的意义,当n较大时,高光区域实际应该较集中。采用Phong方法绘制的结果更符合实际情况。
②当实际的高光区域为与三角形中间时,采用Phong方法能产生正确的结果,而若采用Gouraud方法,由于按照光照明模型计算出来的三个顶点处的亮度都较小,线性插值的结果是三角形中间不会产生高光区域。
材质模型
用材料对光的红、绿、蓝三原色的反射率来近似定义材料的颜色。像光源一样,材料颜色也分成环境、漫反射和镜面反射成分,它们决定了材料对环境光、漫反射光和镜面反射光的反射程度。在进行光照计算时,材料对环境光的反射率与每个进入光源的环境光结合,对漫反射光的反射率与每个进入光源的漫反射光结合,对镜面光的反射率与每个进入光源的镜面反射光结合。对环境光与漫反射光的反射程度决定了材料的颜色,并且它们很相似。对镜面反射光的反射率通常是白色或灰色(即对镜面反射光中红、绿、蓝的反射率相同)。镜面反射高光最亮的地方将变成具有光源镜面光强度的颜色。例如一个光亮的红色塑料球,球的大部分表现为红色,光亮的高光将是白色的。
材质的颜色与光源的颜色有些不同。对于光源,R、G、B值等于R、G、B对其最大强度的百分比。若光源颜色的R、G、B值都是1.0,则是最强的白光;若值变为0.5,颜色仍为白色,但强度为原来的一半,于是表现为灰色;若R=G=1.0,B=0.0,则光源为黄色。对于材质,R、G、B值为材质对光的R、G、B成分的反射率。比如,一种材质的R=1.0,G=0.5,B=0.0,则材质反射全部的红色成分,一半的绿色成分,不反射蓝色成分。也就是说,若光源颜色为(LR,LG,LB),材质颜色为(MR,MG,MB),那么,在忽略所有其他反射效果的情况下,最终到达眼睛的光的颜色为(LR*MR,LG*MG,LB*MB)。
同样,如果有两束光,相应的值分别为(R1,G1,B1)和(R2,G2,B2),则将各个颜色成分相加,得到(R1+R2,G1+G2,B1+B2),若任一成分的和值大于1(超出了设备所能显示的亮度)则约简到1.0。