Lumen为《堡垒之夜:大逃杀》第四章带来实时全局光照
图像部门工程研究员Daniel Wright和图像部门技术总监Krzysztof Narkowicz
2023年1月26日
Lumen
光线追踪
功能
技术博客
游戏
大家好,我们是开发Lumen的工程师Daniel Wright和Krzysztof Narkowicz。
Lumen
是虚幻引擎5中完全动态的全局光照和反射系统,开箱即用。在这篇博客文章中,我们将带你了解Lumen如何在《堡垒之夜:大逃杀》的第四章中发挥作用,我们还会着重介绍在发布第四章时,团队对Lumen所做的改进(
虚幻引擎5.1
中已包含这些改进,现在可供所有开发人员使用)。我们之前还写过一篇介绍Lumen的
技术博文
,强烈推荐你阅读,以便了解该系统的总体概况。
在Playstation 5、Xbox Series X和Xbox Series S平台发布的《堡垒之夜:大逃杀》第四章
已经默认启用了Lumen
。在PC和云游戏平台,只要将“全局光照”的质量设为“高”或“史诗”,就能启用Lumen,如果显卡支持,还可以选择使用硬件光线追踪获得更高的质量。
《堡垒之夜:大逃杀》第四章中的Lumen
在第四章之前,由于技术限制,《堡垒之夜》在次世代主机上使用的是虚幻引擎4的动态光照技术。我们只能使用距离场环境光遮蔽照亮环境,当蓝色的天空光照泄漏到建筑物中时,会导致室内产生寒冷的感觉。在第四章中,Lumen高质量地计算了全局光照,重新带来了温暖的阳光反射和精细的间接阴影。
距离场环境光遮蔽与Lumen全局光照的对比。自动曝光已随Lumen全局光照一起启用。
有了精确的全局光照,室内区域会明显暗于室外,因为天空光照被正确地阻挡住了,此时需要启用
自动曝光
。
在次世代主机上,之前版本的《堡垒之夜》由于技术限制,只能通过
屏幕空间反射
(SSR)实现反射。这种效果只能反射屏幕上显示的内容,不足以防止天空光照泄漏到建筑物中。SSR也只能在镜面上提供良好的效果,所以粗糙表面上会缺少反射。《堡垒之夜》的美术师们一直在努力绕过这些限制,他们采用的方法是尽可能避免在室内使用会产生镜面反射的材质!Lumen反射可以在光亮表面上提供精确的光线追踪反射,即使是在室内,也能够正确渲染金属和光滑材质。美术师现在可以实时看到材质对光照做出的完整反应。
屏幕空间反射与Lumen反射在冰面上的对比。
Lumen反射在水面上也得到了广泛应用,它们比SSR更清晰,而且不局限于只能反射屏幕中的可见内容。
屏幕空间反射与Lumen反射在水面上的对比。
《堡垒之夜:大逃杀》有许多需要用到动态光照的游戏事件,包括当日时间发生变化,玩家建造和破坏建筑物,以及打开门,等等。Lumen是完全动态的,可以对这些变化做出实时反应。为了降低成本,Lumen确实会将计算过程分摊到多个帧中,但《堡垒之夜》的目标是实现高帧率,这在最大程度上减少了随时间积累的伪影。
通往第四章的旅程
随着虚幻引擎5.0版本中的工作圆满结束,我们将关注点转移到了《堡垒之夜:大逃杀》第四章以及它带来的挑战。《堡垒之夜》在主机上的最低目标帧率为60FPS,每帧只占16.67毫秒,如果考虑到为动态分辨率留出的余裕以及激烈战斗中的游戏成本,每帧的时间甚至会更少。考虑到我们想要的各种渲染功能,动态全局光照和反射加起来只能占用4毫秒。这个预算非常低,因为对3A级游戏来说,仅仅在光线追踪反射上花费4毫秒也是很常见的。我们要在不影响次世代光照质量的前提下,尽可能地做出各种优化。
我们首先必须决定要在《堡垒之夜:大逃杀》第四章中使用哪种光线追踪方法。我们之前在主机平台发布了
《黑客帝国觉醒:虚幻引擎5体验》
,并在其中启用了
使用硬件光线追踪的Lumen
,我们
做出了重大优化
,但是那个技术演示只有30FPS的预算。经过一些早期测试,我们确定了,Lumen的软件光线追踪需要达到60FPS的预算,因为它的追踪成本较低。但是,软件光线追踪的近似性质带来了一些挑战,在植被质量和水面反射方面尤其明显。
《堡垒之夜:大逃杀》第四章中出现了森林和被草地覆盖的连绵山丘。在我们之前发布的Lumen项目中,没有大规模的植被,所以我们还没有机会处理这方面的工作。对植被的过度遮蔽是最严重的问题之一。
Lumen的软件光线追踪使用全局有向距离场表示场景表面。有向距离场仅能表示不透明表面,在其中穿行的光线只会给出两种结果:命中或未命中。这会导致在被建模成聚合体的植被网格体上,将出现严重的过度遮蔽。我们开发了一种与有向距离场相交的新方法:光线每前行一步,我们都要做出是否相交的选择。这使它成了一种随机技术,也允许我们更加精确地对聚合几何体进行建模,同时保留在场景其他部分表现良好的有向距离场表示法。
利用半透明随机距离场相交解决植被上的过度遮蔽问题。
有些问题解决起来比较容易。Lumen使用屏幕追踪添加软件光线追踪所缺乏的细节,但草地的细节太过丰富,致使这些屏幕追踪引发了明显的锯齿问题。一种简单的解决措施是略过植被上的屏幕追踪命中点,这足以解决伪影问题。
通过略过植被命中点,解决屏幕追踪在草地上产生的严重噪点问题。
软件光线追踪的另一个大问题是,在反射中你会看到,表面上缓存的光照有着较低的分辨率。Lumen为每个网格体维护了一个分辨率相当高的表面缓存,用来有效地为光线命中点提供光照,但我们将它们合并到了一个更加模糊的体素化表示中。我们开发了一个反向查找结构,允许我们直接对被光线命中的每个网格体进行表面缓存采样,从而产生更精确的自发光光照和更清晰的水面反射。
当光线直接对Lumen的表面缓存进行采样时,使用软件光线追踪将得到更加清晰的反射(为了取得可视化效果图,屏幕追踪已被禁用)。
说到水面反射,每当Lumen的屏幕追踪被前景物体阻断时,我们都会在被阻断的地方看到垂直条纹伪影。对于运动中的角色来说,这种伪影非常容易分散观看者的注意力。Lumen的屏幕追踪无法知道物体的厚度,所以我们必须切换到软件光线追踪才能处理剩下的光线,这往往会导致颜色出现差异。这甚至还不如屏幕空间反射,屏幕空间反射使用的是一种成本更低,但不太精确的光线相交方法,但支持在前景物体后方继续相交。即使是对于软件光线追踪的命中点,我们也能通过对屏幕颜色的采样解决垂直条纹问题,这减少了颜色不匹配的现象。我们在最后一刻才提出了解决方案,所以并没有添加到UE5.1版本中。
通过对光线命中点的屏幕颜色进行采样,在最大程度上消除由屏幕追踪和软件光线追踪之间的不匹配导致的垂直条纹现象。
质量方面的其他改进取得了出人意料的效果。为了符合四毫秒的预算,Lumen全局光照大幅降低了采样率。这会使噪点变得更加明显,并在游戏体验中分散玩家的注意力。我们通过整合
NVIDIA的时空蓝色噪点
技术,大幅减少了噪点。这项技术预先优化了噪点模式,当噪点在多个帧中积累起来时,可以迅速消除它们。这样一来,无需追踪更多光线,就能得到更加干净的间接光照。
有了时空蓝色噪点技术,在穿门而入的天空光照中,噪点变少了。
美术方向的控件
美术师可以通过一些手段管理间接光照的美术方向,例如定向光源中的“间接光照强度”。《堡垒之夜》的美术师将这个值设为2.0,这样可以增强被反射的光线,给游戏带来温暖的感觉。但室内区域出现了一个问题:如果附近没有窗户或光源,使用精确的全局光照时,这个区域会变得非常暗。从室内走向室外时,这会导致曝光出现巨大波动。美术师可以通过放置更多光源解决这个问题,但会增加阴影成本。
我们为Lumen的间接光照开发了新控件:后期处理体积中的“天空光照泄漏”和“漫反射颜色增强”。“天空光照泄漏”可以在室内稍微提升环境光照的强度,限制曝光范围,而“漫反射颜色增强”可以增强经过多次反射的间接光照。与添加更多光源不同,这两个选项不会明显增加GPU成本。考虑到可玩性,《堡垒之夜》的美术师最后使用了“天空光照泄漏”防止室内区域变得太暗。
泄漏进来的天空光照可防止区域变成纯黑色。
精确的全局光照创造了高对比度光照,在这种情况下,单个曝光值无法取得良好的效果。图像中的明亮区域(尤其是天空和被太阳照亮的表面)会曝光过度,而黑暗区域则曝光不足。
虚幻引擎5.0引入了一个名为“局部曝光”的新功能
,在《堡垒之夜》那些具有挑战性的高动态范围光照条件中,美术师用它保留了高光和阴影细节。
通过局部曝光保留高光和阴影细节,这是UE 5.0中的新功能。使用Lumen时,务必设置局部曝光!
性能
Lumen非常依赖通过虚幻引擎5的时序超级分辨率(TSR)功能对4K输出进行
时序上采样
。比起以质量明显较低的设置在4K原生环境下运行Lumen,使用TSR在内部渲染1080P分辨率可以提供最好的最终图像质量。
你可以配置Lumen,通过在平台的设备配置文件中将“全局光照”质量和“反射”质量设置为“高”,在次世代主机上实现60FPS的目标,具体做法如下:
将Lumen全局光照和反射质量设置为“高”,目标帧率为60FPS
添加控制台变量sg.GlobalIlluminationQuality=2
添加控制台变量sg.ReflectionQuality=2
Lumen全局光照通过降低采样率,使其远低于常规标准(对光线的逐像素采样率降到原来的十六分之一),达到降低质量级别的目的。当追踪如此少量的光线时,间接光照的时间稳定性会降低,黑暗区域的噪点会变得更明显。“天空光照泄漏”能够有效地隐藏这些新出现的噪点。
60FPS设置下的Lumen对比30FPS设置下的Lumen。Lumen能够更好地捕捉小细节,而且在30FPS的设置下,有着更高的时间稳定性,这在截图对比中无法体现出来。
制作《堡垒之夜:大逃杀》第四章时,我们对Lumen全局光照做出了许多小规模优化,但对提升速度帮助最大的还是将整套方法迁移至异步计算管线中,这样可以节省0.8毫秒。Lumen的各种算法中有很多计算调度,在两次调度之间,GPU会有很短的空闲时间,但这些时间会累加起来。
此外,光线追踪的调度往往会出现长尾效应,少数光线完成调度的时间比其他光线更长。通过将这项工作迁移至异步计算管线,GPU能够利用空白时间处理帧中的其他工作,这更充分地利用了GPU的处理能力。UE 5.2中将默认为主机平台启用异步Lumen。因为有一些错误需要修复,所以我们没能来得及在UE 5.1中推出这项功能。
Lumen的工作现在是在异步计算管线中进行的,这更充分地利用了GPU的计算能力。
在除水面外的其他地方,Lumen反射可将渲染分辨率降至一半,通过降低质量级别来控制预算,实现60FPS的目标。Lumen全局光照已经能够产生粗糙的反射,但是Lumen反射需要追踪额外的光线才能获得清晰的反射效果。根据屏幕上有多少足够光滑的材质需要反射光线,反射成本可能存在很大的变数。植被上的反射光线已经在基础通道和阴影深度中产生了较高的成本,我们通过更频繁地略过这些反射光线,实现了一项非常重要的优化,缩减了一到两毫秒的时间,并且没有造成明显的质量损失。
Xbox Series S带来了一个特殊难题。Xbox Series X的GPU性能达到了12TF,而Xbox Series S的GPU性能只有4TF,所以我们需要为它降低内部分辨率,但这样做还不够。我们不想退回到使用距离场环境光遮蔽,这将大大改变外观。我们开发了一种模式,让Lumen全局光照提供粗糙反射,同时使用屏幕空间反射实现镜面反射。通过禁用Lumen反射,我们节省了大约1毫秒的时间,比起仅使用屏幕空间反射所能实现的效果,这种方式为我们带来了更出色的外观。
即使为了实现可延展性而禁用了Lumen反射,Lumen全局光照仍会提供粗糙反射。
不管怎么说,我们成功地在4毫秒的平均成本预算内整合了Lumen全局光照和反射,在次世代主机上实现了60FPS的帧率。《堡垒之夜:大逃杀》第四章在次世代主机上的平均内部分辨率到达了4K的55%-60%,同时稳定地实现了60FPS的帧率。
降低质量级别
《堡垒之夜》已登陆多个平台,但只有最高端的平台支持Lumen。游戏体验需要做到尽可能相似,不应该让美术师针对各个平台重新设置光照。我们会根据“全局光照”的质量设置调整环境光照:
史诗级和高级
启用Lumen,提供全局光照
使用Lumen的天空光照泄漏,防止黑暗区域变成纯黑色
启用自动曝光,在室内产生正确的曝光
启用局部曝光
中级
为大规模环境光遮蔽启用距离场环境光遮蔽(而非Lumen)
为小规模环境光遮蔽启用屏幕空间环境光遮蔽
禁用自动曝光
低级
天空光照无阴影
因为没有任何形式的天空光照阴影,所以通过r.SkylightIntensityMultiplier=0.7降低天空光照强度,使其与中级质量更加匹配
我们在这份总结报告中介绍了在《堡垒之夜:大逃杀》第四章中,我们对Lumen做出的改进,解答了如何利用Lumen开发跨平台游戏,希望对你有帮助。这些改进大部分已包含在虚幻引擎5.1中,供虚幻引擎开发者使用。如需了解更多信息,请参阅
Lumen文档
。
立即获取虚幻引擎!
获取全球最开放、最先进的创作工具。
虚幻引擎包罗万象,并提供完整的源代码访问权限,开箱即用,诚意十足。
立即开始