【转载】Global Illumination | 全局照明知多少

515 阅读8分钟

文章来源: 饼干教育
原文链接: www.bgteach.com/article/213

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