图形/仿真

使用 RTX 直接照明使用数百万灯光照亮场景

在 GTC 2020 秋季站上,NVIDIA 宣布即将推出开发者 SDK,RTX Direct Illumination (RTXDI),用于支持并加速大量光源的动态直接照明和阴影渲染。本篇博文中,我将在 RTXDI 于 2021 年春首次公开发布之前,提前重点讲述一下 RTXDI 的功能。您现在可以申请使用 RTXDI 的抢鲜体验版

A beautiful, real-time rendering of the complex San Miguel scene with complex dynamic lighting.
图 1. 由早期的 RTXDI 原型渲染的 San Miguel,该场景由一千万个三角形组成,其中含 11000 个自发光三角形以及由环境映射构成的日光和天光,这些都在8毫秒内计算完成。

RTXDI 利用光线追踪功能打破了传统光栅化流程中常见的艺术表现力方面的束缚。借助 RTXDI,艺术家可以充分发挥想象,无需考虑光照复杂性或阴影贴图成本。场景中的所有光源都可以动态移位、打开或关闭、变换颜色,并投射出正确的阴影和光线。要启用光源,请把自发光属性添加到表面材质。性能在很大程度上已与光照复杂性解除关联,因此,RTXDI 可以从一个光源无缝扩展至数百万个光源。

功能

RTXDI 的主要功能包括:

  • 动态移动所有光源并与动态几何体交互
  • 提供来自各类基本光源,包括由三角形面光源、点光源、矩形面光源、球面光源、柱面光源和环境映射组成的模型光源
  • 支持自发光纹理和 IES 配置文件(如适用)
  • 动态添加、移除、合并或拆分光源几何体。
  • RTX GPU 出色的性能可扩展性,可从一个光源扩展至数百万个
  • 不需要预计算或烘焙
  • 与 RTXGI 集成使用
  • 使用专为 RTXDI 设计的 ReLAX 降噪器;与通用实时降噪器(如 SVGF)兼容
  • 提供完整源代码,便于集成和定制
  • 可在任意 GPU 上运行,具有硬件加速的光线追踪功能

长期来看,RTXDI 是一系列出色研发工作的成果,令这种灵活而强大的光线追踪得到了应用。初始版本建立在最近发布的关于基于样本池的时空重要性重采样 (ReSTIR) 的研究的基础上,其中包括各种改进,大大提升了鲁棒性和性能。

素材影响

RTXDI 应与现有素材和流程轻松集成。RTXDI 仅假设如下:

  • 自发光表面的材质属性包含一项易于估算的发光强度
  • 列举自发光模型和基本光源(球面、矩形面等)并提供给 RTXDI。
  • 一张已有的 G-buffer,其中包含必要的数据,用于对光源与屏幕像素的任意组合进行材质和光照的估算。

提供给 RTXDI 的任何自发光表面都会自动照亮周围的环境。只要提供一套合适的采样函数,您可以轻松添加尚未支持的基本光源

技术背景

真实感渲染需要对每个像素求解一次渲染方程,结合入射光,以确定有多少反射光会进入相机。对于直接照明,积分会转化为所有光源的总和。因此,计算像素的直接照明需要查询每个灯光并测试其可见性。遗憾的是,这与光源数量为线性扩展关系。

现代引擎使用分区光源剔除潜在可见集和类似技术,通过逐像素剔除光源来降低成本。但是,动态可见性依赖于每帧重新计算阴影贴图。这在现代引擎中开销庞大,且不能扩展到多个光源。除了烘焙光贴图中的静态阴影和一些主光源以外,当今游戏中的其他发光体通常提供只在局部反弹的光照,且忽略可见性。

设想一下,包含数百个复杂面光源的照片和渲染(如图 2 所示)。任一像素中有多少阴影是可见的?在带圆圈的区域中,直观的感受是“没有”,尽管此处到场景中各个光源的可见性十分复杂。

The graphic shows a thought experiment; only a few shadows are visible in any given pixel and none in a specific circled area.  Do you really need more than a couple shadow rays per pixel?
图 2. 具有数百个光源的场景。思考在黄色圈起的区域中,有多少阴影是可感知的。每个区域只有几个(或没有)唯一的可识别阴影。

 

在较大的图像中,将这个问题推广到“像素中可感知的最大阴影数量是多少?”答案是很少,这表明您可以仅测试几个可感知的重要光源的可见性,而无需查询所有光源的可见性。但是,有一条重要警告,即这组重要光源随像素而变化。所有光源都可能会在某处投射重要阴影,这意味着,采用光栅化时,我们仍需要所有光源的阴影贴图。

然而,光线追踪器可以跟踪每个像素的唯一阴影光线。这样一来,问题就演变为“需要哪些阴影查询,以及如何加以识别?”,对于大多数数值积分来说,“使用哪些采样”的答案通常是“使用好的重要性采样。”

重要性重采样

为得到好的重要性采样,我们创造了名为重(chóng)采样重要性采样 (RIS) 技术,由 Talbot et al 最先提出。RIS 提升了样本质量,就像降噪器提升了画质一样。ReSTIR 引入的时空重用突出了这一优势,让相邻像素和先前帧能够有效地指导去何处选择质量更好的阴影光线。这使得成本低廉、易于定义的采样分布适合用作快速 GPU 执行的输入,实现了 RIS 和 ReSTIR 对质量的提升。

长期以来,过滤所依据的便是观察附近像素是否具有相似颜色。时间抗锯齿、图像去噪和放大都使用此观察来帮助填补缺失的细节。重要性重采样技术让此观察更进一步,例如,附近的像素应该使用相似光源样本。实际上,ReSTIR 筛选采样分布(在照明之前)以选择高质量的阴影光线。这大大减少了所需的光线预算。

从数学的角度来看,重采样技术以开发者控制的任意方式重构了光照方程。您可以使用此控制方式来对计算进行重新排序,降低成本高昂的操作(如光线跟踪)的发生频率。

您还可以将此控制方式用于其他方面,例如重新排序计算,以减少整个照明过程中的访存不一致和代码分支的情况。诸如 ReSTIR 的重采样的一个具有吸引力的特性是它在复杂程度波动较大的场景中使用恒定数量的光源样本,提供了出色的可扩展性。然而,代码和访存分支也会在复杂性不断增加的同时导致成本攀升,例如,随驻留在 L1、L2 或全局内存中光源的变化而变化。RTXDI 引入了额外的重采样来重新排序计算,可在光源类型和数量起伏较大的场景中令照明成本保持近乎不变。

集成注意事项

由于 RTXDI 充当质量放大器,改善了选定的阴影光线,因此可以通过各种方式集成到引擎中。

在简单的形式中,RTXDI 取代了引擎的直接照明系统,包括与剔除和识别重要光源、阴影贴图和环境光遮蔽相关的所有成本。在设计方面,其可以自然地将样本局限到可见光源,并提供面光源投射的具有接触硬化的软阴影、点光源和平行光的硬阴影以及大型半球光源的环境光遮蔽。

当然,它可以在现有引擎功能的基础上增加可扩展性。例如,给定一个大场景和一组潜在可见光源,RTXDI 可以只从已知可见的光源中选择阴影光线。就质量而言,这通常要比标准的 RTXDI 更加出色,但会继承了任何底层数据结构的限制。

您还可以控制利用哪些计算来改进采样。例如,我们的原型使用完整材质模型,以便从附近像素中获得效果出色的复用。然而,在某些情况下,进行完整材质的估值会导致开销过高,例如多层或复合模型的情况。这时,可以使用近似的简单材质来驱动重采样。

结束语

RTXDI 封装了一个简单、稳定且功能强大的时空重要性重采样实现,可支持含有大量光源的复杂、动态照明。它对您的引擎限制较小,既可以选择替换现有照明解决方案,也可以在现有方案的基础上进行构建。

这种光源采样的统计方法消除了传统光栅引擎中的诸多限制。艺术决策不应再围绕有限的一组十几个或更少的光源开展。所有光源都应得到平等对待!

有关更多信息,请参阅以下资源:

 

Tags