在计算机图形开发者的众多梦想中,其一便是让光线追踪产生各种照片级真实渲染效果,使虚拟世界更为贴近自然,打破真实与虚拟的次元壁。
1980年,特纳·怀特迪便提出了光线追踪算法的可行性。但在最初的20年,人们主要聚焦于运行效率的提升,提出了空间细分、包围体等现在耳熟能详的技术。第二个20年,人们开始将目光集中到灯光效果本身,并发现诸如漫反射、折射、运动模式和镜头效果等特效其实可以在单个框架内计算出来。
NVIDIA RT Core正是特纳·怀特迪光线追踪算法提出近40年后,用量产硬件加速核心,向模拟自然光照迈进的一大步。当下,实时光线追踪算法已经成为最流行的话题之一,这个话题不仅影响着最终的游戏成品,也影响着开发者的使用习惯。
这里我们着重围绕Unreal Engine虚幻引擎,探究实时光线追踪、RT Core,以及GeForce RTX 30系列显卡,是如何影响开发者的使用和习惯,又是如何提升开发效率的。
用阴影描绘真实
一般来说,游戏玩家会把实时光线追踪技术的关注点放在光影反射、水面、镜面倒影或者刀光剑影。而事实上,实时光线追踪所产生的阴影效果,更聚焦于提升游戏画面。「如何提升画面的阴影表达」一直是开发者关注和讨论的话题。
例如,此前的屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion,即SSAO),后来的高解析度环境光遮蔽(High Definition Ambient Occlusion,HDAO),两者都旨在提升画面的阴暗对比,通过阴影增强整体画面对比度,接近HDR的效果。
但只依靠环境光遮蔽来实现自然的阴影效果并不容易。在实时光线追踪没有诞生之前,开发者希望实现物体的阴影效果,通常需要提前离线渲染预制好相应的阴影特效。预设的阴影意味着不存在与实际画面互动的能力,它可以理解成一个贴图,无法实现随环境改变而变化的柔和阴影效果。
以赛车游戏为例,以往的游戏引擎难以实现阴影动态渲染的效果。如果车辆阴影控制不好,就会看到赛车阴影与赛车一起离地起飞,非常不自然。即便是时下多数传统赛车游戏,若没有光线追踪加持,车辆在不同天气下留下的阴影也很难做到更好。
Unreal Engine 4.5版本提供的实时光线追踪技术支持,大致可以分成下述几类。不难看出,Unreal Engine将该阶段的技术提升重点放在了光线追踪阴影效果上:
光线追踪阴影(Raytraced Shadow)
基于图像的天窗光照(Skylight for Image-Based Lighting, Skylight for IBL)
光线追踪反射(Raytraced Reflection)
环境光遮蔽(Ambient Occlusion)
全局照明(Global illumination)
半透明(Translucency)
无论实时光线追踪技术如何迭代,Unreal Engine设计UI上的可调节参数变化都不大。这意味着开发者能够按照以往的使用习惯,在熟悉的软件界面无缝切换到最新技术中。
尽管开发者使用非RTX显卡,采用混合渲染器的Unreal Engine也能做到光线追踪渲染,但可能会意味着永无止境的等待和卡顿。光线追踪对传统硬件的高需求,让开发项目大多数时候必须在图像质量与性能之间进行取舍。
由于传统的CUDA Core(GPU)以SIMT方式执行指令,即使是安培架构下每条指令宽度为32路,用于多层包围盒体(Bounding volume hierarchies, BVH)加速结构下加速效率也依然很差,很可能只有1/32的有效求交结果。
而专门的实时光线追踪加速核心NVIDIA RT Core便针对BVH提供了高效的加速方式。在安培架构——GeForce RTX 30系列的第二代RT Core中,RT Core提供BVH遍历、BVH求交、三角形求交、结果返回等硬件加速,并拥有2个可并行执行的三角形求交模块,1个三角形位置内插模块。这意味着第二代RT Core可以每个周期完成两次三角形求交。
因此第二代RT Core带来了许多改变。以往处理移动物体不当会有的飘忽不定、与场景分隔的尴尬,在采用实时光线追踪效果之后,物体的移动效果会更为自然。特别是在光线环境更复杂的室内空间,哪怕只使用二次反射,游戏光影变化都会获得以往无法企及的效果。
类似《我的世界》中迷雾晨光的场景是在以前是很难做到的
如前面所说,在GeForce RTX 30系列显卡中,第二代RT Core通过增加三角形位置内插模块,提高了运动模糊等多次采样特效时的光线追踪性能,以解决运动模糊的问题。
运动模糊是游戏最常见的特效之一,它需要实现模拟物体快速移动过程中,在人眼上留下移动残像的效果。模糊移动效果可以暗示整个画面移动迅速,给人留下快速的想象空间,能够为玩家带来更深入的游戏体验。
前两年好莱坞动作影星汤姆·克鲁斯号召大家在高端电视上关闭运动补偿效果,目的就是让电视播放的动作残影不会被补偿技术抹去,从而造成一种在看网络视频的错觉。可见运动模糊真实性给予的代入感多么重要。
早在2018年,汤姆·克鲁斯就建议大家保留电视中的模糊效果
因此实时光线追踪技术不仅能让游戏开发者用更少的时间,打磨高质量的扬尘及其留下来的阴影效果。开发者所想即所得的创意想法也能够更进一步保证创意不会断片。GeForce RTX 30系列显卡便能将开发者从重复的工作中拯救出来,用保留下来的精力投入到更多想法的实践中。
DLSS与光影并行
游戏制作与拍电影类似,重点都是在如何使用有限的资源实现最佳的效果。很多时候游戏开发者需要在创意、显示效果、显示性能之间找到平衡。例如将光线反射次数不停增加,自然就能获得更自然的光线追踪效果和更少的噪点。
但现实不允许所有场景都用上高阶的实时光线追踪特效,画面中的采样点也要有所减少,伴随而来的则是千疮百孔的噪点图像。
在游戏中解决噪点的方案有很多种,可以使用后色光、材质调整,也可以通过降低场景的复杂程度。例如开发者通过LOD(Levels of Detail,多细节层次)技术,根据物体模型节点在显示环境中所处的位置和重要程度,以决定物体渲染资源分配,并降低不重要物体的面数和细节,就是其中一种做法。
在UE4引擎运用高粗糙度反射(Reflection with High Roughness)、天光(Sky Light)、环境光遮蔽(Ambient Occlusion)、漫反射光噪点(Diffuse Lighting Noise)、全局照明(Global illumination)均可实现不同程度解决光线追踪噪点的效果。
无论制作组还是游戏玩家,都会意识到降低游戏渲染分辨率,给显卡腾出更多运算资源,并获得更好的光照效果是个很好的做法。而DLSS深度学习超采样技术与第三代Tensor Core,便能够降低渲染分辨率的同时,让画面仍获得同等画质。
超采样技术与DLSS最初版本主要实现的功能,都是抗锯齿。在安培架构发布之后, DLSS 2.1版本已经能够实现用2K渲染分辨率,实现8K原生分辨率渲染品质的画面。这意味着画面重构能力达到了原始分辨率的9倍。
从诸如COD17游戏中的实践来看,使用原生渲染分辨率和DLSS优化的结果已经基本相同,而DLSS也帮助计算机释放了更多性能。
COD17中,左为SMAA,右为DLSS,已经看不出区别
更重要的是,DLSS目前已经具备极高的泛用性,不需要为每一个游戏进行重新训练,只要将画面提交给NVIDIA,短时间内就能获得DLSS的优化,从而节省开发的部署时间。
目前UE4已经加入了对DLSS 2.1支持。过去开发者为了节省开发资源,常常在制作游戏场景时会使用更小的分辨率预览,否则需要承担画面卡顿的窘境。而开发者一旦获得DLSS支持,预览界面的流畅度将会获得明显提升,开发体验自然也变得顺畅许多。
而如果按照传统的光线追踪计算量,开发者想获得流畅且高质量的特效估计还需要数年时间。DLSS技术则将这个时间节点提前了数年。
同时安培架构第三代Tensor Core虽然数量只有上一代的一半,但每个Tensor Core规模都增加到上一代的两倍。再加上支持硬件细粒度结构化稀疏加速能力,让目前的DLSS 2.1变得更高效。
当然,DLSS仍然有很多可以挖掘的地方。因为诸如DLSS 2.1的新技术需要硬件和游戏的同时支持,运行效率往往也更高,这也是为什么厂商一直推崇用新的显卡运行最新的游戏原因之一。
全局照明的实现
场景光照,特别是室内全场景光照更为复杂。光线追踪实现需要依靠路径追踪(Path Tracing)执行,也就是将光线射入,击中物体之后,利用蒙特卡罗法随机发射大量随机方向的次生射线。次生射线产生越多,实现效果越自然,噪点越小,性能需求越大。
在离线渲染的电影中,次生射线进行10-15次反弹已经足够,而专业设计实时预览,可能只需要的4次,对即时响应更高的游戏可能只有2次。
不同的反射次数能够实现不同的效果
如何降低资源消耗是个很大的问题。在GeForce RTX 30系列显卡发布之后,RTXGI(RTX Global illumination,RTX全局照明)也被提上了议程,这是一种称为动态漫反射全局照明(Dynamic Diffuse Global Illumination,DDGI)的讨巧的技术,通过给游戏场景增加大量的探测球,以获得更好的性能。
左边为RTXGI OFF,右边为RTXGI ON
该技术通过探测球向场景发射射线,将获得的辐射度、距离保存起来。当其与路径追踪混合,即可产出探测球对应位置的亮度值。这样不仅可以显著节省性能开销,不会产生噪点,漏光问题也能得到控制。
以往类似的动态漫反射全局照明的技术,只能在有线的分辨率和空间内使用。但RTX 30系列显卡上市以后,第二代RT Core能够更大规模布置更多的探测球,再搭配DLSS,开发者能够获得更好的光线追踪性能和画质。
在Unreal Engine 4.25版本以后的引擎中,开发者就能调用相应的选项。
最后:硬件与光影正在发生质变
其实近40年前,特纳·怀特迪最初提出的光线追踪算法没有解决全局照明的问题。如果按照硬件算力来推算,实时光线追踪在短时间内也很难实现。但理论计算、灵活技巧,与实践之间是有差距的。事实上我们已经运行上了实时光线追踪技术的游戏,这类游戏的数量在不断增多,并将很快到达井喷点。
通过UE4引擎、GeForce RTX 30系列显卡带来诸如RTXGI、DLSS 2.1、光线追踪运动模糊场景渲染等诸多新技术,光线追踪已经给游戏画质提供了质的飞跃。更重要的是,几乎无缝的转接,让开发者可以自然而然过渡到光线追踪场景的特效中来。
此外,随着CES2021上NVIDIA发布NVIDIA GeForce RTX 30系列笔记本电脑GPU,配备高达16GB显存以及最高4K分辨率可选,让开发者在任意场景也能使用诸如UE4等开发套件。而这在过去,笔记本电脑是无法实现的。
NVIDIA实现了硬件和软件的统筹,并对图形计算变革起到了重要作用。或许不久的将来,全局光线追踪就会展现在开发者和玩家眼前。毕竟,曾经被奉为图形计算圣杯的光线追踪,已经成为司空见惯的技术。