Download presentation
Presentation is loading. Please wait.
Published byYuliani Halim Modified 5年之前
1
第八章 真实感图形生成技术 用计算机生成三维形体的真实感图形,是计算机图形学研究的重要内容之一。真实感图形生成技术在仿真模拟、几何造型、计算机动画制作、影视广告、科学计算可视化、自然景物模拟、医学、气象学、地质学等领域都有广泛应用。近几年来随着多色彩高分辨率光栅图形设备的普及,真实感图形生成技术发展迅速。 真实感图形生成技术涉及到的主要问题包括隐藏线面的消除、明暗处理、阴影处理、纹理处理等,缺乏这些处理,图形会缺乏真实感或真实感不足。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
2
8.1 隐藏线面的消除 在用计算机生成三维图形时,形体的所有部分都将被表示,不管是可见的还是不可见的,这样的图形显示出来形状是不清楚的,甚至是不确定的。图1(a)所示是一个通过棱边表示的立方体的图形,如果不消隐不易辨别。通过适当删除不可见的隐藏部分,可以得到表示明确的图形。图1(b)是观察点在立方体的前上方的消隐图,图1(c)是观察点位于立方体的前下方消隐图,消隐图表示了明确的立体感形体。 图1 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
3
观察点确定后,找出并消除图形中不可见的部分,称为消隐。经过消隐得到的图形称为消隐图。
消除隐藏线和隐藏面是计算机图形学中一个较为困难的问题,消隐算法是决定相对于空间给定位置的观察者,哪些棱边、表面或物体是可见的,哪些是不可见的。消隐不仅与消隐对象有关,还与观察点、观察方向、投影面等的设置方位有关。改变这些设置,物体上某些可见的部分将会变成不可见,某些不可见的部分又会变成可见。 虽然各种消隐算法的基本思想有所不同,但它们大多采用了排序和相关性以提高效率。排序的主要目的是区分体、面、边、点与观察点间几何距离的远近。因为一个物体离观察点愈远,它愈有可能被另一距观察点较近的物体部分地或全部遮挡。消隐算法的效率在很大程度上取决于排序的效率。通常利用画面在局部区域内的相关性来提高排序过程的效率。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
4
消隐算法一般可以分为两类。如果算法是在物体所定义的空间实现,那么这种算法称为对象空间算法;如果算法是在物体投影后的屏幕坐标空间实现,那么这种算法就称为图象空间算法。一般说来,对象空间算法有比较高的精度,而图象空间算法在精度上受屏幕分辨率的限制,但可以方便地利用图象空间中各种相关性获得较高的计算效率。 8.1.1 凸多面体的消隐算法 在消隐问题中,凸多面体是最简单情形。凸多面体是由多个凸多边形平面包围而成的立体,连接形体上不属于同一表面的任意两点的线段完全位于形体的内部。对于单个凸多面体,背向观察点的面是不可见面,如图2所示。因此,只要判断出这些“朝后面”,即可达到隐藏面消除的目的。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
5
构成多面体的每个平面都有其法线。通常规定法线的方向是由多面体的内部指向多面体的外部,称为“外法线”。
图2 构成多面体的每个平面都有其法线。通常规定法线的方向是由多面体的内部指向多面体的外部,称为“外法线”。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
6
假定在右手坐标系中,观察点位于原点,投影面平行于XY坐标平面,以Z轴作为深度坐标轴,视线平行于Z轴,如图3所示,则平面外法线同Z轴方向的夹角,就是外法线同视线的夹角。很显然,对于单个凸多面体,当外法线同视线的夹角小于90°时,其平面背向观察点为不可见面。 图3 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
7
设平面外法线同Z轴方向的夹角为β,则cosβ为单位平面外法线矢量在Z轴上的分量。β角同可见性的关系为:
设平面方程为 Ax+By+Cz+D=0 法向矢量为 N﹦Ai﹢Bj﹢Ck 则cosβ﹦C/|N|。作为判断依据,只需要知道cosβ的正负号就够了。因为|N|恒大于 0,所以cosβ的符号由C决定,因此,当C<0 时,为可见面。当C≥0时,为不可见面。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
8
为了决定一个凸多面体的不可见面,对于每一个面按上述公式进行计算,当C≥0时为不可见面。
由于三点可以构成一个平面,和三点可以构成两个矢量,由两矢量的叉积可以求出平面的法线。对于凸多面体,任取构成平面多边形的三个相邻点P0(x0,y0,z0),P1(x1,y1,z1),P2(x2,y2,z2),按右手规则确定点的顺序,此时有: 为了决定一个凸多面体的不可见面,对于每一个面按上述公式进行计算,当C≥0时为不可见面。 对于单个凸多面体,该方法可判别出所有隐藏面,因为每个面或是完全可见,或是完全不可见。对于其它形体,如凹多面体或由多个物体组成的复杂形体,则还需进行更多的测试来检查是否存在被其它面或其它物体完全或部分遮挡的表面。通常,凸多面体消隐处理可消除一半左右的隐藏面。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
9
凸多面体消隐演示示例: 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
10
8.1.2 画家算法 画家创作一幅画的过程是先画背景,然后画中间景物,最后才画近景。这样,每一层总是在前一层的景物上覆盖,从而解决了隐藏面或可见性问题。采用同样的技术,首先将形体的所有面根据它们与观察点的距离排序,然后按距离递减顺序逐个将各面显示出来,由于当重迭时,后显示的画面会覆盖先显示的画面,这样就可以实现消除隐藏面的目的。这种隐藏面消除算法通常称为画家算法。 画家算法也称表优先级算法或深度优先排序算法。这种算法排序操作同时在对象空间和图象空间完成,而在图象空间产生消隐图。实现时首先以深度优先级进行排序,距观察点远的面优先级低,近的面优先级高,以此建立一张深度优先级表。然后按优先级表顺序将各面送入帧缓冲器进行显示。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
11
深度优先级表的建立是动态进行的。假定观察方向同Z轴同向,则最初可按各面的最小z值排序。但这一初步排序可能出现差错,如图4所示的情况。图中尽管面S1的最小z值小于面S2的最小z值,但正确的顺序是面S2位于面S1前。因此在实际将z值最大的面S写入帧缓冲器之前,需与其它面比较以确定是否在Z方向存在重叠。若无重叠,则对S进行写入,若存在重叠,则需作一些比较以决定是否有必要重新排序。如果存在两面相交和循环遮挡,如图5中所示的情况,这时简单的排序是无法解决问题的,必须求交分割后再进行排序。 图4 图5 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
12
(1)计算各面最小z值zmin,并以此值的优先级进行排序,建立初步的深度优先表;
下面给出这种算法过程的简单描述 (1)计算各面最小z值zmin,并以此值的优先级进行排序,建立初步的深度优先表; (2)表空结束。否则取表中深度最大的面Sn,检查表中其它各面Sk(k=0,1,...,n-1)与Sn是否在Z方向存在重叠的关系。存在,记重叠面为Sj转(3)。否则,将Sn写入帧缓冲器,n=n-1转(2); (3)检查Sn是否遮挡Sj,不遮挡则将Sn写入帧缓存器,n=n-1转(2)。否则,交换Sn和Sj在表中位置,转(2)。如果Sn和Sj已经交换过位置,则两面交叉遮挡,转(4); (4)用Sn和Sj的交线分割Sn为两部分,转(1)。 画家算法的优点是简单,容易实现,缺点是算法中的深度排序计算量大。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
13
8.1.3 深度缓冲器算法 深度缓冲器算法是一种图象空间消隐算法。由于一般采用Z轴方向为观察方向,沿Z轴计算深度,所以此方法也称为z缓冲器算法。它需要两个缓冲器,一个是深度缓冲器,用于保存表面上各象素点(x,y)所对应的深度值z,一个是刷新缓冲器,用于保存各点的属性值。两个缓冲器的大小与屏幕上象素点的个数相同,也与显示器帧缓冲器的单元个数相同。 深度缓冲器算法的原理是,对一坐标(x,y),查找最小的z(x,y)值。对每一象素计算z(x,y)值并与已经存在z缓冲器中该象素的原深度值z比较。如果z(x,y)小于原z值则替换原值,同时用当前点的属性更新原属性。算法的最大优点在于简单,它可轻而易举地处理任意复杂的画面。因为图象空间的大小是固定的,计算量最多随画面复杂度线性增长。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
14
对于多边形中的每一象素(x,y,z),将z(x,y)与深度缓冲器中存储值Zbuffer(x,y)
深度缓冲器算法可描述如下: (1) 刷新缓冲器置成背景光强或颜色; (2) 深度缓冲器置成最大z值; (3) 以任意顺序扫描各多边形: 对于多边形中的每一象素(x,y,z),将z(x,y)与深度缓冲器中存储值Zbuffer(x,y) 进行比较,若z(x,y)<Zbuffer(x,y),则将此点属性写入刷新缓冲器,且用z(x,y)重置Zbuffer(x,y); (4) 所有多边形都处理完后,显示消隐图。 深度缓冲器算法便于硬件实现。实际上,在当今生产的大多数高档图形工作站,除了帧缓存外,还带有用于消隐的深度缓存,从而克服了深度缓存算法占用大量存储单元的缺点。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
15
8.1.4 区域细分算法 区域细分算法也称为Warnock算法。这种算法在图像空间中实现。该算法充分利用图形的区域连贯性,在连续的区域上确定可见线面及其属性。它既可以用于消除隐藏线,也可以用于消除隐面,适用于解决多边形所表示的画面消隐问题。 区域细分算法的基本思想是,把形体投影到全屏幕窗口上,然后递归地分割窗口,直到窗口内仅包含单个可见面或不包含任何面。算法先检测初始窗口是否包含图形,如果不包含,则按背景色显示,若窗口内只有单个面,则把该面显示出来。否则,当窗口内含有两个以上的面时,则把窗口等分成四个小窗口,对每个小窗口再作上述同样的处理。这样反复地进行下去,如果窗口细分到象素大小,而窗口内仍有两个以上的面,这时不必再继续分割,只要取窗口内最近的可见面的颜色或所有可见面的平均色作为该象素的值。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
16
细分过程如图6所示,算法每次将区域分割为四等分,类似于组织一棵四叉树。这样,即使是一个1024×l024分辨率的窗口被细分10次以后,也仅能使每个单元覆盖一个象素。
2019/4/5 计算机图形学演示稿 纪玉波制作(C)
17
窗口与多边形面的相互关系可分为四种:内含、相交、包围和分离。内含指的是多边形全部落在窗口内;相交指的是多边形一部分在窗口内,另一部分在窗口外;包围是指窗口包含在多边形内;分离指的是多边形完全在窗口外。四种关系如图7所示。 图7 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
18
我们可根据这四种关系来确定一个窗口是否需要继续细分。若以下条件之一为真,则无须再对窗口进行细分:
①所有多边形均为窗口的分离多边形,此时窗口内为空; ②在窗口内只有一个内含多边形; ③窗口只与一个多边形相交; ④窗口只被一个多边形所包围或包围多边形遮挡了其它所有多边形。 通过检查所有多边形的包围盒与窗口边界的关系可以实现条件①的检测。利用XY平面上的包围盒可以判别内含多边形。窗口和多边形相交关系可以借助于裁剪算法来解决。利用平面方程计算可以测定所有包围多边形、重叠多边形和内含多边形在窗口边界四顶点处的深度值,若某多边形的深度值小于其它所有多边形,则条件④结果为真。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
19
区域细分算法可以借助于堆栈结构实现,算法描述如下: (1)将初始窗口入栈; (2) 栈空结束。否则,取出栈顶窗口转步骤(3);
(3) 检测确定当前窗口与多边形关系,若 A.条件①为真,以背景颜色显示当前窗口,转步骤(2); B.条件②为真,多边形内区域,以该多边形颜色显示,其它区域以背景颜色显示,转步骤(2); C.条件③为真,相交多边形位于窗口内的区域以该多边形颜色显示,其它区域以背景颜色显示,转步骤(2); D.条件④为真,以包围多边形颜色显示当前窗口,转步骤(2); E.条件①~④均不满足,转步骤(4)。 (4) 对当前窗口进行再细分,细分后的子窗口存入堆栈,转(2)。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
20
8.2 简单光照模型 当光照射到一个不透明的物体表面时,部分被反射,部分被吸收并转化为热。对一个透明的表面,部分入射光被反射,而另一部分被透射。其中,反射或透射部分的光使物体可见。如果入射光全部被吸收,物体将不可见,该物体称为黑体。一物体表面呈现的颜色是由物体表面向视线方向辐射的光能中各种波长的分布所决定的。光能中被吸收、反射或透射的数量决定于光的波长和物体的表面特性。由于光照射到物体表面产生的现象是很复杂的,它与光源的性质、形状、数量、位置有关,还与物体的几何形状、光学性质、表面纹理等许多因素有关,甚至与人眼对光的生理与心理视觉因素有关,我们不可能把这一切都准确计算出来。我们将讨论计算光强度的一些较为简单的方法,这些经验模型为计算物体表面某点处的光强度提供了简单有效的途径,并能在许多应用场合获得较好的效果。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
21
式中ka为由物体表面材料属性决定的环境光反射系数。
8.2.1 环境光 在实际场景中,一个物体即使不直接暴露于光源之下,还会接收到从周围物体散射出来的光,这种光是由于周围各物体被照明后多次反射所产生的。例如从墙壁、地板及天花板等反射回来的光。这种光是一种分布光源,称为环境光。环境光的特点是照射在物体上的光来自周围各个方向,又均匀地向各个方向反射。由于处理分布光源所需计算量甚大,通常将这种光所产生的效应简化为在各个方向都有均匀的光强度。这样,每个物体表面都得到同样大小的光照,且反射光相对于该物体表面亦为常数,即反射光与观察方向和物体表面的朝向无关。但不同物体的反射光强度取决于物体的表面特性,如果用Ia表示环境光的大小,则表面上一点对环境光的反射强度Ie可表示为 Ie﹦kaIa ≤ka≤1 式中ka为由物体表面材料属性决定的环境光反射系数。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
22
8.2.2 漫反射光 我们可以用光源来表示所有发出辐射能量的物体,如灯泡或太阳。点光源是光源的最简单模型。这种光源模型是对场景中比物体小得多的光源的合适的逼近。离场景足够远的光源,如太阳,也可用点光源模型来较好的模拟。我们在下面反射光的讨论中假定使用点光源模型。 从物体表面反射出来的光决定于光源中光的成分、光线的方向、光源的几何性质以及物体表面的朝向和表面的材料属性等。物体表面的反射光又可分为漫反射光和镜面反射光。漫反射光可以认为是光穿过物体表面并被吸收,然后重新发射出来的光,漫反射光均匀地散布在各个方向,因此同观察者的位置无关。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
23
朗伯(lambert)余弦定律总结了点光源所发出的光照射在一个完全漫反射体上时光的反射法则。根据朗伯定律,一个完全漫射体上反射出来的光强度同入射光与物体表面法线之间夹角的余弦成正比。即
Id﹦kdIlcosθ 0≤θ≤1 式中Id为漫反射光强度;Il为从一点光源所发出的入射光的光强度;kd为决定于物体表面材料属性的漫反射系数,0≤kd≤1;θ为入射光与表面法向量之间的夹角,如下图所示。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
24
反射光的光强度是光波长的函数,然而在简单的光照模型中,通常假定光波长为常数。若N为物体表面的单位法向量,L为从表面上一点指向点光源的单位矢量,则cosθ= N·L,则(8-3)可以写成:
Id﹦kdIl(N·L) 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
25
8.2.3 镜面反射光 除了漫反射,光源照射物体表面还会产生高光或强光,这种现象称为镜面反射。这种高光效果在光滑的物体表面上很明显,如磨光的金属表面,而对于阴暗物体表面则效果较差。 镜面反射光是具有一定方向的反射光。镜面反射角等于入射角,它们位于表面的单位法向量N的两侧,如图9所示。用R表示镜面反射方向的单位矢量,L表示指向点光源的单位矢量,V为指向视点的单位矢量,是V 与R之间的夹角。对于一个理想的镜面反射,入射光仅在镜面反射方向有反射现象,即仅当V与R重合时才能观察到反射光,而在其它方向都看不到反射光。对于这种光滑的反射面,镜面的反射光强比漫反射的光强和环境光的光强高出很多倍。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
26
图9 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
27
对于一般光滑表面,由于表面具有一定粗糙度,其表面实际上是由许多朝向不同的微小表面组成,镜面反射方向分布在R周围有限范围内。较光滑表面的镜面反射范围较小,而粗糙的物体表面则有较大的镜面反射范围。Phong提出一个计算镜面反射的经验公式,称为Phong模型。公式用余弦函数的幂次来模拟镜面反射光的空间分布,可表示为: Is﹦ksIlcosnα 式中Is为镜面反射光强度;Il为入射光的光强度;ks为决定于物体表面材料属性的镜面反射系数,它是入射角和入射光波长的函数,很难精确得到,实际应用中常以美学观点或实验方法取一常数,0≤ks≤1;镜面反射光强度与cosnα成正比,0°≤α≤90°,因而0≤cosnα≤1。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
28
n为镜面反射光的会聚系数,其值同被观察物体表面的光滑度有关,会聚性好的光滑表面,如金属表面,n值较大,而粗糙表面如纸张表面的n值则较小。n值一般取1~2000,图10表示了n对镜面反射角度范围的影响。
2019/4/5 计算机图形学演示稿 纪玉波制作(C)
29
若R与V已规格化为单位向量,则式(8-5)可改写为: Is﹦ksIl(R·V)n
当视点取在镜面反射方向附近时,观察者接受到镜面反射光较强,而偏离这一方向观察时,接受到镜面反射光就会减弱,故高光随着观察者的位置变化而变化。另外,由于镜面反射光是经物体外表面直接反射而产生的,与漫反射光不同,高光具有与入射光同样性质,而与物体表面颜色无关。 若R与V已规格化为单位向量,则式(8-5)可改写为: Is﹦ksIl(R·V)n 综上所述,从视点观察到物体表面上任一点处的颜色和亮度I应为反射光强度Ie、漫反射光强度Id及镜面反射光强度Is的总和,即 I﹦Ie﹢Id﹢Is 将各入上式,则得 I﹦kaIa﹢kdIl(N·L)﹢ksIl(R·V)n 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
30
I﹦kaIa﹢Il(kd(N·L)﹢ks(R·V)n)/(d+K) 常数项K为一调整常数,它的存在可以防止当d很小时1/d值太大。
另外,反射光强度还和物体与点光源的距离d的平方成反比,即物体离光源愈远,显的愈暗。因此,若要得到真实感的光照效果,在光照明模型中必须考虑这一因素。然而,若采用因子1/d2来进行光强度衰减,简单的点光源照明并不总能产生真实感的图形。当d很小时,1/d2会产生过大的强度变化,而d很大时反射光强度项将无意义。另外,人对物体的视觉也同视点与物体的距离有关,因此综合考虑,可以用以下修正公式,它是根据经验,取同距离的关系为线性衰减。 I﹦kaIa﹢Il(kd(N·L)﹢ks(R·V)n)/(d+K) 常数项K为一调整常数,它的存在可以防止当d很小时1/d值太大。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
31
I﹦kaIa﹢Il(kd(N·L)﹢ks(N·H)n)/(d+K)
上式就是计算机图形学中通常使用的简单光照模型,也称为明暗函数,用它可以计算出物体表面上每一象素处的光强或明暗色调。上式的计算量是很大的,尤其是镜面反射方向矢量R的计算。使用矢量L与V间的半角矢量H来计算镜面反射范围可得到简化的Phong模型。只须以N·H替代Phong模型中的点积V·R。这等于用cos计算来替代cosα,如图11所示。半角矢量可从下式计算得到: H﹦(L﹢V)/2 替换后(8-8)可以写为: I﹦kaIa﹢Il(kd(N·L)﹢ks(N·H)n)/(d+K) 若观察点与光源离物体表面足够远,则V与L可以看作为常量,则H亦为常量。就是说只要计算一次H的值就可以,但R是随N变化而改变的,这就是用N·H近似V·R的好处。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
32
图11 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
33
若存在多个点光源,则物体表面上的反射光强度是各个点光源照射效果的线性相加,这时光照模型为:
8.2.4 多点光源和颜色 若存在多个点光源,则物体表面上的反射光强度是各个点光源照射效果的线性相加,这时光照模型为: I﹦kaIa﹢ (kd(N·Li)﹢ks(N·Hi)n) 其中,m为点光源的数目。 大多数真实感图形均为彩色图形,要生成一幅彩色图形,需要用RGB三基色分量来标识光源强度和物体表面颜色,并根据光照模型来计算反射光中的RGB分量。但由于镜面反射光的颜色通常取决于入射光的颜色,因此计算RGB分量时ks取相同的常数值。将式(8-10)改写成RGB三个分量的形式为: IR﹦kaRIaR﹢IlR(kdR(N·L)﹢ks(N·H)n)/(d+K) IG﹦kaGIaG﹢IlG(kdG(N·L)﹢ks(N·H)n/(d+K) IB﹦kaBIaB﹢IlB(kdB(N·L)﹢ks(N·H)n/(d+K) 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
34
计算出RGB三个基色分量的强度,用来控制RGB彩色显示器中相应的电子枪,就可以获得彩色图形。
8.3 透明处理 前面介绍的光照模型假定所考虑的物体表面是不透明的。但有些物体是透明的,如水、玻璃等。一个透明物体的表面会同时产生反射光和折射光。当光线从一种传播介质进入另一种传播介质时,例如从空气进入水中时,光线会由于折射而产生弯曲。光线弯曲的程度由Snell定律决定,该定律指出折射光线与入射光线位于同一平面内,而且入射角与折射角之间存在下列关系: η1sinθ=η2sinθ’ 式中,η1和η2分别为光线在第一种介质和第二种介质中的折射率,θ为光线入射角,θ’为折射角,图12为示意图。实际中,没有那种材料能够透过全部入射光,总有一部分被反射出去。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
35
图12 入射与折射的关系 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
36
光有规则透射和漫透射。透明材料如玻璃等会产生规则透射,透过透明材料观察物体仍然是清晰的。如果透射光线是发散的,那么就会形成漫透射,发生漫透射的材料呈现朦胧的半透明状态。漫透射计算复杂,大多数光照模型仅考虑规则透射。 当要表示一个透明表面时,光强度计算公式必须进行修改,一方面要考虑由于透射的原因,表面反射光强度的减弱,另一方面还要考虑表面背后物体的反射光穿过透明表面,对表面总光强度的增加,如图13所示。 为了加速光强度的计算,简单的透明算法不考虑折射导致的路径变化,这样折射角总是与入射角相同,也不考虑光线在媒体中所经路线长度对光强的影响。对透明的可见面,取它与同它相距最近的另一表面光强的线性组合,则总的光强度可表示为: I=ktIt+(1-kt)Ic ≤kt≤1 其中,Ic为透明可见面的反射光强度,It为透明可见面后第一个可见表面上的光强度。kt为透明可见面的透明度。kt=0对应不透明面,光线无透射。kt=1对应不可见面,光线全部透射。Ic和It可用前面介绍的光照模型计算。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
37
若It所对应表面也是透明面,则上述算法可以递归地使用,直到遇到一个不透明面或背景时为止。
透明处理还可以用于显示复杂物体或空间的内部结构。为每一多边形表面均设一透明度,透明度的初始值均取为1,绘制出物体的外形消隐图。通过有选择地将某些表面的透明度改为0,即将它们当做看不见的面处理,这样再次绘制画面时,就会显示出物体的内部结构。 图13 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
38
其中,n为包围顶点的平面个数,图中示例n=4。
8.4.1 表面法线的计算 但为了提高计算速度,一般用多边形平面逼近曲面。对于多边形平面,可根据其平面方程的系数,决定平面的法向量,平面内所有点的法向量是相同的。而多边形平面在顶点处的法向量可取包围该顶点的各多边形平面法向量的平均值。如图14中,顶点V处的近似法向量为: NV﹦(N1﹢N2﹢...﹢Nn)/n 其中,n为包围顶点的平面个数,图中示例n=4。 如图14 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
39
NV﹦VV1VV2﹢VV2VV3﹢VV3VV4﹢VV4VV1
上式近似法向量的模依赖于围绕顶点的各多边形棱边数和长度。多边形愈大,棱边愈长,模愈大,实际使用中应该单位化。 图15 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
40
当观察画面上具有相同光强度的区域时,在其边界处眼睛所感受到的明亮度常常会不同于实际值。眼睛的这一视觉特性使得光强度为常数的区域看上去似乎是光强度发生了变化,这一现象称之为马赫(Mach)带效应。在光强度发生急剧变化的地方会出现马赫带效应,这时常显得更亮或更暗。对于多边形平面,每一点的光强度由相应多边形的法向量决定,则在两多边形平面的交界处,光强度会发生急剧改变,产生马赫带效应。马赫带效应影响图形的真实感,利用下面介绍的两种明暗处理方法都可不同程度的改善这一现象。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
41
8.4.2 Gouraud光强度插值方法 这种由Gouraud提出的光强度插值方法通常被称为Gouraud明暗处理。该方法先计算出各多边形顶点处的光强度值,然后再采用双线性插值方法确定多边形平面上每一点处的光强度值。由于两相交多边形平面边界上的光强度值被同时用于两平面内点的光强度插值计算,这样就消除了在多边形平面绘制中存在的光强度不连续现象。 多边形顶点处的法向量可以计算得到,然后可以根据光照模型来确定顶点处的光强度值,再使用二次线性插值求出其它点的光强度。具体计算办法如图16所示,假设多边形三个顶点的光强度值已经计算出,分别记为I1,I2,I3。如要计算扫描线上点P的光强度值,先用I1,I2,I3第一次线性插值计算扫描线与三角形交点R和Q点的光强度值: 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
42
图16 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
43
式中x,y为各点投影到屏幕后的坐标。上面各次线性插值还可以改成增量的形式,例如改为:
0≤t≤1 采用Gouraud明暗处理解决了两多边形平面之间光强度的不连续过渡以及多边形平面域内光强度单一的问题,而且计算速度较之简单光照模型有明显的提高。但此方法对漫射效果好,对镜面反射效果差。主要表现在高光域的形状不规整,高光域只能在顶点周围形成,不能在多边形域内形成。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
44
8.4.3 Phong 法向量插值方法 Phong提出了对法向量而不是光强度进行插值的方法。在多边形平面上各点处按照线性插值计算法向量,然后根据光照模型计算光强度。该方法通常被称为Phong明暗处理。它能够更真实地表现物体表面镜面反射效果并大大降低马赫带效应。 这种方法与Gouraud方法一样,首先计算多边形每个顶点的法向量,然后应用与Gouraud光强度插值计算类似方法求得每个点处的法矢量。如图17,假设三个顶点处的法向量已经计算出,分别记为N1,N2,N3。如果要计算点P处的法向量NP,先用N1,N2,N3线性插值计算R和Q这两点处的法向量NR和NQ,然后再利用NR和NQ线性插值计算NP。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
45
图17 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
46
Phong明暗处理对法向量插值的方法,比Gouraud明暗处理中对光强度插值法所得到的结果精确得多。法向量插值可以生成高光,真实感更强。然而,法向量插值计算量较大,既要计算各项点的法向量,插值计算多边形平面上各点的法向量,还要用光照模型计算各点的光强度值。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
47
8.5 阴影处理 当观察方向与光源方向重合时,观察者是看不到阴影的。只有当两者方向不一致时,才会看到阴影。阴影使人感到画面上景物的远近深浅,从而极大地增强画面的真实感。 阴影一般分为两类:自身阴影和投射阴影。物体本身遮挡而使光线照不到某些面称自身阴影。投射阴影有本影和半影之分。我们观察一个物体影子时,可以看到位于中间全黑的轮廓分明部分就是本影。本影周围半明半暗的区域为半影。本影是所有光源的光线照不到的区域,而半影则为可接收到分布光源部分光线的区域。如果只有一个点光源或平行光,将只产生本影。如果在有限距离内有分布光源,将同时形成本影和半影。为避免大量计算,通常只考虑由点光源形成的本影。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
48
图18 自身阴影和投射阴影 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
49
由于阴影是光线照射不到而观察者却可见到的区域,所以在画面中生成阴影的过程基本上相当于二次消隐,一次是对光源消隐,另一次是对视点消隐。生成自身阴影的过程如下:
(1)首先将视点置于光源位置,用相同于消除隐藏面的方法找出光线照不到的面; (2)然后按实际的视点位置和观察方向,对物体进行消隐。 投射阴影是由于物体遮挡光线,使场景中位于它后面的物体或区域受不到光线照射而形成的。投射阴影可从光源投射光线将所有非自隐藏面投影到场景中而得到。投影面与场景中其它平面的交线组成阴影多边形,这只需先找到物体的轮廓线并将它对场景作投影,而不必将所有非自隐藏面都投影到场景中。 在得到阴影信息后,就可利用光照模型计算得到有阴影效果的图形。若选用简单光照模型,并只有点光源,则阴影由于不能得到光源的直接照射,只有环境光对其亮度有贡献。 另外,阴影决定于光源的位置而与观察者位置无关。一旦对所有光源确定出阴影区域。只要光源位置不变,则对于任意选定的观察位置,由隐藏面算法所生成的阴影均是正确的。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
50
8.6 纹理处理 现实世界中的物体往往有各种表面细节, 例如木制品表面的木纹,墙面上的装饰图案等,在计算机图形学中,物体的表面细节称为纹理。若将计算机生成的形体表面加上纹理,可以大大增强图形的真实感。用计算机生成纹理通常考虑两种方式,一种是通过在光滑表面上附加花纹或图案生成表面纹理这一过程可用纹理映射函数描述实现。另一种是通过在光照模型计算中扰动表面法向量,使表面呈现出凸凹不平的纹理效果,这一过程可用扰动函数描述实现。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
51
8.6.1 纹理映射 在光滑表面上附加花纹或图案生成表面纹理的一般方法,是在一平面区域上,也即纹理空间中,预先定义纹理图案,然后建立物体表面的点与纹理空间的点之间的对应关系。当物体表面的可见点确定之后,以纹理空间对应点的值修改物体表面的值,就可以把纹理图案附加到物体表面上。假定纹理图案定义在纹理空间正交坐标系(s,t)中,而物体表面定义在另一个正交坐标系(u,v)中,则在物体表面上描绘纹理图案需要在两个空间中定义一个映射函数,即: 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
52
为了简化计算,一般假定映射函数为一个线性函数,即:
式中各系数可由两个坐标系中已知点之间的对应关系而求得。 纹理图案定义有连续法和离算法两种。连续法把纹理函数定义为一个二元函数,函数的定义域就是纹理空间。离散方法把纹理定义在二维数组中,这个数组可以代表一个用于光栅图形显示的字符位图。位图可以是用程序生成的各种图形,也可以是用交互式绘图系统绘制的各种图案,还可以是用扫描仪输入的数字化图象等。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
53
8.6.2 扰动映射 虽然纹理映射可获得精致的表面细节,但它不合适于模拟象桔子皮皱纹那样的粗糙物体表面,即凹凸纹理。将凹凸纹理映射到物体表面上,看起来仍象是在表面上画的凹凸花纹,这是因为纹理图案的光照细节通常与场景中的光照方向不完全一致。生成物体表面凹凸纹理的较好方法是在光照模型计算中通过引入一个扰动函数来修改表面法向量,称这个方法为扰动映射。 扰动映射在表面每一点沿其表面法向量方向附加一个新的向量,这一向量比较小,不影响原表面的大致形状,但对其表面该点处的法向量产生较大扰动作用,结果使曲面变得凹凸不平。通过恰当选择扰动函数,可使生成图形具有不同的凹凸纹理效果。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
54
若P(u,v)表示一个参数曲面上的点,该点处的表面法向量为: N﹦PuPv
其中,Pu与Pv为P(u,v)关于参数u和v的偏导数。为了将扰动因子加入到曲面的法向量中去,定义一个扰动函数F(u,v),将物体表面上点P(u,v),沿该点处的法向量方向位移F(u,v)个单位长,得: P’(u,v)﹦P(u,v)﹢F(u,v)·n 其中,n=N/|N|是表面单位法向量。新的表面法向量可以通过对两个偏导数求叉积来获得: N’﹦Pu’Pv’ 其中 Pu’﹦P’/u=(P+F.n)/u﹦Pu﹢Fu·n﹢F·nu Pv’﹦ P’/v=(P+F.n)/v﹦Pv﹢Fv·n﹢F·nv 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
55
由于F(u,v)的值相对于式中其它量很小,可以忽略不计最后一项,因此上述两个偏导数可以近似地表示为:
Pu’﹦Pu﹢Fu·n Pv’﹦Pv﹢Fv·n 所以,被扰动点处的表面法向量为: N’﹦Pu’Pv’﹦PuPv﹢Fu(nPv) ﹢Fv(Pun)﹢FuFv(nn) 因为nn﹦0,故: N’﹦N﹢Fu(nPv)﹢Fv(Pun) 其中N﹦PuPv为原法向量,D= Fu(nPv)﹢Fv(Pun)为扰动向量,扰动向量改变了原曲面法向量。新法向量经过单位化,用于光照模型中计算曲面的光强度,产生凹凸纹理。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
56
Fu﹦(F(u+d,v)- F(u-d,v))/2d Fv﹦(F(u,v+d)- F(u,v-d))/2d
扰动函数同纹理函数一样可以用连续法和离算法两种形式定义。可以求导的任一函数几乎都可取作扰动函数。相对而言,离散法更常用一些,可利用简单的位图或交互式图形系统作出的模拟纹理图案作为扰动函数。图案中较暗的颜色对应于较小的F值,较亮的颜色对应于较大的F值,把各象素的值用一个二维数组存储起来作为F值的查找表,表上没包括的中间值可以由双线性插值方法求得。但在绘制凹凸纹理时使用的不是F值本身,而是其偏导数,可以用下列差分公式来近似计算Fu和Fv: Fu﹦(F(u+d,v)- F(u-d,v))/2d Fv﹦(F(u,v+d)- F(u,v-d))/2d 其中d是取样点间的距离。当F定义在一个N×N数组中时,d=1/N。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
57
8.7 光线跟踪算法 前面介绍的光照模型仅考虑了光源直接照射在物体表面产生的反射和折射光能,忽略了光能在环境景物之间的传递。一般来说,物体表面入射光除来自光源外,还有来自相邻的不同景物表面的反射光。简单光照模型将周围环境对物体表面光强度的贡献概括成一均匀入射的环镜光分量,并用一常数表示,忽略了来自环境的镜面反射光和漫射光,使图形真实性受到影响。为了增加图形的真实感,必须考虑环境的漫射、镜面反射和透射对物体表面产生的光照效果。二十世纪80年代初出现的光线跟踪方法,就是这样的方法。光线跟踪方法是基于几何光学的原理,通过模拟光的传播路径来确定反射、透射和阴影等。由于每个象素都单独计算,故能更好地表现曲面细节。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
58
8.7.1 光线跟踪算法 除光源直接照射所产生的反射光强度外,光线跟踪算法还考虑了来自环境的漫射、镜面反射和透射对物体表面产生的光强度,其光照模型是由Whitted提出的,表示式如下: I﹦I1﹢RsIs﹢RtIt 其中,I1是不考虑环境影响时,由简单光照模型计算的光强度;Is是在镜面反射方向上来自其它物体的光强度;It是在折射方向上来自其它物体的光强度;Rs和Rt分别表示物体表面的反射系数和透射系数。此式也称为整体光照模型。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
59
光线跟踪算法利用光线可逆性原理,不是从光源出发,而是从视点出发,沿其视线方向追踪,模拟光的反射和透射,通过对每个象素分别计算光强度来生成图形。如图19所示。
2019/4/5 计算机图形学演示稿 纪玉波制作(C)
60
以光线跟踪本质上是个递归算法,每个象素的光强度必须综合各级递归计算的结果才能获得。光线跟踪结束的条件有三个,光线与光源相交、光线与背景相交以及被跟踪的光线对第一个交点处的光强度作用趋近于0。
光线跟踪过程可用一棵二叉树(称为光线跟踪树)来表示。逐个将相交点加入到二叉树中,树的左分支表示反射光线,右分支表示透射光线。光线跟踪树的最大深度可由用户选定,或由存储容量决定。当树中的一束光线到达光源、背景或预定的最大深度时,就停止跟踪。在计算象素点的光强度时,需从叶结点开始由底向上遍历相应的二叉树,在树的每一个结点处,递归地调用整体光照模型公式,累计光强度贡献直到二叉树根结点。 2019/4/5 计算机图形学演示稿 纪玉波制作(C)
Similar presentations