3D场景全局光照研究与实现

2014-10-17 21:44王芳王天顺
电脑知识与技术 2014年26期

王芳 王天顺

摘要:随着科技的发展网络的提速,人们对于3D场景的应用越来越多,体验需求不断提高。3D场景的真实感绘制需要建立相应的物理光照模型,考虑光线传播过程中的多次反射折射现象。根据物体表面对光线的反射特性,可以建立物理模型,重点介绍了Phong模型。真实感光照绘制算法主要有两种,光线追踪和辐射度算法,分别分析了两种算法实现原理和实现细节,并分别使用两种算法实现3D场景的绘制,对实验结果进行了分析比较。

关键词:局部光照;全局光照;Phong模型;光线跟踪;辐射度;排列因子

中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2014)26-6231-05

Abstract: With the high development of network technology, 3D scene is more and more applied in people's lives, the demand of experience increases.A real 3D scene rendering requires the establishment of corresponding physical illumination model, considering the multiple reflection and refraction of light in the process ofLight propagation. According to the characteristic of the object surface reflection of light, can establish physical model, focuses on the Phong model. The true light rendering algorithm mainly have two kinds, raytracing and radiosity algorithms, respectively, analyzed two kinds of algorithm principle and implementation details, and use two kinds of algorithms achieve rendering 3D scenes, and the experimental results are analyzed and compared.

Key words: local illumination; Global Illumination;Phong Model; Raytracing;Radiosity;Form factor

我们能看到3D场景中的物体,是因为有光源照射,光源发出的光线落在物体表面,部分被吸收,部分被反射出去,并对场景的照明和亮度做出贡献。真实场景光照包括直接光照和间接光照,直接光照是由光源发射出的直接光线形成的光照效果,间接光照是对象表面反射光线形成的照明效果。局部光照(local illumination)只考虑直接光照,全局光照(Global Illumination)既要考虑直接光照,也要考虑间接光照。所以全局光照是根据设计好的三维场景,包括所有物体和光源,渲染生成具有真实感的图像。要考虑和模拟光线传播的各种物理现象,如反射、折射、阴影、焦散等。这不仅需要对场景中各种物体的几何特性和材质属性的精确描述,还需要求解计算多次反射、折射带来的无限微积分问题。在网络发达的今天人们对3D场景的应用和体验需求不断提高,而全局光照计算的复杂性,使得人们投入更多精力研究3D场景真实感绘制和呈现。

研究者研究提出了多种真实感绘制方法。Kajiya首先提出使类似于随机采样的蒙特卡罗(Monte Carlo)方法求解绘制方程的光线追踪算法(Raytracing), 通过对到达图像平面上的光线路径进行采样,然后估计它们对最终图像的贡献来生成图像。Arvo改进后,提出了等价的逆向粒子追踪算法(backward particle tracing)。Veach通过使用多重重要性采样策略(optimally combining sampling),极大的提高了光线追踪算法的适应性和效率。Jensen提出了光子映射(Photon Mapping)算法,它是包括生成光子图和光子收集两阶段的算法,大大加速了图像的生成速度,并能有效地计算全局光照中的焦散(caustics)和渗色(color bleeding)等间接光照现象。Sloan提出PRT实时绘制算法,周昆提出阴影场实时绘制算法,孙鑫提出基于预计算的可变材质的实时绘制算法,材质用BRDF函数的基的不同线性组合表示,预计算每种组合下的所有出射辐射度,按照各材质投影到基上的系数,线性组合预计算数据,把非线性问题转换为线性的,更有效的实现实时全局光照。

1 3D场景局部光照绘制

对于一个真实场景,光线是必不可少的,光线的来源可以是真实光源,也可以是从对象表面反射或折射所产生的。对场景中对象的外观轮廓的呈现,可以通过建立几何模型实现,而对象的真实感绘制呈现,则需要通过建立接近真实的物理模型来实现。

3D场景真实感绘制的具有代表性的开创性工作有,1970年Bouknight提出的第一个光反射模型,1971年Gourand提出的基于“漫反射模型与插值”思想的Gourand模型,1975年Phong提出的著名简单光照模型Phong模型。Phong模型及它的改进模型Blinn-Phong模型至今仍在使用,比如著名的3D软件3dsMax中的基于它们的Blinn、Phong明暗器。

真实环境中对象表面的颜色及纹理是经光源照射后反射到人眼中的表现效果,这就涉及到光源的特性及对象表面的纹理反射特性。人类视觉系统模型是以三基色理论为基础的,是人眼感知的三刺激值,而不是光线能力按波长的完整分布,所以可以将光源建立为包含红Red、绿Green、蓝Blue三个分量的模型。对象表面对光源的反射作用分为环境光反射Ambient、漫反射Diffuse和高光反射Specular。对象表面某点绘制效果的每一个颜色分量的能量都来源于这三种反射,对象表面所呈现的效果是由接收到入射光线后所反射的出射光线决定的,所以,对象表面某点处接收光源i的出射光线能量[Ii]如式(1) 所示。

[Ii=RraLra+RrdLrd+ RrsLrsRgaLga+RgdLgd+RgsLgsRbaLba+ RbdLbd+RbsLbs] (1)

式中第一行表示对象表面反射光源环境光红色分量、漫反射光红色分量和高光红色分量的能量和,类似第二行和第三行分别是反射漫反射色的红色分量、绿色分量和蓝色分量的能量和反射高光的各颜色分量能量和。其中[Rra]表示对象表面对入射环境光红色分量的反射率,[Lra]表示入射环境光红色分量的能量,[Rgd]表示对象表面对入射漫反射光绿色分量的反射率,[Lbs]表示对象表面对入射高光蓝色分量的反射率。

环境光作用在对象表面所有点处都是相同的,对象表面对环境光的反射率就是对环境光的反射系数[ka],所以对象表面反射环境光的能量为[kaLa]。

2 3D场景全局光照绘制

Phong模型定义了对象表面某点处的直接光照效果,要实现整个3D场景的真实感光照效果,还要考虑光线在对象表面间的多次反射,进行复杂的积分计算。在计算机3D场景中,实现全局光照明主要有两种方法:光线追踪和辐射度。

光线追踪算法是基于从光源发射出的无数条光线。在3D场景中,从光源发出的光线有无数多条,射中对象后又会产生无数反射光线和折射光线,这使得场景中的光线骤增,所以直接追踪从光源发射出的光线变得异常艰难。但我们发现从光源发出的光线及通过反射折射后,能够到达人眼的光线数量所剩无几,因此采用逆向的光线追踪方法,即从人眼出发,只关心进入人眼的那部分光线,这样可极大的减少追踪光线数和计算量。

辐射度算法是基于面片多次反射的光能量累积。首先将3D场景中的对象划分为相接但不重叠的多个网格面片,从光源发出的光碰到一个面片,该面片将储存接受的光,并根据辐射度值和反射率反射光线到场景中,其他面片接收到反射光,将其加入到自己的光能量中,不断重复该过程,直到两次迭代的差值低于设定的阈值,所以辐射度算法是一个逐步求精的过程,计算可以中断后继续执行,不影响最终渲染效果。对于不真实的对象表面需要划分为更细小的网格。

尽管经典绘制方程的形式比较简单,但求解该方程却并不容易,需要在点[x']的单位半球上对来自所有方向的入射光线积分,且方程中的x,x', x''都是三维空间中的点,每一个都分别涉及三个坐标[x、y、z],这三个点就涉及9个变量,这种精确求积分的方法复杂费时。

2.1.2 蒙特卡罗光线追踪(Monte CarloRaytracing)

人们尝试使用数值方法求解绘制方程。Kajiya扩展给出了Monte Carlo方法求解绘制方程的光线追踪算法(Raytracing), 通过对到达图像平面每一个像素点上的光线路径随机采样进行逆向追踪,即在积分半球上以概率函数[ρ]采样[N]个方向,然后估计它们对最终图像的贡献来生成图像,如式(7) 所示。

传统光线追踪渲染的图像太清晰整齐划一、阴影明显、反射没有模糊失真效果,适合于像晴天正午太阳光等强光照射效果,而更多的场景需要软阴影模糊阴影,需要对图像进行反走样处理。根据使用像素区域平均颜色代替中心颜色的思想,可以通过对像素区域随机采样,实现图像的反走样。将点光源扩展到面光源,将光源看做是多个点光源的随机采样,采用Monte Carlo方法可以实现软阴影。

2.2.3 渐进式逐步求精算法

通常一个简单的3D场景中的总面片数达到了[103]数量级,在实际场景真实感绘制中,对每一个面片求解辐射度值,会消耗大量的计算时间。康奈尔工作组采用了渐进式的逐步求精算法,来提高计算效率。

我们将辐射度求解过程转化为一个迭代过程,设置一个初始的预估解,后面每次迭代以上一次的估计值为基础进行修正计算出更接近真实值的估计值,重复迭代过程直至收敛为止。面片的初始值这样设定:如果面片是光源或自发光对象,初始解设定为发射的辐射度值,如果是其他面片,则初始值为0。通过一次迭代,直接被光源照射的面片将被点亮,它们的辐射度值将被更新,不再为0。这些被点亮的面片通过光线反射,又会点亮它所能照射到的面片,更新这些面片的辐射度值,这个过程不断重复下去,直至面片反射光线的辐射度值低于某个预设的阈值(低于该阈值的光线对场景照明的贡献可以忽略)结束。随着迭代的进行(即光线的不断反射),场景逐渐明亮起来。每次迭代过程只计算高于辐射度阈值的面片对场景其他面片的辐射度贡献,大大减少了计算量,提高了效率。

每次迭代经过这样几个步骤:(1) 选择(未发射)辐射度最高的面片[ai],(2) 计算面片[ai]到场景中所有能够被照射到的其他面片[aj]的排列因子,(3) 计算更新每一个被[ai]照射到的面片[aj]的辐射度值,(4) 修改面片[aj]的(未发射)辐射度值。

渐进式逐步求精的绘制结果可以产生从黑暗到完全照亮的所有中间场景效果,可以在任一次迭代后暂停,渲染场景观察绘制效果,然后继续迭代计算,渲染场景,直至满意为止。在前几次迭代计算后,场景还比较黑暗,为了得到基本可用的场景初始图,可以设置一个环境光,以使未被直接照亮对象表面获得一定的光照,这个环境光将随着迭代的深入而逐渐减弱。

参考文献:

[1] Kajiya J. The Rendering Equation[J]. In Computer Graphics (SIGGRAPH 86 Proceedings), 1986, 8(20): 143-150.

[2] Arvo J.Backward raytracing. In Course Notes of the 1986 Conference on Computer Graphics and Interactive Techniques,1986(12): 230-238.

[3] Arvo J,Kirk D.Particle transport and image synthesis[J],ACM SIGGRAPH Computer Graphics,1990,24(4): 63-66

[4] Veach E,Guibas L J.Optimally combining sampling techniques for Monte Carlo rendering[J].In SIGGRAPH 95 Proceedings,1995,8(2): 419-42.

[5] Veach E, Guibas L J. Metropolis light transport. Proceedings of the 24th annual conference on Computer graphics and interactive techniques, 1997: 65-76.

[6] Henrik Wann Jensen. Importance driven path tracing using the photon map[J].In Rendering Techniques'95, 1995: 326-335.

[7] Henrik Wann Jensen. Gloabal Illumination Using Photon Maps[J] ,Euro-graphics Rendering Workshop,1996: 21-30.

[8] Sloan PP, Kautz J, Snyder J. Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environments. In Fiume E, ed. Proc. of the SIGGRAPH 2002. New York:ACM Press, 2002: 527-536.

[9] Zhou K, Hu Y, Lin S, Guo B, Shum H. Precomputed shadow fields for dynamic scenes. In Hart JC, ed. Proc. of the SIGGRAPH 2005. New York:ACM Press, 2005: 1196-1201 .

[10] McAllister, David K., and Anselmo A. Lastra. 2003. "The SBRDF Home Page." Web site.

[11] RomeiroF,VelhoL.Computer Graphics Brazil:Scalable GPU rendering of CSG model[J]. Computer and Graphics,2008,32(5)

[12] LehtinenJ,Zwicker M. A meshless hierarchical representation for light transaction on Graphics,2008,27(3):1-9

[13] PacanowskiR,Raynaud M. Efficient streaming of 3D scenes with complex geometry and complex lighting[C].Proceedings of the 13th International Symposium,2008:11-17.

[14] 孙鑫, 周昆, 石教英.可变材质的实时全局光照明绘制[J].软件学报,2008,19(4):1004-1015.

[15] 张金贵,王普,闫健卓,等.基于光线跟踪方法的全局光照研究[J].计算机科学,2010,37(4):27-30.