以下是该文档的详细总结,内容涵盖 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,最终构建工业级实时路径追踪器
---
**演讲结束,感谢听众。**