全局照明
当光离开光源时,它会照亮在光源所在位置可以看到的所有表面,这在计算机图形学中称为“直接照明”。但在现实生活中,光明并不止于此;它从表面反弹,在此过程中捕获其颜色。从粗糙表面向各个方向反射的光称为“漫反射间接照明”或“全局照明”。光从光滑表面反射的过程称为“反射”。最终,光线到达您的眼睛或相机,形成图像。
过去,在大多数游戏中,全局照明只能通过称为“光照贴图烘焙”的离线过程来处理,因为实时计算的计算成本太高。在虚幻引擎中,光照贴图是使用CPU Lightmass 或GPU Lightmass 烘焙的。光照贴图提供的静态光照可以带来非常高的质量,但需要较长的构建时间,并且极大地限制了游戏环境。任何显着改变间接照明的操作(例如移动壁挂式电视)都会导致照明状态变得不正确。
需要这些动态场景的游戏依赖于基于辐照度探测器的低质量照明,以及提供近似全局照明的环境光遮蔽等方法。与烘焙照明质量相媲美的全局照明一直难以实现。
Lumen 实时模拟场景周围反射的光线,允许玩家改变游戏世界的任何方面,同时间接照明会自动更新。玩家可以破坏关卡中的大部分东西,改变一天中的时间,或者照亮关卡的一部分,这些变化将自动传播到照明。游戏开发者可以告别在虚幻编辑器中看到“光照需要重建”的消息。
Lumen 高质量地解决了全局照明问题,提供了渗色和间接阴影等效果。 Lumen 支持无限漫反射,这在具有明亮表面的场景中非常重要,例如下面场景中的白色油漆层。
Lumen在解决全局光照问题的同时,还解决了导致室内环境比室外环境更暗的天空阴影问题。
Lumen 还可以传播来自自发光材料的光,而不会产生任何额外成本,例如下面的灯和窗户。自发光区域的大小和亮度有限制,超出该限制就会出现噪声伪影。发射灯本质上比手动放置的灯更难使用。
Lumen 还解决了半透明和体积雾的全局照明问题,但质量较低。在这里,自发光徽标网格动态地照亮体积雾。
反射
Lumen 以动态方式解决具有任意粗糙度的任意表面的反射问题。这取代了预先计算的反射形式(例如反射捕获)以及限制性技术(例如平面反射和屏幕空间反射)。
然而,仅仅处理相机直接可见的动态全局照明是不够的。 Lumen 还提供具有动态全局照明和可在反射中看到的阴影的天空照明。
流明反射支持涂层材料,例如这里的汽车油漆。其外层具有镜面反射,而内层则具有更多的镜面反射。
Lumen 中的光线追踪
Lumen 使用光线追踪来处理这些照明功能,并使用场景的粗糙版本来实现更快的光线交叉。切换到流明场景视图模式以直观地查看场景。此视图显示了Lumen 在追踪全局照明和反射光线时“看到”的内容。
Lumen 默认使用网格距离场,这种技术称为软件光线追踪,因为它不需要支持光线追踪的显卡硬件。距离场以允许快速光线相交的方式表示网格表面。
软件光线追踪还将网格合并到全局距离场中,即使许多网格重叠(这在手动放置的Megascans 资源中更为常见),也可以实现非常快速的光线交叉。 Epic的技术演示《Lumen in the Land of Nanite》和《古代山谷》由于大量网格重叠而充分利用了全局距离场跟踪。
Lumen 还可以通过项目设置使用硬件光线追踪。硬件光线追踪更准确,能够描绘更多几何类型,包括蒙皮网格,但成本更高。镜面反射需要启用硬件光线追踪。
在《黑客帝国觉醒:虚幻引擎5体验》技术演示中,高大的城市建筑阻挡了太阳的直接照射,因此屏幕上的大部分内容都是由Lumen照亮的。
Lumen 在此演示中使用硬件光线追踪来实现高质量反射、蒙皮网格和宽视野。
表面缓存
当光线照射到表面时,Lumen 需要评估材质和入射光。当每条光线到达时都执行此操作将非常昂贵且效率低下;多条光线可能会击中同一点,并且材质可能有多个纹理查找。 Lumen 默认启用表面缓存,并将在其中缓存此照明。
Lumen 首先通过选择捕获每个网格的方向来填充表面缓存,以便覆盖网格的所有表面。当玩家在场景中移动时,Lumen 会不断地将附近网格体的材质属性重新捕获到表面缓存图集中。 Nanite 虚拟化几何系统可以显着加快这些网格的渲染速度,尽管Lumen 不需要这样做,但具有较高多边形数量的网格尤其受益。然后,这些表面被照亮,从而计算反射中可见的天空照明,以及多次反射的全局照明和阴影。表面缓存照明现在可用于加速全局照明和反射等功能。
Surface缓存是Lumen的一个关键优化,但它也有内容方面的考虑。具体来说,它仅支持具有简单内部结构的网格,这意味着墙壁、地板和天花板都应该是独立的网格。将整个房间(包括家具)作为单个网格导入在Lumen 中预计不起作用。
表面缓存视图模式以粉红色显示未覆盖的区域。这些区域将在反射中显示为黑色,并生成基于视点的全局照明,因为仅激活流明屏幕跟踪。
最终采集和去噪
光线追踪的运行成本很高,因此我们无法追踪太多光线。同时,屏幕上的每个像素都需要考虑接收来自场景中每个其他表面的照明,因此称为“全局”照明。追踪来自所有方向的光线是不可能的,因此必须选择一个小的子集。如果错过了重要的方向,噪声伪影将出现在最终图像中,因此我们必须明智地判断光线轨迹的方向,并尽可能重用这少数轨迹。
对于漫反射全局照明,Lumen 采用了基于辐射缓存的最终采集高级算法,该算法已在2021 年Siggraph 会议上发布。
Lumen 的最终采集使用了屏幕空间辐射缓存,它对主屏幕的全局照明计算进行了大幅下采样。下采样的间接照明与全分辨率材质数据集成以产生全分辨率着色。
在这个光能传递缓存中,传入的照明被过滤,这显着消除了噪声并重用了相邻像素之间有价值的跟踪。这与屏幕空间降噪器不同,因为我们仍然在下采样的辐射缓冲区空间中操作,这更有效。
Lumen 非常仔细地选择光线轨迹的方向;它会检查前一帧中明亮照明的方向,这种技术称为“传入照明的重要性采样”。前一帧的光照用于指导在该帧中搜索光照,这会产生与追踪四倍光照相同的质量,但运行速度要快得多。在下面的屏幕截图中,使用重要性采样选择白光。
最后,Lumen 将附近的照明与远处的照明分开,并通过一种称为“世界空间辐射缓存”的技术追踪更多光线,以解析远处的照明以减少噪音。当室内房间完全由穿过小窗户的天光照亮时,这一点变得非常重要,并且是Lumen 确保室内质量的关键。
对于粗糙表面的反射,Lumen 重复使用屏幕空间辐射缓存以避免产生额外成本。因此,Lumen 可以在汽车清漆等材料上提供第二层反射,而无需增加一倍的成本。
光滑表面上的反射追踪额外的照明以找到反射光的来源。这些光线发现的照明在相邻像素之间共享,并在帧之间临时累积以消除噪声。
所有这些采样和降噪技术相结合,对Lumen 的质量和性能发挥着至关重要的作用。 Lumen 并非专为直接照明而设计,但由于最终捕获的质量,有时可以使用自发光网格完全照亮场景。在《黑客帝国觉醒:虚幻引擎5体验》 中,实验性夜间模式仅使用Lumen 全局照明和反射来传播数百万个自发光窗网格的光线,而无需艺术家放置任何光源。
性能和质量
Lumen 严重依赖于通过虚幻引擎5 的时间超分辨率算法对4K 输出进行时间上采样。与在明显较低的质量设置下以4K 原生运行Lumen 相比,这会产生最佳质量的最终图像。
当引擎在更高的可扩展性级别上使用全局照明和反射时,流明可以在下一代控制台上达到60 FPS,但确保这些设置的质量的工作仍在进行中。
除此之外,Lumen 还可以通过以下方式提高质量:
提高后处理体积设置中的最终采集质量
使用硬件光线追踪
当光线击中表面时,使用击中照明而不是表面缓存以获得更高的质量。
随着设置的增加,Lumen 可为建筑可视化提供高质量、实时的全局照明和反射。
结论