当我们处在一间没有开灯的屋子里,即使阳光不是直接照射进来的,屋子也会很明亮,这就是生活中的“全局照明”。同时伴有一个很有意思现象,如下图所示,地毯的颜色都会反射到临近的物体上,使得整个场景偏红,这也是我们所说的渗色(Color Bleeding)。

若要创建高质量渲染时,了解全局照明是该过程中至关重要的一步,熟悉全局照明及其工作原理非常重要。尤其在建筑可视化,室内渲染,阳光直射和真实渲染的场景中。基本上,只要场景中的光线需要大面积上进行相互反射(或反投射)和反弹多次,采用全局照明可大大增强场景的真实度。

全局照明是什么

我们之所以能看到的东西是因为太阳等光源发出的光从物体表面反射到我们的眼睛。当光线仅从物体表面反射一次到达眼睛时,我们说的是直接照射(direct illumination)。但是当光源发出光线时,它们会在到达眼睛之前多次从物体表面反弹。这就是我们所说的间接照明(indirect illumination),因为光线在进入眼睛之前会遵循复杂的路径。有些表面不直接暴露在任何光源(通常是太阳)下,但它们并非完全是黑色的。因为它们仍然会受到一些光线的影响。全局照明(Global Illumination)就是将两者结合起来的效果。

全局照明算法发展史

虽说实际应用中只有漫反射全局照明的模拟算法被称为全局照明算法,但其实理论上说反射、折射、阴影都属于全局光照的范畴,因为模拟它们的时候不仅仅要考虑光源对物体的直接作用还要考虑物体与物体之间的相互作用。也是因为,镜面反射、折射、阴影一般不需要进行复杂的光照方程求解,也不需要进行迭代的计算。因此,这些部分的算法已经十分高效,甚至可以做到实时。不同于镜面反射,光的漫反射表面反弹时的方向是近似“随机”,因此不能用简单的光线跟踪得到反射的结果,往往需要利用多种方法进行多次迭代,直到光能分布达到一个基本平衡的状态。


Ray Casting​ 光线投射 -

光线投射(Ray Casting)为光线追踪算法中的雏形,于1968年由Arthur Appel在一篇名为《 Some techniques for shading machine rendering of solids》的文章中提出。其具体思路是从每个像素射出一条射线,然后找到最接近的物体挡住射线的路径,而视平面上每个像素的颜色取决于从可见光表面产生的亮度。

- Ray Tracing 光线追踪 -​

光线追踪(Ray tracing)是三维计算机图形学中的特殊渲染算法,跟踪从眼睛发出的光线而不是光源发出的光线,通过这样一项技术生成编排好的场景的数学模型显现出来。得到的结果类似于光线投射与扫描线渲染方法的结果,但是这种方法所产生的效果更好,模拟反射与折射的效果更准确,所以追求高质量的效果时经常使用这种方法。

Distributed Ray Tracing 分布式光线追踪 -

Cook于1984年引入蒙特卡洛方法(Monte Carlo method)到光线跟踪领域,将经典的光线跟踪方法扩展为分布式光线跟踪算法(Distributed Ray Tracing),又称为随机光线追踪(stochasticray tracing),可以模拟更多的效果,如金属光泽、软阴影、景深( Depthof Field)、运动模糊等等。

The Rendering Equation 渲染方程 -

在1986年的 SIGGRAPH 大会上,Jim Kajiya 提出了 Rendering Equation(渲染方程),并以此成就在 SIGGRAPH 大会获奖。这一方程描述了场景中光能传输达到稳定状态以后,物体表面某个点在某个方向上的辐射率(Radiance)与入射辐射亮度等的关系,用它来解释光能传输的产生的各种现象。

Kajiya 在1986年第一次将渲染方程引入图形学后,随后出现的很多全局照明的算法,都是以渲染方程为基础,对其进行简化的求解,以达到优化性能的目的。渲染方程根据光的物理学原理,以及能量守恒定律,完美地描述了光能在场景中的传播。

- Path Tracing 路径追踪 -

Kajiya于1986年提出了路径追踪算法的理念,开创了基于蒙特卡洛的全局光照这一领域。路径追踪是第一个根据渲染方程提出的无偏(Unbiased)的渲染方法。从视点发出一条光线,光线与物体表面相交时根据表面的材质属性继续采样一个方向,发出另一条光线,如此迭代,直到光线打到光源上(或逃逸出场景),然后用蒙特卡洛的方法进行计算,作为像素的颜色值。路径追踪,其实就是基于光线追踪,结合了蒙特卡洛方法提出的一种新算法。

Bidirectional Path Tracing 双向路径追踪 -

双向路径追踪(Bidirectional Path Tracing)是同时从视点、光源打出射线,经过若干次反弹后,将视点子路径(eye path) 和光源路径(light path) 上的顶点连接起来(连接时需要测试可见性),以快速产生很多路径。这种方法能够产生一些传统路径追踪难以采样到的光路,所以能够很有效地降低噪点。 进而将渲染方程改写成路径积分的形式,允许多种路径采样的方法来求解该积分

Metropolis Light Transport 梅特波利斯光照传输​ -

Eric Veach 等人于1997年提出了梅特波利斯光照传输(Metropolis Light Transport,常被简称为MLT)方法。路径追踪(Path Tracing)中一个核心问题就是怎样去尽可能多的采集一些有用的路径,而该方法可以自动生成有用的路径,简单来说它会避开无用的路径,而在有用的路径附近做更多局部的探索,通过特殊的变异方法,生成一些新的路径,这些局部的路径的作用往往也很大。 与双向路径追踪相比, MLT 更能处理各种复杂的场景。比如说整个场景只通过门缝透进来的间接光照亮,此时传统的路径追踪方法因为难以采集到透过门缝的这样的特殊路径而产生明显噪点。

Ambient Occlusion 环境光遮蔽 -

环境光遮蔽(Ambient Occlusion,简称AO)是全局光照明的一种近似替代品,可以产生重要的视觉明暗效果,通过描绘物体之间由于遮挡而产生的阴影, 能够更好地捕捉到场景中的细节,可以解决漏光,阴影漂浮等问题,改善场景中角落、锯齿、裂缝等细小物体阴影不清晰等问题,增强场景的深度和立体感。可以说,AO 特效在直观上给玩家的主要感觉体现在画面的明暗程度上,未开启 AO 特效的画面光照稍亮一些;而开启环境光遮蔽特效之后, 局部的细节画面尤其是暗部阴影会更加明显一些。

实时全局照明  Real-Time Global Illumination​

传统渲染方式若要提升画面质感通常需要烘焙光照贴图,但是这种方式只要场景中的物体或灯光必须保持静止,对于游戏等需要大量交互的场景来说显然有些鸡肋。随着硬件技术的不断提升,实时渲染(Real-Time Rendering)得以实现,为了加强画面真实性,全局照明必不可少。

NVIDIA日前为《地铁:逃离》公布了一部新视频,展示了来自PC版的、开启了RTX技术的6分钟实机内容。这段视频主要展示了4A Games工作室为游戏加入的基于实时光线追踪技术的全局照明特效。视频中,官方还进行了一些对比,比较全新的实时光线追踪和之前光照、全局照明和环境光吸收效果,这些场景可以让玩家了解到RTX究竟为画面带来了什么提升。《地铁:逃离》将会是支持实时光线追踪技术的首批游戏之一,计划将于明年2月22日发行。