什么是直接照明和间接照明?
2023-02-28 10:46
在计算机图形领域,正确平衡直接和间接照明有助于提升场景的逼真度。
想象一下:在炎炎夏日中,您徒步到湖畔并坐在树荫下,凝视着因阳光照耀而闪闪发光的湖面。
在这个场景中,光和影两个不同效果分别对应直接照明和间接照明。
阳光洒在湖面和树上,水面呈现波光粼粼的效果,树叶则显得更加翠绿,这就是直接照明产生的效果;虽然树木投下了阴影,但阳光仍能从地面和其他树木处反射回来,将光线投射到周围的阴影区域,这就是间接照明的过程。
为使观众能够沉浸式体验逼真的环境,需在计算机图形处理过程中准确模拟光线传播行为,以达到直接照明和间接照明的正确平衡。
什么是直接照明和间接照明?
灯光直接照射物体被称为直接照明。
直接照明能够确定从光源到达物体表面的光线颜色和数量,但忽略了能通过其他方式到达物体表面的光线,比如经过反射或折射的光线等。直接照明还能决定被物体表面吸收和反射的光量。
来自太阳和天空的直接照明。
光线经物体表面反射,而后照亮其他物体的过程被称为间接照明。间接照明是指从除光源以外的其他地方到达物体表面的光线。换言之,间接照明决定了到达物体表面的所有其他光线的颜色和数量。间接光常常从一个表面反射到其他表面。
由于发光体和观察者之间存在大量路径,因此间接照明通常比直接照明更难计算且成本更高。
同一环境中的直接和间接照明。
什么是全局照明?
全局照明是计算场景中可见表面上所有光线(包括直接和间接)的颜色和数量的过程。
实现所有类型间接光的精确模拟非常困难,尤其是当场景中包含复杂的材质,如玻璃、水、有光泽的金属等,或者在场景中存在云、烟、雾或其他被称为体积介质的散射。
因此,一般而言,用于全局照明的实时图形解决方案只限于计算间接光的一个子集,通常用于漫反射(又称哑光)材质的表面。
如何计算直接照明和间接照明?
当前有许多可用于计算直接照明的算法,这些算法各有优劣。例如,如果场景中只有一盏灯且没有阴影,那么计算直接照明就会很简单,但这类场景的逼真程度不太高。但当一个场景有多个光源时,若要处理位于各个表面的所有光线,会产生十分高昂的成本。
为解决这些问题,技术提供商开发了经过优化的算法以及着色技术,如延迟着色或集群着色等。这些算法有助于减少需要计算的表面和灯光相互作用的数量。
阴影则可以通过阴影贴图、模板阴影体和光线追踪等技术进行添加。
阴影贴图分为两个步骤。首先,从灯光的角度而言,场景将被渲染成一个称作“阴影贴图”的特殊纹理。而后,该阴影贴图会被用于测试屏幕上的可见表面从光源角度是否是可见的。阴影贴图存在许多限制和伪影,而且随着场景中光线数量的增加,其成本会迅速增高。
“毁灭战士 3(2004)(Doom 3)”中的模版阴影,图片来源:维基百科。
模板阴影体是从灯光中提取出的场景几何体所渲染成的模版缓冲区,该模版缓冲区的内容可用于检查屏幕上的特定表面是否处于阴影中。模板阴影的边缘总是很锐利且不自然,但是不会出现常见的阴影贴图问题。
在引入 NVIDIA RTX 技术之前,将光线追踪用于计算阴影的成本十分高昂。光线追踪是一种图形渲染方法,可模拟光线的物理行为。通过追踪屏幕中的表面所反射的光线,可以计算出阴影,但是如果光线来自一个点,这便十分具有挑战性。此外,如果场景中有许多光源的话,使用光线追踪阴影技术的成本会迅速增加。
于是,厂商开发了一种更高效的采样方法,可减少在计算由多个光源生成的软阴影过程中所需的光线数量。其中有一种叫做 ReSTIR 的算法,以交互式帧速率进行光线追踪,并对由数百万个光线和阴影组成的直接照明进行计算。
使用 ReSTIR 创建的直接照明和光追阴影与以往算法的比较。
什么是路径追踪?
而对于间接照明和全局照明来说,可以使用的计算方法则更多。其中最直接的方法是路径追踪,即模拟每个可见表面的随机光路。其中,部分路径能触达光线且有助于完成场景构建,而其他路径则不具备该能力。
路径追踪能以最精确的方式产生能完全表示场景照明的结果,并能与用于材质和光线的数学模型实现精确匹配。路径追踪的计算成本虽然很高,但于实时图形学领域而言仍是一项最佳方法。
比较路径追踪之不完整的光追算法和光栅化。
直接照明和间接照明对图形学领域的影响?
应用于场景中的光照贴图。图片来源:Reddit。
直接照明可用于构建逼真的基本外观,间接照明则能使场景看起来更加丰富、自然。
大量的视频游戏制作中也会用到间接照明,以构建无处不在的环境光。这类灯光可以恒定不变;也可以基于网格形式排列的灯光探测器在空间上进行变化;还可以被渲染成纹理格式,包裹场景中的静态物体,这种方法则被称为“光照贴图”。
在大多数情况下,环境光会被环绕表面的被称作“环境光遮蔽”的几何函数所遮蔽,这种现象有助于提高画面的真实感。
森林场景中的直接照明与全局照明。
直接照明、间接照明和全局照明示例
20 世纪 90 年代以来,几乎所有 3D 游戏都基于某种形式使用了直接照明和间接照明。以下是一些热门游戏在实现照明中所取得的里程碑:
“毁灭战士(Doom)”的地图区域具有不同的灯光强度。
1993 年:“毁灭战士(Doom)”是第一批实现动态照明的游戏。在该游戏中,每个区域的灯光强度都是可变的,能够使纹理贴图实现或明或暗的变化,并对昏暗和明亮的区域以及闪烁的光等场景效果进行模拟。
1995 年:“雷神之锤(Quake)”引入了光照贴图,并预先计算了游戏中的各个关卡所需的光照贴图。光照贴图可用于调节环境光的强度。
1997 年:“雷神之锤 II(Quake II)”为光照贴图添加了颜色及来自射弹和爆炸的动态照明。
2001 年:“寂静岭 2(Silent 2)”采用了逐像素照明和模板阴影。“怪物史莱克(Shrek)”使用了延迟照明和模版阴影。
2007 年:“孤岛危机(Crysis)”采用了动态屏幕空间环境光遮蔽技术,通过像素深度的改变实现照明的变化感。
2008 年:“雷神战争:光线追踪版(Quake Wars:Ray Traced)”是第一个使用光追反射的游戏技术演示。
2011 年:“末日之战 2(Crysis 2)”是第一个采用屏幕空间反射(SSR)技术的游戏,即重新利用屏幕空间数据进行计算反射的热门技术。
2016 年:“古墓丽影:崛起(Rise of the Tomb Raider)”是第一个使用基于体素的环境光遮蔽的游戏。
2018 年:“战地 5(Battlefield V)”是第一个使用光追反射的商业游戏。
2019 年:“Q2VKPT”是第一个应用路径追踪的游戏,该技术后来在“雷神之锤 II RTX 版(Quake II RTX)”中得到了完善。
2020 年:采用 RTX 的游戏“我的世界(Minecraft)”,借助 RTX 实现了路径追踪。
“孤岛危机(Crysis)”,图片来源:MobyGames.com。
支持 RTX 的“我的世界(Minecraft)”。
实时图形学的未来发展方向是什么?
实时图形学未来的发展方向是能在日益复杂的场景中,实现更加完整的光线模拟。
ReSTIR 拓宽了艺术家能够在游戏中使用多个灯光的可能性。其新版本 ReSTIR GI 将同样的理念应用于全局照明,实现了反射更多、更精确的路径追踪,同时还能以更快的速度渲染出噪点更少的图像。目前,技术提供商正在开发更多新的算法,以使路径追踪更快且更方便。
虽然使用光线追踪可实现完整的模拟照明效果,但这也意味着渲染后的图像可能包含一些噪点。当前,减少噪点(降噪)也属于热门研究领域。
技术提供商正在开发更加丰富的技术,以帮助游戏开发者能够在实时帧率下,对复杂且细节丰富并包含大量运动行为的场景进行有效的降噪。目前,技术人员主要从两方面着手,以解决该问题:噪点较少的高级采样算法以及能够处理愈加棘手情况的高级降噪器。
《赛博朋克 2077》使用 NRD 去噪。
NVIDIA 的“直接照明”和“间接照明”解决方案的详情请见:
https://developer.nvidia.cn/zh-cn/rtx/ray-tracing/rtxdi
https://developer.nvidia.cn/zh-cn/rtx/ray-tracing/rtxgi