计算机图形学的魔法概述篇(二)

体积可视化技巧

真实的渲染是指用计算机生成出与用相机拍摄的原始的图像相同的样子。Photorealism(摄影现实主义【应该翻译为】) 并不总是以计算机生成图像为目标。例如,在医学成像中,人体的真实感渲染对医生并不总是特别有用-他们直接观察病人就可以get到这一点,相反,需要来替代的是一种查看内部器官、组织层和动态元素(例如作为血液流动。对表面和光反射进行建模不足以显示通常不透明物体的内部结构。空气中的微尘,烟雾,污染,水分子都会干扰光的传播。由于散射,天空呈现蓝色。

体积渲染
术语体渲染通常是用于绘制体数据的任何方法。表面渲染计算对像表面上采样点的颜色2,而体渲染计算对整个3D体积中采样点的颜色。体渲染是通过体时的效果。因此,除了固有颜色之外,每个体素都有一个不透明度Value,我们使用a表示透明度,当a=1时,体素完全不透明,当a=0时他是完全透明的。项1 - a 是透明度,即通过体素的入射光的比例。从体素发出的光的颜色 Cout 由公式
                                                                Cout = Cin * (1- a) + C * a; (3.1)
其中Cin是入射颜色并且C是体素的固有颜色。通过多个体素的光的颜色是递归定义的;进入一个体素的光是来自前一个体素的光: 
                                                                C(in) = C(i-1)Out; 

    C(in)Out = C(i)in * (1- ai)+ C(in)* a; (3.2)


在这里给出了一种光-体素交互的公式。在计算机中有2种方法:(1)将所有体素投影到二维图像平面上,并将每一个投影体素绘制到framebuffer中(如上图所示),使用公式(3.1)。顺序:从后到前(2)通过体积追踪光线。通常为体素网格跟踪来自视点每条光线来完成的(如图3.2)。



体绘制中的Ray casting,沿着光线对体数据进行重采样。最简单的形式中 上图(a)部分,采样的值来自体素中心的值。通过插值体素之间的数据,获得更平滑的重采样。使用插值值的更多样本点会产生更好的整体结果 (上图(b))。Ray casting 中引入的误差在体数据变化最大的部位,Ray casting可以通过使用自适应采样来优化这个效果。在体数据变化更快的部位采样更多的采样点,相邻体素值差异较大,采样间隔也会缩小(图3。4›)。
                                                                                



体渲染的历史

20世纪70年代 计算机断层扫描(CT)出现推动医学领域的体积数据可视化研究。CT数据来自一台扫描机器,它记录了从旋转发射x射线的吸收情况。扫描沿着垂直于旋转平面的轴进行,因此数据由人体(或任何被扫描的物体)的横截面“切片”组成。其结果是在一个体积中分布的组织密度数据的集合。不同类型的组织具有不同的密度:在CT数据中可以区分空气,软组织,脂肪和骨骼。密度的变化-密度相同或相似的区域与不同密度区域之间的边界-对应于内部物体的表面。这些被称为等值面,是二维图上等高线的三维模拟。

 


人体组织的体渲染

图3.5显示了 SIGGRAPH[Drebin et al. 88]  “Volume Rendering”论文中的体渲染,该论文描述了对CT的每片数据进行并行化处理,然后将结果合成为最终的3D渲染。在“体绘制”论文中描述的方法假设几个物质混合在一个体素中。在人体CT数据中,这些物质是空气、软组织、脂肪和骨骼。第一步是计算每个材料在每个体素中的百分比,然后从物质的物理密度和体素中包含的百分比的乘积中计算体素密度。当密度发生急剧变化时,边界就出现了,这可以通过检查密度的梯度(微分变化率)来检测。梯度是一个三维矢量,当不同密度的材料之间有一个急剧的过渡时,梯度的幅度很大。在远离表面的地方,密度变化很小,梯度也是如此。梯度的大小,称为“表面强度”,用于估计存在的表面量。梯度方向垂直于边界表面。在颜色计算过程中,表面强度起着重要的作用。


最重要的进展之一是处理区域边界的方法,而不明确地重建边界表面。在此之前,大多数可视化技术都需要对表面的几何表示作为多边形或其他曲面原语的集合。由于需要大量的多边形,行进立方体算法难以重建具有精细细节的曲面。此外,当曲面有太多的分支时,就会出现连接问题。

在“体积绘制”论文中描述的方法假设几种物质混合在一个体素中。在人类的CT数据中,这些物质是空气、软组织、脂肪和骨骼。第一步是计算每种材料在每个体素中的百分比,然后根据物理物质的乘积计算出一个体素密度和体素中所包含的百分比。当这个密度发生急剧变化时,就会出现边界,这可以通过检查密度的梯度(差异变化率)来检测到。当不同密度的材料之间有一个急剧的转变时,梯度是一个很大的三维矢量。远离表面的密度变化很小,梯度也是如此。梯度的大小,被称为“表面强度”,用于估计表面存在的数量。梯度的方向垂直于边界面。表面强度在颜色计算过程中起着重要的作用。

颜色计算取决于一个体素中三个区域的颜色属性:表面前面的区域、表面后面的区域,以及与表面本身相对应的薄区域。每个区域都有一个颜色和一个不透明度,也可以发光。通过体素的光由三个区域的颜色组成着色;包括不透明度,但体素内部的衰减没有。

由隐含表面的光反射产生的颜色与表面渲染相似,即作为视点、表面法线和光源的函数。表面着色被分为漫反射组件和镜面组件:漫反射组件来自表面的颜色;镜面组件,来自光源的颜色。漫射表面颜色是表面后面的区域,防止相邻材料之间的颜色出血。在普通曲面渲染中没有应用的另一个步骤是根据曲面的强度来缩放最终的颜色。一个不包含表面的体素的表面强度(接近)为零,因此表面反射率的贡献非常小。因此,这样渲染的表面的外观取决于梯度,而梯度取决于密度。该算法保证了每一步数据的连续性,因此该方法在不实际重建表面几何形状的情况下产生光滑表面的外观。

首先使用快速图像扭曲技术将体积的每个二维切片转换为观察坐标系,使体素边界与观察射线平行。然后,投影到图像平面上的投影就相当于合成对应于每个像素的连续体素运行。密度和梯度的计算实际上可以在每个CT数据切片中独立完成,如果视点放置在垂直于切片平面的“无限大”,则不需要变换。这是该方法的另一个特性。

本文中描述的体积可视化算法假设每个体素的材料百分比从数据集可用。本文还包含了一种算法,分类测量CT数据,纯粹由x射线吸收值,为单独的物质。它在数据值的直方图上使用概率分类器。然而,需要有关组成材料的近似密度及其相对分布的信息来进行这项工作。因此,“体积可视化”论文中详细介绍的方法需要对成像材料有一定的先验知识。

 

然而,人体的CT扫描并不是通过X射线吸收进行3D成像的唯一用途,在某些情况下,人体的非常不同的CT扫描也不是通过X光吸收进行3D图像的唯一形式。非常不同的物质可以具有相似的吸收密度。例如,如果塑料炸药和奶酪的X射线吸收率几乎相同,那么机场安全扫描仪仅使用论文中描述的方法就无法区分炸弹和一块老式切达干酪。另一方面,该方法的有用性通过对可视化材料的良好理解来增强。在可视化人体时,可以应用诸如“骨骼中从不含有脂肪”和“头骨中不存在肌肉”等已知条件来更好地区分特征。尽管本文中没有明确描述,但基于密度的渲染在可视化方面提供了很大的灵活性。这是因为可以添加查找表来转换“true”。


本节中描述的“体积可视化”论文部分是理论性的,但同时它提供了一种实用且灵活的体积绘制方法。在后一种意义上,它更接近SIGGRAPH演示的最新趋势,后者倾向于强调实用的渲染方法。这篇论文在渲染人类的背景下继续被引用,尤其是在电影行业。

(注: 这里我前面都写过一些篇章解释过体渲染公式  这里将简述)
参与介质
                                                                        


光通过介质的效果属于传输理论的范畴,传输理论研究是粒子如电子,介子和光子在通过其他材料时如何受到影响。传输理论在20世纪50年代统计物理学中得倒积极的研究。光传输方程(LTE)描述了光在介质中传播时的物理效应。光的传输不仅包括由于吸收和散射而造成的光能损失,也包括由于介质内的发射而获得的能量。LTE通过将辐射差的变化与介质的物理性质联系起来,来控制能量的得失。光在介质中的行为通常通过求解体绘制方程来计算。在计算机图形学方面,LTE沿一个视点到一个光源的线段积分称为体绘制方程。

光传输方程(LTE)

光的传输方程是根据辐射度dL(x,ω)在空间中的一点x沿射线在ω方向上的微分截面ds的微分变化来表示的(图3.7)。更精确地说,dL(x,ω)/ds表示辐射度函数L(x+sω,ω)对s的导数。光沿射线衰减有两个基本原因:介质中的粒子吸收了一部分光,与粒子的碰撞使光在其他方向发生偏转。吸收被定义为光在传播一个差分距离ds时损失的量。假设微分吸收与辐射度成正比:
                                                         dL(x,ω) =−σa(x)L(x,ω)ds;


                                          
也就是说,吸收产生的差分光损失是光强度的一部分(图3 - 7)。比例常数σa(x)是吸收系数或吸收截面。请注意,它取决于介质中的位置,就像表面反照率取决于表面位置一样。当光与介质中的粒子碰撞而被转移时,辐射也会消失。这种现象被称为外散射。与吸收一样,外散射引起的辐射度变化与入射辐射度成正比:
                                                          dL(x,ω) =−σs(x)L(x,ω)ds,
其中常数σs(x)是散射系数或散射截面 (图3.8)。                            


                                    
吸收和散射系数的总和,消光系数 (灭绝截面)
                                                                           σt = σa + σs,
占光的总微分衰减:
                                                           dL(x,ω) =−σt(x)L(x,ω)ds。

当一种介质在内部发光时,就说它是发射的或发光的。火焰就是一个例子。蜡烛火焰产生的光是物理过程综合作用的结果。最显著的是黄色发光部分,这是由热的微观煤烟颗粒引起的。这些粒子据说是白炽灯,这意味着它们由于高温而发光。


白炽粒子产生的光通常被模拟为黑体辐射。黑体吸收入射到它身上的所有辐射,而吸收的能量以热的形式存在。当身体温度升高时,它会根据已知的光谱发射发出辐射。换句话说,热的煤烟颗粒即使在发出光的同时也会吸收光,而发出的光取决于温度,而温度又取决于吸收速率;发射与吸收有关。一点处辐射度的微分变化实际上是发射函数Le(x,ω)乘以吸收系数:
                                                           dL(x,ω) = σa(x)Le(x,ω)ds。
                                       


被吸收的光被假定在介质中丢失(实际上它只是转换成一种不同形式的能量)。相比之下,散射的光只是被转向了不同的方向。这会导致另一个方向的辐射度增加,这种现象被称为该方向点的内散射(in-scattering)(见图3 - 9)。任意点的辐射度L(x,ω)可以被来自任何方向的内散射光增加。计算散射贡献类似于计算表面反射:入射光必须在所有方向上进行积分。离散积分包含围绕该点的整个球体,而不仅仅是表面上方的半球。光在介质中的散射由一个相位函数p(x,ω‘,ω)控制,它类似于BRDF: p(x,ω‘,ω)表示从方向ω‘入射的光在x处散射到方向ω的比例。相位函数被归一化,使其在球面上的积分值变为1(回想一下,BRDF没有归一化)。通过将入射的辐射亮度与球体上的相位函数积分,然后根据散射系数对结果进行缩放,计算内散射增加的辐射亮度:

                                         S(x,ω) = σs(x)∫Ω4π p (x,ω’,ω)L (x,ω‘) dω’ ds (3.3)

                   注: (Ω4π表示整个球体)。因此,相位函数的较大值意味着更大的in-scattering。


发射、吸收、外散射和内散射的作用共同产生x点ω方向光强度的总微分变化:
                                                   


式(3.4)是光传输方程(light transport Equation, LTE)的一个版本。排放这一项通常省略,因为光在介质中的发射很少有意义。LTE最常见的形式就是这样
                                                          dL(x,ω) =−σt(x)L(x,ω)  + S(x,ω)。

LTE是一个积分-微分方程:辐射度的导数出现在左侧,散射项S(x,ω)包含辐射度的积分。

参与媒体的特点

和表面反射一样,散射也很复杂。量化散射程度的一种方法是将散射量与介质中的总衰减量进行比较。因此,散射系数与消光系数的比值,

                                                                        W = σs / σt,

为介质的散射反照率。散射反照率越大,说明散射程度越高。

如上所述,在LTE的求解中,散射光的计算是一个非常复杂的问题。当内散射的影响可以忽略不计时,LTE就简单得多;实际上,如果消光系数σt为常数,则可以闭式求解:
                                                            L(x Δx,ω) = e^−σtΔx L (x,ω).    (3.5)
因此,式(3.5)表示辐射沿沿ω方向的射线通过均匀参与介质传播Δx距离时的衰减,其中的内散射可以忽略不计。
                               


当散射程度很大时,不能排除内散射的影响。内散射项通过入射光对相位函数的积分来计算,如式(3.3)所示。相位函数p(x,ω,ω)完全表征了介质中的散射,就像BRDF表征表面反射一样。然而,实际的相位函数比BRDFs简单得多:众所周知,大多数介质的相位函数只取决于入射方向和散射方向之间的夹角(图3 - 10中的角度θ),即偏转角。
                                         


相位函数对单角度θ的依赖性使其适合在极坐标下绘图。图形通常是圆形的或大致的椭圆(如图3 - 11所示)如果相位函数是常数,那么图形是一个圆。由常数相位函数散射称为各向同性散射。

非恒定相位函数意味着各向异性散射,具有方向元素。各向异性相位函数的图形通常看起来像一个椭圆,其长轴在水平轴上,即θ = 0或θ = π。如果椭圆向θ = 0方向延伸,则散射主要以入射光角度的小偏转形式存在。这就是所谓的前向散射。如果拉伸的方向相反,大多数光就会被散射回原来的方向。这是后向散射。


在实际中,各向异性散射通常可以分为前向散射和后向散射。为了呈现参与媒介的目的,知道是哪一个是有帮助的。前向散射和后向散射的概念可以用平均散射方向来表示。更精确地说,将相位函数与散射角θ的余弦积分得到一个数字。

                                                                g =∫Ω4π p(x,ω,ω) cosθ dω

有些作者称g为散射各向异性,但这个术语并不普遍。代价θ项编码方向:前向散射与方向相关 : 当cost θ接近1时(θ接近0),当cost θ 接近−1。因此,g值为正值时,主要为前向散射;g值为负值时,主要为后向散射。此外,更大的|g|意味着散射方向上的偏差更大,因此g也提供了各向异性的度量。
g在表征散射各向异性方面的有用性导致了使用g(或类似的东西)作为参数的相位函数模型的发展。这使得调整模型更加直观。HenyeyGreenstein函数就是一个例子
                                                    


它经常用于模拟自然物体中的光散射,如烟雾,云,火焰和人类皮肤。

参与介质和CG 渲染
 

早期将光线传输方程引入计算机图形学是在20世纪80年代。如前所述,传输理论在物理学中得到了很好的确立,当时还有工程学。实际上很多传输理论的发展出自二战期间的曼哈顿计划;事实上,据说他是研制原子弹的关键人物。辐射传输教材最初由Subrahmanyan Chandrasekhar于1950年出版,被认为是这个领域的“圣经”[Chandrasekhar 50].


求解LTE:体积的辐射度
 

光的传输方程可以通过在固定的时间间隔内对一个固定方向上的方程积分得到。在CG渲染中,固定的方向通常是视点的方向,因为最终目标是计算像素的颜色。LTE在视点方向上的积分称为体绘制方程,是体绘制方程的一种体扩展。

这个术语令人困惑,因为“体绘制”方法可能与体绘制方程无关。然而,由于该方程一般没有解析解,因此需要数值方法来求解。

体绘制中使用的一些相同的数值技术可以用于求解(近似)体绘制方程。

 

例如,有限元方法可以应用于体绘制方程,其方式类似于表面绘制的辐射度方法。在基于表面的辐射度方法中,每个表面被分割成辐射度不变的小块。在纯漫反射假设下,光线在面片间的传递被建模为线性表达式。所有面片之间的相互作用成为一个线性方程组,从而离散(表面)渲染方程。“体积辐射度方法”的工作原理类似:在所有散射都是各向同性的额外假设下,将整个环境分割为体素。体素之间的光传输是线性的,因此体绘制方程成为一个线性方程组。


Holly Rushmeier和Kenneth E. Torrance在一篇题为“The Zonal Method for Calculating Light Intensities in the Presence of a Participating Medium”的论文中提出了第一个用于CG渲染的LTE通用解决方案[Rushmeier and Torrance 87]。本文所描述的方法扩展了普通的(面对面)辐射度方法,使之包含了体元。包含参与介质的体被分割成体素(区域),并计算表示体素之间光线传递的形状因子(类似于表面斑块形状因子)。该方法的一个值得注意的方面是将体元素纳入到地对地辐射度形状因子中:几何形状因子包括地对地、体对地以及体对体的相互作用。因此,整个辐射传输减少到一个单一的线性方程组。
 

方程的解由表面的恒定辐射度组成patch和volume(volume “辐射度”是由体积发射和散射的辐射功率)。与表面辐射度方法一样,需要一个重建步骤来产生视觉上可接受的渲染图像。这一步还需要对射向眼睛的光线进行积分,以确定收集到的分散和衰减的光线。在Rushmeier和Torrance的方法中,这种整合是通过在体中追踪光线并调整光线在每个体素边界的辐射度来实现的。作者展示了如何使用深度缓冲区累积方法有效地实现这一点。


ray marching

在体素网格中遍历射线的方法类似于一种更直接的沿着称为射线行进的路径进行数值积分的形式。将从环境到视点的每条光线分割成小段,分别计算散射和吸收对每段光线的影响。在特定线段,计算线段内的散射,并将其与前一线段的累积值相加,根据线段的长度衰减(图3 - 12)。在符号,
                                                 


其中Ln是由线段n发出的累积(积分)辐射度。该过程从距离视点最远的线段开始,依次跟随光线。完成后,最后一个部分携带最终的辐射度,近似于体渲染方程。射线推进可以应用于一般散射性质的介质,而体辐射度方法仅限于各向同性散射。该方法也适用于表面光线跟踪。它也非常适合硬件渲染。已经发展出各种提高效率的方法。
 

在射线行进中,保证行进精度和效率的关键是射线的分割方法。在某些介质中,如烟和雾,散射随位置的不同而变化很大。这种情况通常需要对射线进行非常精细的细分,以产生足够精确的结果,但只有在散射(或照明或发射)很大或快速变化时才需要这样做。在其他地方,光线的粗略细分就足够了。均匀地细化细分以捕获光线的一小部分细节是非常低效的。一种改进方法是从粗粒度均匀细分开始,然后递归地细分需要更精细近似的部分。这种技术被称为

自适应射线行进。
                                   


在基本的自适应射线推进方法中,辐射度在每个线段的两端计算(图3 - 13)。当两个值的差值超过某个阈值时,将段分成两半,并对每个新的段进行相同的测试。重复这个分割过程,直到差异小于阈值。但是,如果参与介质的颜色发生重大变化,例如,仅根据辐射度的大小进行细分很容易出错。同样,散射系数的突变也可能需要进一步细分。可以应用任意数量的不同细分标准;没有什么特别的“最佳”方法。如果段内介质存在显著的高频率(快速变化)变化,仅在端点对段进行采样可能会出现问题,因为这两个端点的值可能完全是巧合。初始射线细分必须考虑到这一点。尽管如此,自适应光线推进已被证明是一种优化光线推进性能的有用技术,特别是在非均匀介质中。

光线推进法的成功与否,关键在于能否准确地计算出每一段内的散射光。另一种提高效率的方法是在内散射计算中分离直接和间接入射光。直射光来自一组特定的方向,即光源的方向;因此,可以通过跟踪光线到光源来采样直射光。相反,间接光来自所有方向,因此必须对整个方向球体进行采样。来自间接照明的内散射通常很小,因此可以使用较少的样本,这就是优化。然而,随着散射程度的增加,需要更多的样本,这增加了计算负荷。
                                 


Henrik Wann Jensen和Per H. Christensen提出了一种扩展的光子映射方法来提高散射计算效率[Jensen和Christensen 98]。他们的方法不是使用采样射线,而是使用介质中的粒子模拟作为射线推进方法的预处理(图3 - 14)。该方法与基于表面的光子映射方法类似,主要区别在于对参与介质的模拟也包括散射。假设每个光子与介质中沿自由路径的散射粒子发生碰撞的概率为对数。在碰撞时,选取0 ~ 1范围内的随机数ξ。如果ξ不超过反照率值,则粒子沿随机方向(相对于相位函数)发送,即与散射系数的倒数成对数随机距离。否则就会被吸收。在每次二次碰撞时,光子的位置、携带的辐射度和运动方向都存储在体光子图中。直接来自光的光子值不存储,因为光子映射仅用于计算间接光的内散射。
                                      


在射线行进阶段,在射线行进段的内散射计算过程中,体光子映射通过在段的中心附近搜索恒定数量的光子来查询(图3.15)。
 

所需要的光子数包含在半径为r的包围球中。来自光子的散射光是相位函数和光子携带的能量的乘积,除以包围球的体积。

光子的方向ω对于找到相位函数的值是必要的,这就是为什么光子方向存储在光子图中。在x点的包围球中来自N个光子的散射光的强度Ls,

                                                        


其中Φi和ωi分别是光子i的通量和入射方向。
用体积光子图代替直接在光线中积分采样对于散射程度较大的介质,步进法可显著提高效率。稠密的烟雾和云就是这种介质的例子。

自然现象渲染
 

上世纪80年代末和90年代初,Tomoyuki Nishita和Heihachiro Nakamae发表了一系列关于自然现象渲染的论文[Nishita et al. 87, Nishita et al. 93, Nishita and Nakamae 94]。大部分工作是与地球大气中的散射有关。他们的工作主要是以体素为基础,符合当时参与媒体的主流方法。光线推进技术在2000年前后得到了更积极的应用,部分原因是硬件的快速增长。当时的另一个变化是向动态环境的转变,参与的媒体具有时变特性:在现实中,云漂移和烟雾漩涡。对这种效果的需求正在增加。

正如辐射传输场对反射介质和参与介质的多年研究一样,大气现象的模拟属于流体力学领域:云和烟都是流体。与辐射传输一样,计算流体力学(computational fluid dynamics, CFD)本身也是一个活跃的研究领域。1984年Kajiya和von Herzen的《体积密度》论文首次通过直接求解流体流动方程来模拟流体;然而,计算能力的限制阻碍了进展。人们对流体模拟的兴趣在20世纪90年代中期开始增长。Jos Stam在1999年的一篇论文[Stam 99]中提出了一种稳定的流体模拟算法,该算法对烟雾产生了令人信服的结果,但它往往会丢失在真实烟雾中观察到的细节,例如精细的旋转漩涡。

 

2001年,Ronald Fedkiw、Stam和Henrik Wann Jensen发表了一篇论文题为“Visual Simulation of Smoke”(烟雾的可视化模拟),将几种流体模拟方法结合成适合计算机图形学的算法[Fedkiw et al. 01]。该方法基于半拉格朗日积分方案,作者应用了一种称为“涡约束”的技术来缓解数值问题。该算法再现了小漩涡,并正确地处理了烟雾模拟与边界和其他物体(包括移动物体)的交互。根据流体中计算的密度,通过两种方法进行渲染模拟。

 

作者描述的第一种渲染方法是一种基于硬件的快速算法,旨在提供结果的预览。该算法是基于体素的。在第一遍中,通过使用快速算法追踪网格中的光线来计算到达每个体素的光线量。光线在每一个体素上都保持着一个更新的透明度。体素的透明度来自

根据体素密度的指数衰减,如式(3.5)所示:并相应地设置体素辐射度值。在第二遍中,体素在一个前后硬件合成算法中被渲染。

 

第二种渲染方法使用射线行进。光的衰减与第一种方法中使用的指数函数相同,但内部散射是使用光子映射计算的。此外,作者还介绍了ray marching的一种变体,称为forward ray marching(参见图3.17)。普通的射线行进通常从最内侧开始,向视点前进。前进的射线朝相反的方向前进。它基于递归式

                                                 


其中x'n是在第n段上随机选择的一个点。正向射线行进的主要优点是总衰减和收集的内散射在每个段中,返回到视点的所有贡献都

是已知的。换句话说,算法在每一步跟踪它在介质中的光学深度。随着它的深入,需要一个不那么精确的内散射近似,这意味着片段大小可以增加,从光子图中需要更少的光子。事实上,当收集的内散射和衰减较大时足够了,剩下的光线可以忽略,光线在足够深的地方,稠密的烟雾是不会出来的。

 

在烟雾模拟论文发表一年后,Duc Q. Nguyen, Fedkiw和Jensen发表了一篇题为“Physically Based Modeling and Animation of Fire”(基于物理的火焰建模与动画)的论文[Nguyen et al. 02].模型的物理基础通过火焰的寿命(点火、辐射和熄灭)。

火焰是一种发光的参与介质,它的光贯穿整个体积。虽然火焰有一定的散射和衰减,但火焰的基本外观来自火焰内部的光发射。光线主要来自两个来源:一个蓝色的“核心”是由加热的电离气体分子发射造成的,另一个黄色的包膜是由发光的热的未燃烧的煤烟粒子造成的。


当一个物体变得足够热时,它就开始发出可见的光,这种现象被称为白炽灯。白炽光源的发射光谱通常模拟为一个黑体,它是一种吸收所有入射辐照度的物体。吸收的能量按照平板曲线的光谱分布重新发射。黑体的表面颜色随着温度的变化而变化:当物体受热时,它首先呈现暗淡的红橙色,然后变为黄色,最后接近白色(这就是色温的起源)。火焰中的煤烟颗粒最初温度足够高,呈现黄色,但随着它们上升而冷却,使火焰顶部附近显得更红。最终,粒子冷却到足以停止发光,此时火焰的可见部分结束,观察者看到一股烟雾。这是火焰的第三个主要可见成分。
 

然后使用光线行进绘制火焰,但由于火焰的发射特性被建模为光谱分布,普通的RGB模型(本质上只有三个光谱样本)是不够的。这种情况需要更精细的采样光谱表示,然后将其转换为RGB以在显示器上显示。该方法是由色彩科学家在20世纪早期开发的,通过将光谱表示与三种经验三刺激反应曲线相结合,产生颜色的三个分量。通常,这些通过基于的线性变换转换为RGB特性的显示器,但笔者发现,通常的转换过程导致火焰出现过红。原因是火焰通常只能在黑暗条件下看到,人类的视觉已经适应了黑暗。(火焰在日光下确实显得更红。)为了解释这一点,作者采用了一种颜色偏移来模仿由暗适应引起的颜色感知变化。当平板曲线被集成时,这种移位被应用,因此其余的实现可以使用通常的RGB表示。


火焰内部的散射相对较小,因此可以用较少的样本进行内散射计算。在这种情况下,直接从样本射线中近似散射积分比产生体光子映射构建的开销更有效。

体积阴影


阴影通常被认为是物体上的二维投影,真正的体积由空间中光源部分或完全遮挡的区域组成。曲面上的阴影是阴影体积与曲面的交点。在参与介质的存在下,体积阴影变得可见,尽管体积阴影的补充——光束——通常更明显。在没有间接内散射的情况下,参与介质中的体阴影显示为完全黑暗,只是表面阴影在没有间接照明的情况下显示为完全黑色。这是一个许多忽略内散射的渲染系统由于其高计算成本而受到限制。


将阴影视为体对象,将其纳入体绘制领域。阴影图最基本的形式是一个体积函数,表示一个点是否在阴影中。这个概念最初是由Lance Williams在1978年的一篇论文中提出的,该论文展示了如何在简化的深度缓冲区中表示阴影图[Williams 78]。它的工作原理是在光源处放置一个假设的阴影相机,并将场景渲染到具有深度信息的帧缓存中。然而,像素颜色被忽略了——只存储离光源最近的物体的深度。结果是一个由深度值组成的矩形数组,即阴影图。然后,将一个点转换到阴影相机的坐标系中,并与阴影图中对应的像素进行深度比较,就可以检测该点是否有阴影:如果该点距离阴影相机比阴影图中的像素更远,则该点位于阴影中;否则,它是直接照亮的。

阴影图技术速度很快,在智能交通系统中得到了广泛的应用。最初的形式或在许多概括之一。但有一个问题是,皮毛或头发等细节的存在需要非常高分辨率的阴影图。深阴影地图的概念是由Lokovic和Veach在2000年提出的,最初是为了渲染电影《怪物公司》中角色“萨利”的皮毛而开发的。像普通的阴影图一样,深度阴影图是一个“像素”的矩形数组,每个像素代表阴影相机在特定方向上阴影元素的深度。深度阴影图中的像素包含深度函数,用于计算光线在特定深度的可见性。这些可见性函数推广了第1章中描述的简单可见/不可见函数,包括诸如光源可见性的百分数、透射率甚至散射效应等效果。
                           



每个像素的visibility函数是通过对透射率进行采样来创建的函数沿射线从阴影相机穿过阴影图像素,射线上的点对应深度值。每个点都有一个透射函数,它给出了到达该深度的光的比例。总透射率函数是两种不同透射率函数的乘积:表面透射率函数(图3.19(a))和体透射率函数(图3.19(b))。表面透射率函数忽略了参与介质,跟踪了表面点的网络传输变化。因此它是一个阶梯函数:值从光源处的1开始,然后根据表面材料的不透明度在每个表面交叉点处下降。体透射率函数与参与介质的透射率函数相同。将网格透射率函数存储为一系列样本点;函数值在样本之间使用指数插值进行估计。
 

将透射功能按表面和体积分开允许艺术家设计表面特性时不考虑介质的参与。由于它们是独立集成的,因此可以针对不同的介质重建深度阴影图,而无需对物体几何形状进行重采样。皮克斯的艺术家们开始在电影制作中使用深度阴影贴图,而不是期望它们适用于烟雾、雾或半透明的物体。然而,它对参与媒体的适用性很快被艺术家们发现。然后,深度阴影图方法被添加到内部生产渲染器和商业渲染软件。它被认为是在密集体环境中生成阴影最有效的方法。

 

[Williams 78] Lance Williams. “Casting Curved Shadows on Curved Surfaces.” Proc.SIGGRAPH ’78, Computer Graphics 12:3 (1978), 270–274.


[Chandrasekhar 50] Subrahmanyan Chandrasekhar. Radiative Transfer. Oxford, UK: Ox-ford University Press, 1950.

 

[Smith 87] Alvy R. Smith. “Volume Graphics and Volume Visualization, A Tutorial.”Technical Report 176, Pixar, 1987.


[Drebin et al. 88] Robert A. Drebin, Loren Carpenter, and Pat Hanrahan. “Volume Rendering.” Proc. SIGGRAPH ’88, Computer Graphics 22:4 (1988), 65–74.

[Nguyen et al. 02] Duc Quang Nguyen, Ronald Fedkiw, and Henrik Wann Jensen. “Physically Based Modeling and Animation of Fire.” Proc. SIGGRAPH ’02, Transactions on Graphics 21:3 (2002), 721–728.









 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值