【GDC 2024】Raytracing in Snowdrop - An Optimized Lighting Architecture
来源:D:\迅雷下载\Graphics Materials\GDC 2024 - Raytracing in Snowdrop - An Optimized Lighting Architecture.pdf 提取时间:2026-05-15 12:24:34
Slide 1

📌 要点汇总
- (无内容):此幻灯片无演讲内容
大家早上好, 我是 Quentin Kuenlin,Massive Entertainment 的高级渲染程序员 今天,我将向您展示我们的光线追踪管道,因为它被用于每个 《阿凡达:潘多拉边境》的控制台和质量设置
Slide 2

📌 要点汇总
- (无内容):此幻灯片无演讲内容
2
Slide 3

📌 要点汇总
- (无内容):此幻灯片无演讲内容
让我们首先快速浏览一下我们管道的主要构建模块
Slide 4

📌 要点汇总
- LOD设置:光线追踪世界对象使用低LOD(LOD1/LOD2),降低细节复杂度
- 材质简化:网格仅采用无纹理的单一材质,未涉及复杂材质表现
- Alpha对象处理:树叶等Alpha测试对象通过基于Alpha值的抖动纹理
让我们从光线追踪世界开始。 > rt 世界中的对象使用比栅格化世界更低的 LOD,通常是 LOD1 或 2. > 我们每个网格只有一种简单的材质,没有纹理 > Alpha 测试对象,例如树叶,使用基于 Alpha 的简单抖动 纹理覆盖。 > 地形是单独进行光线行进的并且可以使用纹理,因此您可以看到 示例图像上的纹理 > 我不会详细介绍这一点,请参阅 Oleksandr Koshlo 的演示 本周晚些时候
Slide 5

漫射照明示例 5
我们拥有的第一个光线追踪功能是光线追踪全局照明 > 我们使用每像素光线追踪,使用四分之一/半/全分辨率,具体取决于 质量设置。 > rt gi 的整体管道由初始屏幕空间跟踪组成, > 如果屏幕空间失败,则进行“世界”空间跟踪, > 最后,如果世界空间跟踪失败,我们有一个轻量级缓存回退
Slide 6

📌 要点汇总
- 光线追踪反射:支持每像素追踪,分辨率根据质量设置调整(四分之一/半/全)。
- 可变混合分辨率:图像不同区域可采用不同分辨率进行光线追踪。
- 反射层数限制:最多支持两层反射,结合屏幕空间与世界空间追踪。
- 分阶段追踪流程:初始屏幕空间追踪→世界空间追踪→轻缓存后备方案。
镜面照明示例 6
我们拥有的第二个光线追踪功能是光线追踪反射 > 我们还使用每像素光线追踪,使用四分之一/半/全分辨率,具体取决于 关于质量设置。 > 此外,rt 反射使用可变混合分辨率,这意味着不同的 图像的一部分可以以不同的分辨率进行追踪 > 我们还支持最多两个反射层 > 与 rtgi 类似,我们有一个初始屏幕空间跟踪, > 随后进行世界空间追踪, > 最后是轻缓存的后备方案
Slide 7

📌 要点汇总
- 级联结构:采用4级联(32x32x8)存储多类型光照信息
- 数据存储:包含余弦加权辐照度、粗糙光缓存、平均灯光及采样深度
- 可视化示例:通过视频展示探针系统在潘多拉世界的渲染效果
探针光缓存示例 7
最后,我们有一个用于各种目的的光线追踪探针系统 > 我们使用 4 个级联,每个级联 32x32x8 我们在其中存储不同的信息,包括 > 余弦加权辐照度 > 更粗糙的光缓存 > 完全平均的灯光 > 用于探头采样的深度 在详细介绍这一切之前,我准备了一个小视频来展示 美丽的潘多拉世界
Slide 8

📌 要点汇总
- (无内容):此幻灯片无演讲内容
8
Slide 9

📌 要点汇总
- (无内容):此幻灯片无演讲内容
现在让我们更详细地了解探针系统的工作原理
Slide 10

📌 要点汇总
- 灯光缓存:作为光线追踪后备,缩短光线射出时间
- 平均光存储:用于雾效果,提升场景渲染效率
- 延迟照明技术:优化探针光照计算流程
- Gbuffer缓存:实现探针跟踪与独立点亮分离
- RTXGI扩展:基于GDC 2019技术,新增功能增强渲染性能
我们的探针系统基于 GDC 2019 演示文稿“Dynamic Diffuse Global Morgan McGuire 的《Illumination》,最常被称为 RTXGI 除了该演示文稿中描述的内容之外,我们还添加了一些功能: + 首先,我们添加了一个灯光缓存,用作光线追踪的后备,使我们能够 射出相对较短的光线 + 其次,我们存储每个探头的平均光,主要用于 雾 + 我们对探头使用延迟照明 + 我们将探针跟踪结果缓存到探针 Gbuffer 中,这样我们就可以跟踪和 独立点亮探头
Slide 11

以下是探针更新管道的快速概述。我将详细介绍每个步骤 详细信息,除了最后一项。 探头重新定位是一种将探头稍微移动以将其推离的选项。 物体表面,或将它们从物体中取出。它并没有带来任何显着的好处 阿凡达所以没有被使用。有关更多详细信息,请查看 Nvidia 的 RTXGI
Slide 12

📌 要点汇总
- 级联位置独立更新:每个级联位置使用独立参数进行更新,确保灵活性。
- 初始基于相机位置:级联位置的初始设置依赖于相机的当前位置。
- 向前对齐选项:允许级联位置向前移动以优化布局。
- 地形限制功能:可选限制级联范围以包含地形,减少探测
管道的第一步是更新 cpu 上的级联位置 > 每个级联位置都用自己的参数独立更新 > 级联位置最初基于相机位置 > 然后可以使用向前对齐选项向前移动。 > 可选地,级联可以被限制为包括地形 > 在第二个级联中,三分之一被“浪费”在地形下,所以我们可以强制 级联向上移动,以免浪费地形下方的探测器
Slide 13

📌 要点汇总
- (无内容):此幻灯片无演讲内容
13
Slide 14

现在我们知道级联在哪里,我们可以选择要更新的探针 我们每帧的更新预算是 1024 个探针 >如果级联移动,将选择新的探头进行更新 >各种事情都会触发一些探测器失效,例如物体移动 场景或一天中的时间发生变化。如果我们有任何无效的探测器,我们将 在新探测之后优先更新那些。 >如果还有预算,现有探头将被动更新 当我们缓存跟踪结果时,可以独立地跟踪和点亮探针 不同的框架 一些探头完全回溯并点亮(〜15%〜162个探头,如果有完整的预算) 其余探头仅重新点燃(~85%~862 个探头)
Slide 15

对于每个探针,我们在其周围均匀发送 400 条光线 > 迹线范围设置为下一个级联的探头间距的 2 倍,因此这意味着 Cascade 3 中的探测器将发射 16m 射线 >如果我们击中某物,我们会记录击中点的距离、法线和材质 >然后我们检查级联阴影贴图以查看命中点是否在阴影中。如果是的话 不,我们将追踪一条朝向太阳的光线。 >最后,所有这些数据都保存到探针gbuffer中
Slide 16

📌 要点汇总
- 探针追踪:一次追踪后可随时进行光照计算,提升后续帧效率
- 光线追踪处理:未命中采样天空纹理或轻缓存体积,命中则使用探针gbuffer信息点亮
- 简化BSDF计算:排除复杂材质(如头发、布料),仅计算直射光与分析光
- BVH加速照明:通过BVH快速获取世界任意位置灯光信息,优化计算性能
- 间接照明:最终使用另一探针对命中点进行间接光照计算,增强画面真实感
一旦探针被追踪一次,我们就可以随时进行光照计算 后续帧 > 如果光线追踪未命中,> 我们将采样天空纹理以获取更大的纹理 级联,> 或对较小级联的轻缓存体积进行采样 >如果我们命中,>我们将使用探针 gbuffer 信息点亮命中点。 >我们使用简化的 bsdf 进行所有照明计算,因此没有诸如 如头发、布料、清漆…… >我们计算来自太阳的直射光,>加上分析光。我们正在使用 BVH 可快速获取世界任何地方的相关灯光。 > 最后,我们使用另一个探针间接照亮生命点。
Slide 17

📌 要点汇总
- RTGI卷:平均400条光线结果,用于间接照明与前向渲染
- Light Cache:非平均RTGI版本,作为光线追踪回退缓存
- **八面体映射
我们没有直接使用 400 条光线的照明结果,但我们正在平均 这些结果分为不同的卷。 RTGI 卷与 RTXGI 演示和存储中描述的类似 余弦加权辐照度。主要用于照明间接命中时,以及 前向渲染对象。 Light Cache是RTGI体积不太平均的版本,主要用作缓存 追踪光线时的回退。 深度用于检查探头采样时的可见性。 平均+有效体积主要用于雾和云渲染。 RTGI、Light Cache 和 Depth 使用八面体映射进行存储。
Slide 18

📌 要点汇总
- 采样探针流程:采样过程类似RTXGI演示,需参考其细节实现
- 周围8探针定位:确定采样点周围8个探针位置并循环处理
- 权重计算参数:基于距离、角度、可见度三要素计算探针权重
- 切比雪夫不等式应用:用于估计采样误差范围及不确定性分析
现在我们有了探针,我们可以对它们进行采样。 采样探针的过程与 RTXGI 演示类似,因此我建议您参考该演示 细节。 找出采样位置周围有哪 8 个探头 循环它们并根据距离、角度、可见度计算权重 切比雪夫不等式
Slide 19

📌 要点汇总
- 平均体积存储:使用3D纹理存储简化版本,但无效探测器会导致暗光泄漏
- 无效探测器问题:内部或地形下探测器标记为无效,灯光全黑引发采样误差
- 有效性纹理采样:通过1/0值区分有效/无效探测器,避免无效数据干扰计算
- 除法优化方案:平均值与有效性纹理结合,直接输出有效探头的平均光照结果
对于平均体积,我们可以使用更简单的版本,因为它存储在 3D 中 纹理。 但是,位于物体内部或地形下方的探测器被标记为无效 他们的灯光将是全黑的。如果我们这样做,这可能会导致暗光泄漏 仅对平均 3D 纹理进行采样。 为了解决这个问题,我们还对有效性纹理进行采样,如果探测器有效,则存储 1,或者 如果无效则为 0。 平均/有效性除法返回平均光,无需无效探头
Slide 20

以下是我们在《阿凡达》中使用的一些值。
Slide 21

这是直接在 gbuffer 上使用时 RTGI 卷的调试视图。
Slide 22

如果我们只使用探针而不是每个探针,这就是最终渲染的图像 像素光线追踪。
Slide 23

现在我们已经有了一个可以工作的探针系统,我们可以讨论每像素光线追踪 地理标志
Slide 24

我们的实现最初基于 GDC 2019 演示文稿“探索射线 《地铁:离去》中追踪未来”。 > 根据质量,每像素 gi 以四分之一、一半或全分辨率进行追踪 设置。对于《阿凡达》,控制台使用的是四分之一分辨率。 整体流程如下: > 我们从初始屏幕空间追踪开始 > 如果屏幕空间追踪失败,我们继续进行世界空间追踪 > 如果后者失败,我们将使用探针缓存 > 光结果被编码为球谐函数 > 然后使用循环模糊方法进行去噪 > 最后,如果以四分之一或一半分辨率渲染,结果会放大
Slide 25

📌 要点汇总
- 余弦加权半球采样:用于光线追踪GI的光线生成,提高采样效率
- 非完全不透明表面处理:通过随机翻转光线方向模拟透射效果
- 射线范围计算:根据探针间距和级联信息确定射线最大范围
光线追踪 GI 的光线生成非常简单,我们只需使用余弦加权半球对随机方向进行采样 分布。 > 如果表面不是完全不透明,则随机将光线翻转到另一个 表面的一侧。 > 射线范围基于可用的最高级联中的探头间距,其中 我们启动射线。 因此,如果光线从最细级联开始,则光线范围将为 2x2m=4m。
Slide 26

现在我们有了光线,我们可以开始屏幕空间追踪。 > 如果追踪距离大于光线范围,我们就会错过,所以我们将 能够在点亮时对探针缓存进行采样,有效地绕过任何“真实” 光线追踪。 > 如果光线被阻挡或离开屏幕空间,我们会检查有多少光线 它已经追踪到的范围,>如果它大于某个阈值,我们也认为射线 作为未命中,将直接对探针缓存进行采样。 > 如果不是,我们将该像素添加到 进行光线追踪 > 如果命中,我们将对 Gbuffer 进行采样以获取所有材质数据。 > 如果我们击中的像素是自发光的,我们会检查其自发光亮度。 > 如果大于 某个阈值,我们可能不想直接使用它,而是检查什么发射 我们在 rt 世界中拥有的价值并使用它。提醒一下 rt 世界使用 平均材料,因此物体上的明亮发射点 qets 在整个物体上平均 网格代替。 > 如果命中不够发光或不够暗淡,我们将按原样使用它 照明。
Slide 27

📌 要点汇总
- 屏幕空间与直接跟踪结合:ss跟踪命中发射材质时,继续跟踪以获取rt世界材质数据。
- 未命中条件判断:ss未命中且距离<0.01时重置射线,否则从屏幕空间断
光线跟踪是间接调度屏幕空间跟踪结果的。 > 如果 ss 跟踪导致发射命中,我们将跟踪该命中以获得 rt 生命值的世界材质。 > 如果ss未命中距离小于0.01,我们从头开始射线 > 否则,我们从屏幕空间停止的地方开始光线。 > 如果发生命中,如果 ss 命中是发射性的且 rt 命中不使用 ss 命中。 > 否则使用 rt hit 结果。 > 如果我们错过了,我们将在照明时简单地回退到灯光缓存。
Slide 28

说到照明,它分两次完成。第一个会错过 照明,第二个将处理击中。我们分两次完成,因为击球 部分比未命中部分复杂得多,因此单独进行意味着我们得到 更好地利用 GPU 线程。 > 因此,如果我们有一个未命中的情况,我们首先检查射线的终点是否在任何级联中。 > 如果是,我们使用射线方向作为采样方向对探针缓存进行采样。 > 如果不在级联范围内,我们只需对天空盒进行采样。 > 然后将最终的照明结果编码为球谐函数,并且所有数据 去噪所需的信息也被写入必要的纹理中。 > 在击中的 cade 中,我们只需将该像素转发到光击着色器。
Slide 29

📌 要点汇总
- 重新投影采样:将击中点投影到前一帧,采样历史照明以降低计算成本。
- 光照处理逻辑:根据投影结果区分使用太阳光+CSM阴影或探针+点光源的间接照明方案。
- 简化BSDF计算:探针照明采用简化的BSDF模型以提高效率。
- 萤火虫抑制:通过限制发射亮度减少光击中产生的噪点(萤火虫)。
- 输出去噪数据:最终输出光照结果
对于光击中着色器,我们要做的第一件事是将击中点重新投影到前一个 框架。 > 如果投影点对应于前一帧的像素,我们可以简单地 对之前的框架照明进行采样,这将以更低的成本提供更好的照明 而不是在这里重新计算。 > 否则,我们将用太阳照亮命中点,使用 CSM 获得阴影 信息。 > 然后对探针进行采样以获得间接照明, > 然后使用 点光源。至于探针照明,这里的所有计算都是用简化的 BSDF。 > 最后,我们尝试通过限制发射来减少发射命中产生的萤火虫 每个着色器波内的亮度。 > 然后输出光结果和所有必要的数据以进行去噪。
Slide 30

📌 要点汇总
- 球谐编码:光线追踪GI采用球谐编码技术处理光照信息
- 纹理格式:将数据转换为64位RG_Uint32纹理以提升存储效率
- 编码实现:通过特定函数实现光结果的球谐编码转换逻辑
如前所述,光线追踪 gi 使用球谐编码。我们正在打包 将它们转换成 64 位的 RG_Uint32 纹理。您可以参考下面的函数 看看我们如何编码光结果。
Slide 31

📌 要点汇总
- 光线追踪GI原理:通过屏幕空间追踪与探针回退技术实现全局光照效果
- 屏幕空间局限性:在屏幕空间追踪失效区域可能出现过暗的渲染结果
- 技术示例场景:以具体场景演示光线追踪GI的实现过程与潜在
你并不知道光线追踪 GI 是如何工作的,让我们看一些例子。 我们就从这个场景开始吧。这里我们只使用屏幕空间追踪, 探针的回退。 >在这里我们可以看到,在屏幕空间失败的地方,我们可以得到一些过暗的东西 结果。
Slide 32

📌 要点汇总
- 自交集问题:RT世界中悬崖LOD生成大量自交集,影响视觉效果
- 微小物体缺失:地表细节(如草)在RT世界中未呈现,导致细节丢失
- 轨迹局限性:仅依赖世界空间轨迹无法解决复杂场景的几何问题
然而,在仅使用世界空间轨迹的情况下,我们可以看到一些更大的 由于自交集导致的问题。 >这里,RT世界中使用的悬崖LOD创建了很多自交集。 >另一个问题是地面上的微小物体,例如草,不存在于 RT 世界,所以我们失去了所有这些细节。
Slide 33

当同时使用屏幕和世界空间追踪时,我们可以获得所有漂亮的细节 屏幕空间,而且我们还从世界空间获得正确的照明。 但更重要的是,同时使用屏幕空间跟踪和回退 对于探测器来说,我们能够大量减少实际光线追踪的数量。 对于这个特定的场景,只有 29% 的光线需要光线追踪,这意味着我们 每 14 个像素追踪一条光线 – 这取决于场景,某些场景需要更多 或更少的硬件射线
Slide 34

我们简单说一下去噪。 在 Snowdrop 中,我们有 4 种不同的漫反射降噪器可用。 >TWD是最便宜的,但质量较差。在许多简单的情况下效果很好,例如 与外部一样,但在更复杂的场景中留下了很多噪音 >MSD 是最新的一款,并且是随 Avatar 一起提供的。基于循环模糊, 几乎与 TWD 一样快,但噪音降低更多,但代价是更多 模糊。 >我们还拥有 NRD 的 ReBLUR 和 >ReLAX,它们在 质量好,但也比较贵。
Slide 35

这是在控制台质量设置下去噪之前光线追踪 GI 的示例
Slide 36

这是使用 MSD 去噪后的结果
Slide 37

现在我们有了最终的去噪光线追踪 gi,我们可以将其应用到最终图像。 >我们没有直接应用它,而是使用球形 谐波创建一个光源,用于我们拥有的完整 BSDF。 >可以使用以下方法提取光发射颜色和强度及其方向 公式在这里。
Slide 38

📌 要点汇总
- (无内容):此幻灯片无演讲内容
38
Slide 39

📌 要点汇总
- (无内容):此幻灯片无演讲内容
39
Slide 40

📌 要点汇总
- (无内容):此幻灯片无演讲内容
现在我们来谈谈光线追踪反射。
Slide 41

📌 要点汇总
- 重要性采样:使用GGX重要性采样替代余弦加权半球采样。
- 混合分辨率跟踪:屏幕不同区域采用差异化的输入分辨率进行光线追踪。
- 射线长度控制:基于材质粗糙度而非固定探头间距计算射线长度。
- 反射层级限制:最多支持两层反射(Gbuffer与水/清漆材质分离)。
- 照明解调流程:在去噪处理前对照明结果进行解调处理。
光线追踪反射管道与光线追踪 gi 几乎完全相同。它是 根据设置,还可以使用四分之一/一半或全分辨率。再次,控制台 使用四分之一分辨率。我不会再讲完整的流程,只讲关键的部分 差异。 > 显然我们使用的是 GGX 重要性采样而不是余弦加权 半球一 > 我们在“输入”分辨率之上使用混合变量分辨率跟踪。 这意味着屏幕的不同部分使用不同的分辨率进行追踪。 > 射线长度基于粗糙度而不是仅基于探头间距 > 我们最多可以有两个反射层,一个用于从 Gbuffer 反射,一个用于反射 第二个来自水和/或清漆。 > 我们在去噪之前解调照明结果。
Slide 42

光线的生成又非常简单: > 我们使用 GGX 分布对光线方向进行采样 > 光线范围基于粗糙度;我们在这里使用一点噪音来 没有相同粗糙度值的直线切割。这里的值被校准为 对于粗糙度为 0.1 的范围为 50 米,对于粗糙度为 0.7 的范围为 5m
Slide 43

📌 要点汇总
- 优化光线追踪效率:通过调整权重减少低贡献光线的追踪时间
- **权重影响
并非所有反射表面对最终图像都有相同的贡献,所以我们想要 花更少的时间追踪贡献较低的光线 这确实取决于内容,因此需要进行大量调整才能获得最佳结果 以及质量和性能之间的权衡。 但对于《阿凡达》,我们使用了不同权重的混合,基于 Ø亮度 Ø着色器组内的光照差异 Ø 打击距离 Ø 粗糙度 Ø 表面镜面反射率 Ø我们还根据表面法线计算方向值,该值用于决定半分辨率应为哪个方向
Slide 44

📌 要点汇总
- 像素质量计算:通过单个像素质量推导整个瓷砖的理想质量
- 质量混合策略:结合个体质量最大值与平均值,提升前帧质量稳定性
- 质量传递机制:当前帧计算的新质量将作为下一帧的输入参数
一旦计算出单个像素的质量,我们就可以计算出什么是理想的质量 整个瓷砖。 在这里,我们还得到了所有个体质量的最大值和平均值的混合 作为前一帧的质量以获得暂时稳定的结果。 新的质量将在下一帧中使用
Slide 45

📌 要点汇总
- 混合分辨率:不同颜色代表不同分辨率层级(全、半、四分之一、1/16)。
- 追踪质量差异:浅灰色与蓝色同为四分之一分辨率,但浅灰色迹线质量较低。
- 方向特性:绿色半分辨率分垂直和水平两种方向。
- 颜色与精度:红色全分辨率精度最高,深灰色1/16分辨率精度最低。
- 可视化示例:通过颜色区分分辨率层级,直观展示追踪效果差异。
这是混合分辨率分布的示例。 红色瓷砖将以全分辨率追踪,在这里我们可以看到水主要是红色的。 绿色是一半分辨率,具有两个方向:垂直或水平一半。 蓝色是四分之一分辨率 浅灰色也是四分之一分辨率,但迹线质量较低。 深灰色为 1/16 分辨率
Slide 46

📌 要点汇总
- 解调与降噪对象:光线追踪反射结果在去噪前解调,以降噪到达物体表面的光,
光线追踪反射结果在去噪之前被解调,因为我们想要 对到达物体表面的光进行降噪,而不是对物体表面的光进行降噪 反射向相机。 有关这方面的更多信息,我建议您参阅“光线追踪宝石”一章 32,以及 Eric 的“Sampling the GGX Distribution of Visible Normals”论文 海茨。
Slide 47

📌 要点汇总
- 屏幕空间跟踪失效:在对象后方时无法正确追踪,导致不连续性或错误结果
- 薄物体误判问题:屏幕空间跟踪可能将薄物体错误识别为撞击对象
- 局限性:屏幕空间方法无法有效处理遮挡和复杂反射场景
最后,这是光线追踪反射的一些示例。 让我们首先查看仅跟踪屏幕空间的结果。 > 在这里我们可以看到,屏幕空间跟踪在对象后面时会失败 并可能导致明显的不连续性或错误的结果 > 您还可以看到屏幕空间跟踪将考虑传递到后面的问题 较薄的物体作为撞击。
Slide 48

当仅追踪世界空间时, > 你显然可以看到低 rt 世界质量 然而,光线正确地穿过薄物体后面,并且没有明显的不连续性 是可见的
Slide 49

📌 要点汇总
- SS与WS结合:SS提供细节但薄物体追踪无效,WS结果存在不连续性
- 光线追踪效率:仅需
当同时使用 ss 和 ws 跟踪时,我们从 ss 获得所有不错的细节,但也没有 对薄物体的打击无效。 然而,我们仍然可以得到 ss 结果和 ws 结果之间的一些不连续性
在这个场景中,只有大约 35% 的像素需要光线追踪,这可以给我们带来很大的帮助。 性能改进。
Slide 50

我之前提到过 2 层反射,所以这里是一个示例 喜欢。 这里有第一层,位于 GBuffer 中
Slide 51

📌 要点汇总
- 分层结构:第二层含水与透明涂层,分层处理提升效果
- **成本
这里有第二层,每层都有水,再加上透明涂层。 这两层分别进行追踪和去噪,有效地使成本增加了一倍 rt 反射。因此,这仅适用于 PC 上的最高质量设置。
Slide 52

📌 要点汇总
- 漫反射降噪器:Snowdrop引擎提供多种降噪器用于漫
至于漫反射,我们在 Snowdrop 中有几种可用的降噪器。除了 4 已经提到,我们还有 AMD Fidelity FX Specular Denoiser。就而言 质量/速度,它位于 TWD 和 MSD 之间。
Slide 53

📌 要点汇总
- 去噪前rt反射示例:展示左上角存在混合创建的方形工件
- 分辨率范围:从1/
这是去噪之前的 rt 反射的示例。 您可以在左上角清楚地看到一些由混合创建的方形工件 分辨率从 1/16 分辨率到全分辨率
Slide 54

并且去噪后
Slide 55

📌 要点汇总
- 高粗糙度处理:粗糙度≥0.9时采用光线追踪GI SH替代rt反射
- 粗糙度阈值:粗糙度>0.7时对rt反射与rt GI结果进行lerp混合
- 解调重应用:需重新应用解调过程以实现rt反射在最终图像中的呈现
要将 rt 反射应用于最终图像,我们需要重新应用解调。 对于粗糙度为 0.9 或更高的表面,我们使用光线追踪 GI SH 代替,并且 粗糙度高于 0.7 时,我们会在 rt 反射和 rt gi 结果之间进行 lerp。
Slide 56

📌 要点汇总
- (无内容):此幻灯片无演讲内容
56
Slide 57

📌 要点汇总
- (无内容):此幻灯片无演讲内容
57
Slide 58

因此,了解光线追踪管道的工作原理固然很好,但我们真的可以在所有情况下使用它吗? 控制台?我们来谈谈性能
Slide 59

首先,这是探针更新的 GPU 时序。 探针更新是在计算队列上异步完成的,因此它的一些成本 是隐藏的,但这里是不同部分的原始时间。 您可以看到两个 Xbox 都有类似的成本重新分配,花费了一半的时间 在光线追踪上。另一方面,RTX 4080 具有更多的光线追踪功能 表演,大部分时间都花在灯光上。
Slide 60

📌 要点汇总
- 四分之一分辨率追踪:通过降低追踪分辨率,节省约34%追踪时间,减少计算负载。
- 屏幕空间跟踪优化:添加屏幕空间跟踪技术,
上面讲了一些优化,但是一些优化的实际影响是什么? 那些? 我们来看看。在这里我们可以看到追踪、照明和去噪的时间 Xbox Series X 上 1440p 的 gi 和反射。基线数无 任何优化;无需使用任何探头、屏幕即可追踪无限长度的光线 空间追踪,……唯一的优化是我们以四分之一分辨率进行追踪。 > 将屏幕空间跟踪添加到管道中,我们可以看到我们节省了大约 34% 以及 27% 的追踪时间 Ø向探针缓存添加回退,从而大大减少光线长度,我们将跟踪时间减少一半,并且还减少了照明通道 位,因为更多的光线将回落到探测器上。 Ø接下来,分两次进行照明可以减少大约 10% 的部分 Ø最后,添加镜面反射的混合分辨率,我们又全面节省了 28%。 有了所有这些,我们将漫反射和镜面反射的时间减少了一半,从 15 毫秒降至 7 毫秒
Slide 61

📌 要点汇总
- Xbox Series S性能优势:XSS因有限光线追踪和简化照明,在特定场景下超越其他系列
- 光线追踪发射检查限制:XSS仅执行少量WS光线追踪,减少计算需求
- 照明简化优化:XSS未使用点光源,避免二次照明计算,提升效率
以下是 Xbox 和 RTX 4080 的一些性能数据,在 潘多拉星球上的各种不同位置。 在这里,您可以看到 Xbox 系列 S 奇怪地超越了 WS 中的其他两个系列 追踪。这仅仅是因为对于XSS,我们只做WS 用于前面讨论的发射检查的光线追踪,因此只有少量的 WS 需要射线。 XSS 的照明也得到了简化,因为它不使用任何点光源;这意味着 不需要分两次进行照明。
Slide 62

最后,这里有一些 rt 反射的数字。 这里 XSS 还有一些额外的限制:我们只进行 WS 跟踪 对于发射检查和水面,混合分辨率仅限于 分辨率的一半为最大值。
Slide 63

我向您展示的所有内容都是我们随《阿凡达》一起提供的。对于那场比赛来说, 在 95% 的情况下效果很好,但仍然存在一些局限性。
Slide 64

不连续性示例 屏幕空间和之间 光线追踪
第一个是明显的低分辨率 RT 世界。虽然这不会造成任何 rt gi 的问题,因为我们不需要高频细节,这是低频的问题 粗糙度反射,例如镜子和静水。 根据视角的不同,我们可以清楚地看到两者之间的不连续性 屏幕空间和RT世界 因此,艺术家需要避免此类反射表面。
Slide 65

走廊不的例子 与探头对齐(顶部) 以及(下)
其他一些问题来自探针系统,其形式如下: 对关卡设计师的限制。 Ø第一个是封闭间距不能小于探头间距 Ø第二个是长走廊需要与探头对齐,要么完全轴线对齐,要么成45度。 Ø第三个是关于壁厚。这些需要足够厚,以免由于解决切比雪夫不等式的精度低而导致任何泄漏 能见度。 最后一点是室内空间不能太大,尤其是垂直方向。事实上,大的内部空间可能会导致我们不得不使用低密度的级联,这可能会导致泄漏。
Slide 66

这是一个内部太高最终需要采样的示例 上升时级联1。
Slide 67

📌 要点汇总
- (无内容):此幻灯片无演讲内容
那么,我们下一步该做什么?这里我不会讲太多细节,只是概述一下 我们正在调查
Slide 68

📌 要点汇总
- 八叉树方法:替代级联方式,优化探针布局策略
- 探头集中探测:聚焦关键区域,避免冗余部署
- 适应不同关卡布局:八叉树结构兼容多类型场景规模
- 避免不重要区域:智能筛选有效探测范围
- 提升探测效率:动态调整
自适应探头示例 探头间距:4m 外部,0.25m 探头 里面
首先,我们一直在寻找更好的放置探针的方法,旨在解决 我刚才谈到的大部分问题。 我们最终尝试了八叉树方法来代替级联。 有了它,我们可以>避免将探针放置在不重要的地方,并将探针集中在 探测附近的物体。 Ø八叉树更适合任何类型的关卡布局和大小
Slide 69

📌 要点汇总
- 启发式删除策略:通过距离相机、视
以下是八叉树更新管道的概述。这替换了更新的部分 在CPU上完成级联,但实际的探针更新没有改变。 Ø我们首先删除不再有用的单元格,这是通过一些不同的启发式方法完成的,例如到相机的距离,是否在视口中,…… Ø然后我们删除不再使用的探针,因为不再与细胞相关联 Ø然后我们选择要细分的新单元格。我们有不同的方法来做到这一点。一种方法是查看深度缓冲区并确定我们应该使用哪个八叉树深度 有。另一种是根据要求。在照明过程中,当光线 对探针进行采样,如果那些期望八叉树位于某个深度,但它是 不是,他们可以请求为下一帧细分相关单元 Ø最后我们选择要更新的探针。对于级联,新探针优先。然后其余的都是随机选择的
Slide 70

📌 要点汇总
- (无内容):此幻灯片无演讲内容
70
Slide 71

📌 要点汇总
- (无内容):此幻灯片无演讲内容
71
Slide 72

📌 要点汇总
- 泄漏问题:薄壁导致室内外光线泄漏,需通过过滤探头限制采样范围
- 过滤探头:新增机制仅采样与光线实际位置对应的区域,避免无效计算
- 门户BVH:引入轻量级BVH结构,追踪光线是否从室内出发,判断是否离开房间
- 成本优化:新BVH结构计算开销极低,对性能影响可忽略
正如我们所见,室内和室外之间可能会发生泄漏,特别是因为 薄壁。 >所以我们增加了一种在室外和室内之间过滤探头的方式,只采样 对应于光线所在位置的那个 >如果房间有门或窗,我们需要知道光线是否离开了房间 房间。为此,我们添加了一个新的门户 BVH,我们可以跟踪每条光线 开始室内。这是一个相当轻的 BVH,因此成本可以忽略不计。
Slide 73

📌 要点汇总
-
顶部:不完整结果的示例 由于均匀光线 分布 底部:已解决不完整的结果 具有自适应光线分布
因为我们为每个探头均匀地发送光线, >由于某些探针捕捉到微小的发射物体,我们可能会得到不完整的结果问题 而其他人可能不会。 >因此,为了解决这个问题,我们正在尝试更巧妙地将光线发送到重要的地方。 这似乎解决了斑点问题,但也产生了更多的对比度。
Slide 74

📌 要点汇总
- (无内容):此幻灯片无演讲内容
74
Slide 75

📌 要点汇总
- (无内容):此幻灯片无演讲内容
75