作者:sinerjian :DXkAb2
.h~M&d!
目前比较流行的光线追踪技术和辐射度渲染技术可以统称为球型照明技术。在说明这两种渲染技术之前,有必要先谈谈一种真实感光照模型——整体光照模型。 bg[k8*.:F
什么是整体光照模型?简单的说,就是在渲染过程中考虑了整个环境(在具体的3D制作软件中就是制作的场景)的总体光照效果和各种景物间光照的相互影响。这个思想最先由Whitted提出。因此,整体光照模型又被称之为Whitted整体光照模型,这种模型是在Photo模型(在后面将会讲到)中增加了环境镜面反射光亮度和环境规则透射光亮度两个因素,它除了考虑光源直接照射引起的反射光到达观察者的光亮度之外,还考虑从场景中其他物体镜面反射或透射来的光亮度。用公式表示就为: $Q{)AN;m
I=Ic+IsKs+ItKt V@&zn8?
这里有必要将各个参数解释一下: =G]} L<
I:景物表面P点(这是一个假设点)向观察点辐射的光亮度。 PX65Z|~>_
Ic:光源直接照射P点引起的反射光亮度(这个亮度值按Photo模型计算) *[*LtyCQt4
Is:其他物体因镜面反射而向P点辐射的光亮度。 mf=, 6fx28
It:其他物体因规则透射而向P点辐射的光亮度 7Te`#"
Ks:景物表面P点的反射系数 5gARGA
Kt:景物表面P点的透射系数 tuo'4%]i
注意,这里It、Is的确定要求助于光线追踪算法。 ]`0(^)U&
OK,现在进入正题。首先讲讲光线追踪算法。严格而言,光线追踪算法分为两种:正向追踪算法和反向追踪算法。其中,正向追踪算法是大自然的光线追踪方式,即由光源发出的光经环境景物间的多次反射、透射后投射到景物表面,最终进入人眼。反向追踪算法正好相反,它是从观察者的角度出发,只追踪那些观察者所能看见的表面投射光。就目前而言,所有3D制作软件的光线追踪算法都是采用反向追踪法,原因是这种算法能够最大程度地节省计算机的系统资源,而且不会导致渲染质量的下降。 ?`V%[~4_I
下面就详细介绍一下反向追踪算法,如图: "5C)gxI^
x^^;/%p
6[,*2a8
如图所示,从视点出发,通过屏幕上一像素E的投射光线,求出光线与场景中最近的物体交点P1,在交点P1处,光线分为沿镜面反射方向r1和折射方向T1两支。追踪这两支光线,找出它们与场景中其他物体的交点Pt和Pr。要计算Pt和Pr点辐射的光亮度则还要继续追踪(这里要注意的是,图中显示的只是简单的光线追踪,实际情况中还要考虑其他光线对这个理想模型的影响)。从点Pr出发沿该点反射方向r2和折射方向T2进行追踪,从点Pt出发向r3和t3方向进行追踪。如此反复,直到被跟踪的光线射出场景或达到事先设定好的层次为止。(在3DSMAX中,光线追踪层的默认值为9,在绝大多数情况下已经够用,而且计算时还会考虑到光线衰减) y K)7%j!
反向追踪算法首先要建立一个被分成细微栅格的2D平面,这个栅格会分得多小呢?小到只有显示器上的一个像素点那么大。然后,由原像素点“发射”一束光回到场景中,一旦光线到达物体表面,就必须确定该表面是否是反射表面、折射表面或发光表面,反射表面弹回光线,折射表面改变光线,而发光表面则被看成一个点光源(这里顺便提一下点光源与区域光源的关系:当一个点光源距观察者近时,通常就会把它看成一个区域光源;相对应的,一个区域光源在距观察者很远时,系统就会把它看成一个点光源)就这样,渲染器对整个场景中的每一束光线进行反射、折射运算。这也就是光线追踪速度极慢的根本原因。 y;<^[
最后谈一下什么是双向光线追踪。反向和正向追踪算法相结合使用可以产生逼真的光线转移现象,尤其是在焦点镜面模拟方面(也叫做聚焦)。两种算法结合起来渲染的过程就被称为双向光线追踪。 V9z/yNo
光线追踪算法的基本工作原理就讲到这里,下面再看看辐射度渲染。 G`!#k!&r
首先了解一下辐射度的定义:单位时间内在单位面积上向空间辐射的光能被称为辐射度。辐射度算法的基础是热力工程学,也就是说,它完全遵守能量守恒定律。请注意,遵守能量守恒定律就表明,辐射度渲染不会受到狭义上的“封闭空间”的限制。换句话说,无论是室内还是室外,只要能够保证场景中能量不被散失,就可以利用辐射度渲染法。 lfG]^id'
在1984年Goral等人首次提出辐射度方法以来,辐射度已发展了近二十年。但实际运用却只是近几年的事,其原因就在于这种算法对计算机资源消耗极大,以至于Goral在提出该算法后当时的超级计算机也无法完成其计算任务。辐射度算法的工作原理是假定其场景是一个理想的能量守恒环境(由于封闭室内是最简单的能量守恒环境,所以人们在最初研究辐射度算法时就采用了这个最简单环境以降低研究难度。从这个方面来说,狭义的“封闭室内”可以被认为是正确的),在此环境中从光源发出的光能经过景物间多重漫反射后最终达到平衡状态,因而每个元面所接受到的光能,除了一部分被元面转换成热能之外,其余的光能应向周围场景均匀辐射。(注释:什么是元面?这是一个计算机图形学术语。在辐射度算法中存在着光线发射器和接收器两个概念,其中的光线接收器就被称为元面,而发射器就被称为曲面片。关于光线发射器和接收器在后面的内容中将会进一步解释)因理想漫反射表面各点处的辐射度与光亮度成正比,故可以认为此时的辐射度就是所求的漫反射光亮度,用B表示。 L$6{{Tw"2
Os'
7h
为了计算景物表面各点的辐射度,就需要把环境中景物表面分割成一个网格矩阵。在划分好的景物表面上所有接受光照区域必须能够发出光,也能更远地传播光。所以,辐射度中的能量是从光源到直接的周围环境。这些直接环境面积就成为下一次光能辐射的光源,即光线发射器。这就是对刚才注释中内容的解释。(不过将光线发射器称为曲面片另有原因,限于主题这里不作讨论)那么从上面的描述中我们不难发现,曲面片和元面之间并没有明显的界线,一个元面有可能也是一个曲面片。 Bi/=cI
实际上,辐射度直接计算的是离开一个曲面片到另一个曲面片能量的小部分,因为光能在传播过程中会转化为其他能量(如热能)。这种解决曲面片和元面相互作用的特殊设置过程被称为一个重复。 s<Pk[7`*
好,对于辐射度的基本工作原理讲清楚了,下面就深入探讨一下它的工作方式。 Zm,<