Epic 的 Unreal Engine 4 是上一代最流行的游戏引擎之一。它被 EA、Ubisoft 和 Microsoft 等 AAA 巨头以及大量独立工作室广泛使用。凭借虚幻引擎 5 及其 Lumen 和 Nanite 技术,Epic 正在寻求扩大其在视频游戏行业的主导地位。
在这篇文章中,我们将介绍 Lumen,这是虚幻引擎 5 使用的全局照明解决方案,可在预算内为下一代游戏带来逼真的照明。我们将 Lumen 与传统的光线追踪进行比较,并分析两者在质量和性能方面的差异。
简而言之,全局照明是通过计算屏幕内外光源发出的光(通过近似或追踪其路径)来照亮或照亮场景的过程。通过光线和路径追踪,光线从这些光源投射,到达场景中的各种物体并照亮它们。根据遇到的对象的性质,光线的行为会有所不同。例如,有光泽(闪亮)的物体会反射光线,而不透明的物体会简单地阻挡它并将其重定向到其他地方。物体在不同方向上对光线的重定向称为间接或漫射照明,而重定向的光线称为漫射光线。
然后这些间接或漫射光线充当新投射的光线,进一步撞击其他对象并在此过程中照亮它们,而对象将它们重定向基本上充当光源。当光线最终到达相机(你的眼睛)时,它收集的信息用于确定场景的照明。
在大多数情况下,光线的颜色由反射它的像素的颜色决定。为了节省性能,直接照射到屏幕(您的眼睛)的光线(颜色、强度等数据)使用复杂的算法进行计算,而其余的漫射光线则使用更简单、不太复杂的方程来计算。
所以,现在您可能想知道光线是如何在场景中投射的,以及如何确定每个场景的光线数。嗯,这是通过探针完成的,这些探针基本上是开发人员在运行前放置在场景中的光源。每个探头都充当点光源,投射光线并照亮场景。每个探头可以放射状地投射一条或多条射线。
这些探测器投射的光线被追踪、着色,并且辐照度和几何距离等数据被存储并用于计算场景的最终照明。在最初的光线追踪游戏中,大多数开发人员使用一个(或两个)光探针来计算漫反射光照。在 Metro Exodus 中,这是太阳和天空的纹理。在增强版中,这扩展到了 256 个光源或探头。因此,总的来说,您有256 个光源,加上来自太阳和天空的光线都用于计算每个像素的光照。1080p 显示器有 200 万像素,1440p 有 400 万像素,4K 有 800 万像素!
为了确保现代硬件能够真正运行游戏,开发人员使用网格单元或集群来划分场景。然后类似于屏幕空间效果,范围内(网格中)的光探针用于计算场景的照明,主要区别在于在前者的情况下,屏幕空间被划分为多个部分(取决于它们在 Z 缓冲区中的位置),而在后者的情况下,游戏世界是分区的,避免了类似的覆盖问题。
另一项优化涉及累积来自先前帧的光线并将它们用于额外的漫反射光反弹,就像时间放大一样。这用于生成照明网格,然后可以在连续帧上重复使用,从而允许几乎无限的光线反弹。您实际上是在多个帧上临时投射漫射光线,以减少性能影响并使该方法更适合实时使用。由于漫射光线的影响是微妙的(但在光线不足的场景中很明显),它不会受到通常与时间渲染技术相关的问题的影响。
Lumen 基于光线追踪,尽管它是一种更优化的混合形式,以允许在不同的图形架构中更广泛地采用,而无需拥有 1,000 美元的 GPU。
Lumen 是虚幻引擎 5 的全新全动态全局照明和反射系统,专为下一代游戏机而设计。Lumen 是虚幻引擎 5 中默认的全局照明和反射系统。它在从毫米到公里的大型详细环境中渲染具有无限反弹和间接镜面反射的漫反射。
默认情况下,Lumen 使用软件光线追踪(不使用 RT 内核/加速器),这是一种高度优化的形式。它并行使用多种形式的光线追踪,包括屏幕追踪 (SSRT)、有符号距离场 (SDF) 和网格距离场 (MDF),根据对象及其与屏幕的距离计算场景的全局照明,以及某些其他因素。
在我们继续之前,您需要知道有符号距离场(和网格距离场)是什么。虽然这听起来像是一个非常复杂的术语,但SDF 基本上是一个特定方向的距离向量。让我们以下面的例子来说明这一点:
SDF
光线从相机投射,穿过屏幕,然后接近圆形表面。现在,通过光线追踪,最重要的部分是确定哪些光线击中场景中的对象,哪些未命中。SDF 用于此目的,更具体地说,是找出(对于从特定方向开始的光线)对象表面上存在交叉点的最近点。
Ray Marching
这里,绿色圆圈代表 SDF。计算SDF 意味着找出我们可以(至少)沿着射线在那个方向上走多远。然后,覆盖这么多距离并重新评估 SDF。这整个过程称为光线行进。现在对网格采用相同的方法,您将获得网格距离场 (MDF)。无论哪种方式,在这种情况下,光线实际上并没有击中圆,因此该过程在预定数量的步骤后结束。以防万一,SDF 将被用于计算照明和其他相关方程。
Lumen 在其软件/混合跟踪管道中使用全局距离场、网格距离场和屏幕跟踪来计算场景的照明。全局距离场是最快的,但准确度要低得多。这对他们有利,因为它们用于场景的抽象外骨骼,例如墙壁、地板和大(但简单)的纹理块(例如垫子)。网格距离场更详细,但仅在对象表面附近保留稀疏的细节。这些 SDF 与 mipmap 一起使用,具体取决于对象与相机的距离。
lumen 中的软件光线追踪过程从屏幕空间光线追踪或屏幕追踪开始,它针对深度缓冲区中的几何体/对象(在屏幕上可见)进行。正如您在本节开头的图表中看到的那样,这通常用于边缘和裂缝,基本上是投射屏幕空间阴影 (SSAO) 的几何体。在屏幕跟踪之后,使用 SDF。第一个网格距离场用于附近的对象,其次是全局距离场用于场景的其余部分。
网格距离场(称为详细跟踪)跟踪距离相机最远 2 米的对象,而其余部分使用全局距离场进行跟踪(称为全局跟踪)。如上所示,每种方法都有自己的每个场景的 2D 体素表示。GDF 不太准确,因为您实际上是根据对象轮廓跟踪它们,但比 MDF 快得多。此外,目标对象的性质/距离意味着这非常有效。另一方面,MDF 跟踪场景中各种对象的(相对)低多边形版本以计算照明(对于高达 2 米的对象)。
为了进一步加快这个过程,Lumen 使用了Surface Cache。Surface 缓存从各个角度捕获对象的几何属性,并以各种图集(缓存)的形式离线存储它们。捕捉发生在玩家四处移动时,当你靠近时分辨率更高,当你远离物体时分辨率较低。但是,这仅适用于内部简单的网格。缓存发生在有限数量的对象多边形(几百 MB 的 VRAM)中,并且需要各种对象/部分的 LOD 才能有效利用。
Lumen 软件 RT的主要缺点之一是它不适用于蒙皮网格(主要是骨架),因为它们是动态的并且随着每一帧(变形/移动等)而改变它们的形状。因此,需要为每一帧创建这些对象的 BVH 结构,而 Lumen 的 SW 光线追踪器无法做到这一点。Lumen SW 在运行时只为静态网格创建一次 BVH 对象,这大大加快了进程,但对于动态网格却毫无用处。
Lumen 还带有硬件光线追踪,但大多数开发人员会坚持使用前者,因为即使使用 RT 内核等专用硬件,它也比 SW 实现慢 50% 。此外,您也不能使用硬件光线追踪或蒙版网格重叠网格,因为它们会大大减慢光线遍历过程。如上所述,软件光线追踪基本上将所有相互重叠的网格合并到一个距离场中。
总体而言,Lumen 看起来很出色,但它的主要缺点是它仅限于 Unreal 5。这意味着与 NVIDIA DLSS 类似,它永远不会看到与其他开源技术(FXAA、SMAA 甚至 TAA)相同的采用量. 从好的方面来说,它应该允许许多独立工作室利用这种先进的 GI 技术,而无需付出太多努力。此外,它还将推动其他主要引擎(最著名的是 CryEngine、Frostbyte、Dunia 和 Snowdrop)提出他们自己优化的、基于软件的光线追踪器,可在所有硬件上工作。现实中会游戏制作会遇到电脑硬件配置不足带不动软件,前期硬件投入过大,还会遇到项目文件资产过大,游戏项目耗时久,本地资源无法释放的情况等,建议可以试试云工作站,云端制作快人一步。