【AI中字】路径追踪的未来 | 最佳实践、优化与未来标准
_Aminos_
2026年04月02日 18:37

以下是该文档的详细总结,内容涵盖 NVIDIA 在 GDC 上关于路径追踪未来发展的演讲,分为两个主要部分:Martin 介绍核心硬件与 API 技术,Carmelo 提供从零构建路径追踪器的实践指南。

---

## 一、演讲概述

- **演讲者**:Martin(NVIDIA 光线追踪团队负责人)、Carmelo Rodriguez(NVIDIA DevTech 团队)

- **主题**:路径追踪的最佳实践、优化方法与未来标准

- **背景**:自 2018 年 RTX 发布以来,已有超过 200 款游戏支持光线追踪,约 15 款支持路径追踪。未来将有更多大作采用。

---

## 二、核心技术与 API 标准(Martin 部分)

### 2.1 DXR 1.2 新特性(Microsoft 近期发布)

两个对路径追踪性能至关重要的硬件加速特性:

#### (1)Opacity Micromaps (OMM)

- 硬件加速的 Alpha 测试,用于光线追踪

- 减少 any hit shader 执行的开销

#### (2)Shader Execution Reordering (SER)

- 解决路径追踪中固有的线程发散问题

- 通过重新组织物理线程,提高相干性,减少发散

- 性能提升范围:20%~30%(低端)到 3 倍(路径追踪场景)

- 已在所有路径追踪游戏中使用(通过 NV API)

- **感谢 Microsoft 标准化合作**

### 2.2 SER 深入解析

#### 基本 API 模式

- 传统 `TraceRay` 被拆分为三个调用:

1. `TraceRay` → 存储结果到 Hit Object

2. `ReorderThread` → 重新组织线程

3. `Invoke` → 触发 closest hit / miss shader

- 插入 `ReorderThread` 后,同一 warp 内的线程更可能具有相似意图,提高后续 shading 效率

#### 常见误区澄清

- **SER 与 Ray Query 可以共存**:Ray Query 可用于 shadow rays 等简单可见性测试,然后转换为 Hit Object 并调用 reorder。前提是 reorder 必须在 raygen shader 中(compute shader 不支持)。

- **Reorder Hints**:应用程序通过 hint(编码在 uint 中)向 reorder 实现传递意图。hint 与 hit object 信息混合成排序键。

- **最重要的 hint**:将循环退出条件编码为 hint,使要退出的 warp 一致退出,留在循环内的 warp 保持相干。这是 SER 优化中最简单有效的一条。

- 其他 hint 用途:如材质是否为 emissive、是否有 clear coat 等分支信息。

#### 灵活使用 SER 的三调用分离

- 可以不调用 invoke,而是将 shading 代码内联到 raygen shader 中,减少指令缓存压力。

- 可以将公共光照代码从 closest hit shader 中提取到 raygen shader 中,提高效率。

- 可以仅调用 `ReorderThread`(不带 hit object),只传递 hint,用于任意自定义重排。

#### 进一步学习

- 参考 Louis Bavoil 在《Doom: The Dark Ages》中的案例研究(GDC 演讲,即将上线 YouTube)。

### 2.3 Mega Geometry(巨型几何)

#### 概述

- 一年前引入,彻底改变 BVH 和几何的限制

- 包含两个正交特性:**Clusters** 和 **Partitioned TLAS**

#### (1)Clusters(集群)

- BVH 构建的输入不再是单个三角形列表,而是集群(每个集群约 100~200 个三角形)

- 将 BVH 构建负载降低约 100 倍

- **Templates(模板)**:给定预设拓扑,只需输入顶点即可实例化集群,类似 BVH refit

- 性能:在 RTX 5090 上,构建吞吐量超过 1 TB/秒,相当于每秒构建 300~400 亿个三角形

#### (2)Partitioned TLAS(分区顶层加速结构)

- 解决传统 TLAS 在大量实例下构建成为瓶颈的问题

- 持久化数据结构,支持增量更新

- 应用程序为每个实例分配分区 ID(理想情况下空间重叠少,每分区约几百到上千个实例)

- 仅更新有变化的实例所在分区,大幅降低构建成本

- 支持场景中数百万个对象

#### API 可用性

- 当前通过 NV API 和 Vulkan 扩展提供

- 正在与 Microsoft 合作标准化为 DirectX,WIP 规范已公开(昨日发布),预览版目标夏末,正式版年底

### 2.4 Mega Geometry 应用示例

#### 示例1:UE5 中全光线追踪 Nanite 几何

- Nanite 每帧需要数千次 BVH 构建,高多边形数,传统 API 不可行

#### 示例2:动态细分曲面置换

- 龙模型每个 patch 每帧动态细分和置换,场景数千万三角形,每帧从头构建 BVH

- 使用 cluster templates 实现超快构建

- 示例代码已在 GitHub 上(不含超大资产)

#### 示例3:树叶 LOD 系统(最新工作)

- **场景规模**:6000 万株植物,100 万棵树,200 多种植物,地形 5×5 公里,无流式加载,全部在内存中

- **几何细节**:完全建模到单个松针,无 alpha map 或卡片。大型树木每棵超过 1000 万多边形

- **惊人统计**:若展开为完整 LOD 三角形列表,超过 5 万亿三角形

- **全动态光照**:路径追踪,像素级完美阴影,独特动画(飞船飞过导致树木随风摆动)

- **目标**:面向真实游戏,不仅是技术演示。该技术将用于《巫师 4》(感谢 CD Projekt Red 提供树木资产)

- **开源计划**:今年晚些时候开源,未来几个月发布更多细节

#### 技术实现要点

- 树木由小部件(twigs)实例化组成,每棵树数百到数千个实例

- 挑战:1 百万棵树 × 1000 实例 = 10 亿实例,内存和遍历效率灾难

- 解决方案:LOD 合并实例,最终每棵树一个实例(利用 Partitioned TLAS 支持百万实例)

- 进一步 LOD 使用 **Opacity Micromaps**:将高分辨率几何离线光栅化为自动定位的 OMM 三角形(带 alpha 贴图),将单个 twig 从数千三角形降至几十三角形 + OMM 位图

- OMM 可跨 LOD 复用,同一集群可多次复用,极大节省内存

- 使用四叉树指导 Partitioned TLAS 的分区选择,每分区约 1000 实例。演示中 PTLAS 有 10 万个分区,300 万活跃实例,每帧更新约 8 万个实例

- 地形:动态细分和置换,使用 cluster templates

- 极远处植物 stamp 到地形高度图中,零实例成本

#### 性能数据(WIP,不代表最终游戏)

- 路径追踪使用简单两弹射

- PTLAS 更新约 1 ms

- DLSS RR 用于降噪和超分

- **RTX 5090**:DLSS 质量模式(1440p→4K),80~90 FPS

- **RTX 4070**:1440p 约 60 FPS

- 内存:12GB 显卡可运行,应用内约 5GB 缓冲 + 数据结构,Windows 报告 9GB(含驱动和 DLSS)。PTLAS 约 900MB + scratch

### 2.5 探索性话题:用光线追踪替代光栅化主光线(Primary Rays)

#### 数据点

- 在 RTX 5090 上,仅填充 G-buffer(主光线)需 1~1.5 ms

- Mega Geometry 使得 BVH 能以完整细节构建,不再是瓶颈

#### 潜在收益

- 避免 raster 和 ray tracing 之间的数据重复(如静态物体可只保留 BVH,丢弃输入网格)

- 减少场景遍历两次的开销

- LOD 决策统一

- 可利用上一帧 BVH 进行增量更新

- 降低 CPU 开销(MegaGeo API 完全 GPU 驱动)

- 轻松实现特殊镜头效果(如狙击镜、多屏、曲面屏)

- 消除主光线与次级光线之间的几何不一致(避免低 LOD BVH 导致的阴影偏移、丢失细节)

- 灵活的采样策略(自适应采样、foveated rendering、自定义抗锯齿)

- 非渲染光线(音频、物理、碰撞检测)几乎免费

- 在某些架构上,光线追踪可能比光栅化更快

#### 性能对比测试(Nanite 场景,仅 G-buffer,含 BVH 构建)

- Turing:光栅化快约 2 倍

- 较新架构:差距缩小到亚毫秒级,可考虑是否值得切换

---

## 三、构建现代路径追踪器的实践指南(Carmelo 部分)

### 3.1 总体理念

- 路径追踪不是魔法,由已有组件构成

- 进步是渐进式的,无需一夜之间从光栅化切换到路径追踪

- 可跨硬件扩展(RTX 3060 到 5090)

- 重点:理解复杂度所在和权衡

### 3.2 前置条件(假设已有)

- G-buffer(光栅化或光线追踪均可)

- 屏幕空间环境光遮蔽(SSAO)和反射(SSR),带模糊和 cubemap 后备

- 基础光线追踪支持(BVH 构建、TraceRay、着色器表)

- 时域抗锯齿/超分(最好有 DLSS 或 Ray Reconstruction)

### 3.3 技能树(逐步实现路径追踪)

#### 技能 0:Ray Traced Ambient Occlusion (RTAO)

- 最简单入门,只需 BVH 和 Ray Query(无需着色器表)

- 复用现有 SSAO 的时空累积降噪器

- 学习点:均匀分布 vs. 余弦分布(重要性采样基础)、内联 Ray Query

- 效果对比:GTAO vs. RTAO

#### 技能 1:Ray Traced GI(单弹射)

- 引入着色器表,暴露材质和着色器

- 性能提示:

- 保持 ray payload 小

- 简化材质和光照,避免法线贴图,采样更低 MIP

- 必须使用 SER(GI 光线高度不相干,SER 可提升 40% 性能)

- 透明表面处理技巧:将透明和 opaque 放入同一 G-buffer,对玻璃材质在 GI pass 中直接追踪折射光线,几乎免费获得透明度

#### 技能 2:Ray Traced Reflections

- 复用现有 SSR 代码,替换为真实光线

- 重点实践:BRDF 采样(推荐 Eric Heitz 的可见法线分布论文,有代码示例)

#### 技能 3:随机直接光照(Stochastic Direct Lighting)

- 最简单方法:从所有光源中随机选一个,追踪阴影光线,乘以总光源数(无偏权重)

- 但 100 个光源中只有少数可见,随机选择噪声极大

- 引出重要概念:除以选择概率的权重(无偏估计的基础)

#### 迷你 BOSS:参考路径追踪器

- 基本循环:每弹射进行一次 NEE(从随机光源采样),然后采样 BSDF 确定下一方向,用 throughput 衰减

- 难点:如何选择下一方向?

- 仅用余弦分布 → 丢失镜面反射

- 仅用 BSDF 采样 → 漫反射噪声大

- **解决方案:多重重要性采样(MIS)**:随机选择走镜面路径还是漫反射路径,用逆 PDF 补偿(如 50% 概率则乘 2)

- 结果:累积多帧,获得参考路径追踪器。可与外部工具对比验证正确性。

#### 技能 4:辐射度缓存(Radiance Caching)—— SHaRC

- 用于多弹射 GI 的低成本方案

- 方法:在 GI pass 前,对一小部分像素(如 1/16)追踪多弹射光线,记录到缓存中

- GI pass 时从缓存采样,获得多弹射间接光照,成本远低于全分辨率多弹射

- 同时降低方差(噪声),提高性能

#### 技能 5:将 MIS 带回实时渲染

- 复用参考路径追踪器的 MIS 代码

- 使用单个 raygen shader,每个像素通过 MIS 选择镜面或漫反射路径

- 仅路径选择分支,光线追踪和光照代码共享

- 结果:多弹射间接光照,成本减半(但噪声增加)

- 权衡:更快 vs. 更多噪声,但可通过更多重用(如 SHaRC)补偿

#### 最终 BOSS:Reservoir Sampling(蓄水池采样)

- **核心概念**:每个像素评估多个候选光源的重要性(目标函数),按重要性选一个,追踪阴影光线

- 目标函数平衡性能和准确性:简单点积快但噪声大;包含距离衰减、光强分布、BRDF 等更准但慢

- 示例对比:

- 均匀权重:几乎看不到图像

- 简单点积:开始可辨认

- 包含平方距离衰减、聚光灯衰减、近似光强:清晰可辨,配合 Ray Reconstruction 可获得像素级完美阴影,每像素仅一条光线

- **发射三角形光源**:可作为显式光源采样,但增加复杂度和光源数量(可能数千),降低采样命中率。需在显式采样和 BRDF 采样间权衡。不是所有发射体都需要转为光源,仅大尺寸或动态的。

#### 支线任务:ReSTIR DI 和 ReSTIR PT

- 在像素内、相邻像素、多帧之间进行 reservoir 采样,实现指数级噪声降低

- 参考 NVIDIA RTXDI SDK 和 RTXPT SDK(已发布)

### 3.4 降噪建议

- 不推荐为每个组件单独写降噪器,应快速进入完整路径追踪,使用 Ray Reconstruction 降噪

- 早期给美术团队提供路径追踪工具,便于游戏视觉开发

- 若需自研降噪器,可参考 NVIDIA Real-Time Denoiser Library (NRD)

- 边缘噪声(disocclusion)可通过 NRD 中的自适应方差滤波(Reflex)处理,在时域方差大的区域扩大空间滤波核

---

## 四、问答摘要

1. **BVH 管理的重要性**:Mega Geometry 使 BVH 能容纳完整细节几何,是实时路径追踪的关键进步。

2. **高动态场景(快速移动、disocclusion)的噪声问题**:SHaRC 等缓存技术可在表面出现前预热缓存,帮助解决。

3. **神经网络技术的应用**:Ray Reconstruction、神经辐射缓存、神经着色、神经材质、神经纹理压缩等均可融入路径追踪管线。

4. **主光线追踪中的透明度**:尚未包含在测试中,但统一路径有助于简化透明度处理,性能影响因场景而异。

5. **ReSTIR PT 的边缘噪声**:推荐使用 Ray Reconstruction,或 NRD 中的 Reflex(自适应方差滤波),在边缘处扩大空间滤波核。

---

## 五、总结

- **推荐所有未来路径追踪器使用**:DXR 1.2(OMM + SER)、Mega Geometry(Clusters + Partitioned TLAS)

- **开源 foliage 系统**:今年晚些时候发布,将用于《巫师 4》

- **探索性方向**:主光线追踪替代光栅化,统一几何管线,带来多种潜在收益

- **实践路径**:从 RTAO 开始,逐步添加 GI、反射、MIS、辐射度缓存、reservoir sampling,最终构建工业级实时路径追踪器

---

**演讲结束,感谢听众。**