上一篇我们聊到,路径追踪用蒙特卡洛方法随机采样,能自然产生颜色溢出、软阴影和焦散——但代价是巨大的计算量。电影《冰雪奇缘》一帧用路径追踪渲染数小时,这在游戏里显然不可接受。

游戏要求每秒至少 30 帧,最好是 60 帧。一帧只有 16–33 毫秒的渲染预算。光追凭什么从"数小时一帧"变成"实时可玩"?这背后是三件事:RT Core 硬件加速求交降噪技术补足采样不足、以及 DLSS 等 AI 辅助。缺一不可。

光追为什么那么贵:每条光线都是一场"审问"

先算一笔账。1920×1080 分辨率,约 200 万个像素。如果每个像素只发射 1 条光线,每帧就是 200 万条光线。但路径追踪需要成百上千条光线/像素才能得到干净画面——算下来,每帧需要数亿条光线。

更关键的是 每条光线干了什么。光线从相机出发,需要在场景中找出它最先撞到哪个三角形。暴力做法是遍历所有三角形——如果场景有 100 万个三角形,每条光线要跟 100 万个三角形做求交测试。200 万像素 × 100 万三角形 = 200 万亿次测试,这显然不行。

所以实际用的是 加速结构。最主流的是 BVH(层次包围盒)——把场景中的三角形组织成一棵树状结构,每个节点是一个包围盒(AABB),叶子节点是实际三角形。1 光线从根节点开始,测试是否与包围盒相交:不相交就跳过整个子树,相交则继续深入。这样,每条光线平均只需要测试几十个包围盒和几个三角形,把复杂度从 O(N)O(N) 降到 O(logN)O(\log N)

但即使这样,每条光线还是要经历几十次包围盒测试和几次三角形求交。在纯软件实现中(用通用着色器代码做),每条光线需要 数千条指令 来完成 BVH 遍历和求交。2 2016 年的 Pascal 架构 GPU,用软件跑光线追踪,只能达到约 1.1 十亿条光线/秒2 而 1080p、60fps 的实时光追,业界估算需要每秒处理 60 亿条以上 的光线。3 差距巨大。

RT Core:把最耗时的步骤焊进硬件

NVIDIA 在 2018 年的 Turing 架构(RTX 20 系列)中,给每个 SM(流式多处理器)加入了一个专用硬件单元:RT Core2

RT Core 只做两件事:

  1. 包围盒测试(Box Intersection)—— 判断光线是否与 BVH 中的某个包围盒相交
  2. 光线-三角形求交(Triangle Intersection)—— 精确计算光线与三角形的交点
RT Core 工作原理示意图:SM 发起 TraceRay 请求,RT Core 自主遍历 BVH 并返回命中结果

工作流程是:着色器(SM 上的 CUDA 核心)调用 TraceRay() 指令,把光线数据和 BVH 指针交给 RT Core。RT Core 接管后 自主遍历 BVH,在显存中高速读取节点数据。它内部像一个专用状态机,快速跳过不相关的包围盒,找到叶子节点后做精确求交,最后把结果(命中/未命中、交点坐标等)返回给 SM。4

这个设计的关键在于 卸载。SM 不需要花几千条指令去遍历 BVH——它发出请求后就可以去做其他计算(顶点着色、像素着色、AI 推理等),RT Core 在后台并行处理光线求交。Turing 的旗舰 TU102 芯片有 72 个 RT Core,加上 68 个 SM,可以实现 10 十亿条光线/秒,是 Pascal 纯软件方案的 10 倍2

但 10 倍仍然不够。即便 10 十亿条/秒,分摊到 60fps 的每帧也只有约 1.67 亿条光线。而 1080p 下每像素分摊不到 1 条光线——画面会布满噪点。

降噪:用 1 条光线"骗"出干净画面

这就是降噪(denoising)的用武之地。

路径追踪的噪点来自采样不足。如果每像素只有 1 条光线(1 sample per pixel, 1 spp),画面的方差可以超过 200%——几乎全是噪点。5 但降噪算法可以把这个几乎无法辨认的噪点信号,恢复成一张干净的图像。

降噪的思路是 利用相邻像素的信息。如果某个像素是天空,旁边的像素大概率也是天空——可以把它们的信息平均一下。但问题在于,物体边缘处不能乱平均,否则会糊掉。所以现代降噪器使用 G-buffer 数据(法线方向、深度、粗糙度、运动向量等)来指导滤波:在相似材质和几何的区域内平滑,在边界处保持锐利。56

主流降噪器(如 NVIDIA 的 NRD 库中的 ReLAX、REBLUR)用了三招组合:

  • 空间滤波(spatial filtering):在当前帧内,利用周围像素的信息来填补空缺。每个像素的权重由位置距离、法线差异、深度差异等因素决定。
  • 时间累积(temporal accumulation):把前一帧的信息重投影到当前帧,用指数移动平均来累积历史。一帧的噪声在时间轴上的随机性会被平均掉。
  • AI 去噪:用神经网络学习"噪点图 → 干净图"的映射,能识别更复杂的模式。5

这背后的逻辑是:硬件提供有限但足够的光线样本,降噪算法把它们"脑补"成干净图像。游戏里你看到的"光追效果",实际渲染的光线数量可能只有离线渲染的千分之一,剩下的都是降噪算法补上的。

DLSS:AI 让帧率再翻倍

降噪只能处理噪点,不能提高帧率本身。如果 GPU 渲染一帧需要 30 毫秒(约 33fps),再怎么降噪也到不了 60fps。

DLSS(深度学习超级采样) 从另一个角度解决这个问题。它以 更低的分辨率 渲染,然后用 AI 网络重建出高分辨率画面。比如渲染 1080p,输出 4K——这意味着一帧的像素总量减少到 1/4,GPU 有更多时间处理光线追踪。7

DLSS 3 进一步加入了 帧生成:AI 分析连续两帧的画面,在它们之间插值生成一帧。这样,GPU 渲染 30fps,显示出来可能是 60fps。7

最新的 DLSS 3.5 引入了 光线重建(Ray Reconstruction)——它把降噪和超分辨率合二为一,用同一个 AI 网络替代传统的手工调参降噪器。训练时用离线渲染的高质量图像作为"标准答案",AI 学会了识别不同的光追效果(反射、全局光照、阴影)并做出智能处理。8

这三层 AI 辅助——超分辨率、帧生成、光线重建——叠加起来,可以让 4K 光追游戏的帧率提升到原生渲染的 5 倍8

小结

光线追踪从"数小时一帧"到"实时可玩",靠的是三件事同时发力:

  1. RT Core 把 BVH 遍历和求交做进硬件,将光线处理能力提升了 10 倍
  2. 降噪算法用 1–4 条光线/像素 + 智能滤波,把原本需要成百上千光线才能得到的画面"脑补"出来
  3. DLSS 等 AI 技术 以更低分辨率渲染 + AI 重建 + 帧生成,等效提升帧率数倍

这三者缺一不可。没有 RT Core,光线数量太低,降噪也救不回来;没有降噪,光追画面全是噪点;没有 DLSS,帧率达不到流畅标准。2018 年 Turing 架构的发布,标志着这三件事第一次同时成为现实——这也是为什么 2018 年被称作"实时光追元年"。