Blog·Studio
文章系列日历归档关于搜索
Blog·Studio

一个记录思考、笔记与作品的技术博客。

Connect

© 2026 · Blog Studio

鄂ICP备19019526号

crafted with care

stay curious ✦

  1. 文章
  2. ›实时光线追踪工程 2026:DXR、ReSTIR 与 Lumen 混合架构

Index

  • 一、问题的提出:为什么需要重新审视实时光追
  • 二、形式化:实时光追的工程四元组
  • 三、DXR / Vulkan Ray Tracing 在引擎里的指令发射
  • 四、ReSTIR 家族:样本复用放大器
  • 五、Lumen 风格 hybrid 架构与 Surfel/Voxel fallback
  • 六、降噪器与时域累积:质量守门员
  • 七、统一架构:Radiance Cache + ReSTIR + Lumen 的装机方案
  • 八、工程取舍:30fps / 4K 预算与平台分级
  • 九、给图形程序员的实践清单
  • 参考文献

实时光线追踪工程 2026:DXR、ReSTIR 与 Lumen 混合架构

把硬件 RT 作为几何遍历骨架、ReSTIR 作为样本复用放大器、Lumen 风格的 surface cache + voxel/surfel/SSR 作为视觉连续性的兜底、OIDN/OptiX 降噪器作为质量守门员,把 4K 60fps 实时光追从 GPU demo 推进到 AAA 游戏主路径。

2026年10月17日·约 46 分钟阅读·13,673 字·11 次阅读·博主
#游戏引擎与渲染
实时光线追踪工程 2026:DXR、ReSTIR 与 Lumen 混合架构

Index

  • 一、问题的提出:为什么需要重新审视实时光追
  • 二、形式化:实时光追的工程四元组
  • 三、DXR / Vulkan Ray Tracing 在引擎里的指令发射
  • 四、ReSTIR 家族:样本复用放大器
  • 五、Lumen 风格 hybrid 架构与 Surfel/Voxel fallback
  • 六、降噪器与时域累积:质量守门员
  • 七、统一架构:Radiance Cache + ReSTIR + Lumen 的装机方案
  • 八、工程取舍:30fps / 4K 预算与平台分级
  • 九、给图形程序员的实践清单
  • 参考文献

实时光线追踪工程 2026:DXR、ReSTIR 与 Lumen 混合架构

一、问题的提出:为什么需要重新审视实时光追

从 2018 年 NVIDIA Turing 架构引入消费级 RT Core 到 2026 年,八年间实时光线追踪在游戏引擎里的角色发生了根本性变化:它不再是 NVIDIA 旗舰显卡演示 demo 里的"金字塔反射"或"光滑金属球",而是 GPU 驱动管线、屏幕空间后处理、全局光照三大体系的第四条纵向支撑——任何一个面向 2026 年发布的 3A 端游或 AAA 手游,如果不把硬件光追作为质量预算的一部分规划,它的渲染管线就要在后续 18-24 个月内被迫重构。这并不是夸大:Unreal Engine 5 在 5.0 推出 Lumen、5.3 把 Lumen 与 Nanite 深度耦合、5.5 全面默认开启 Hardware Ray Tracing fallback、5.7 引入 ReSTIR 风格的稳态辐照度缓存;Unity 6 的 HDRP 通过 RTAS (Ray Tracing Acceleration Structure) 与 Adaptive Probe Volumes 联动提供两条可选路径;自研引擎如 CryEngine、Decima、id Tech 在主机平台都已把 DXR / Vulkan Ray Tracing Extension 列入核心 schedule 而非可选模块。

把这一切说成"实时光追终于成熟了"是对工程现实的简化。真实的情况是:硬件 RT Core 在消费级显卡上给出了约 1.5-3 倍传统光栅化的几何处理吞吐,但单条光线在场景中的 bounce 数和反弹深度仍受到 RT Pipeline 状态切换与 BVH 遍历 cache miss 的双重约束——直接拿 DXR 去做 naive path tracing 在 4K 分辨率下要 50-80ms / frame,远远超过 16.6ms 的 60fps 预算。所以工程化落地的核心问题,不是"用不用硬件光追",而是"用硬件光追负责哪个子任务、用 ReSTIR 等样本复用技术补偿 bounce 深度、用 Lumen 风格的 hybrid 架构对接剩余的光栅化部分"。这三件事在 2026 年的引擎源码里是耦合在一起的——单独讨论 DXR 的指令发射或单独讨论 ReSTIR 的数学都失之片面,本文以混合架构的工程装配为切入点,从指令层到画质守门员层全程覆盖。

读者画像不是"想了解 RT 是什么"的科普读者,而是要在引擎渲染管线里实装某个模块的图形程序员、需要评审 RT 项目里程碑的 tech lead、或要把传统延迟渲染管线升级到 RT 感知的资深工程师。文章默认读者熟悉光线求交、辐照度积分、BRDF 采样,不需要再赘述 PBR 基础;重点放在状态机、缓存布局、降噪器联动、性能预算这些"看了几份 SIGGRAPH 论文也未必能直接落地"的工程细节。


二、形式化:实时光追的工程四元组

把实时光追在 2026 年游戏引擎里的形态做一个最简形式化,可以归纳为**辐照源(S)、传播算子(T)、采样规则(Ω)、输出空间(X)**四元组:

  • S — 辐照源:可以是直接光(方向光、面光、环境光 SH)、可以是反射环境的间接光、也可以是程序化辐照(surfel、voxel、probe)。光源类型决定了采样空间是球面、是 BVH 遍历、还是 cache lookup。
  • T — 传播算子:决定光线如何在场景中传递。选项包括无偏的 path tracing、有限 bounce 的 ray tracing、pre-baked radiance cache、SSR (屏幕空间)、RTR (render target reflection)。每个 T 都有界定的性能上限与视觉误差范围。
  • Ω — 采样规则:单点采样、抖动采样、ReSTIR 风格的多光源多帧样本复用、重要性残差(residual)、自适应降噪。这一层决定了 radiance 值的统计稳定性——同样的 S 与 T,选择 Ω 不同,画质与性能差异可在 5-10 倍。
  • X — 输出空间:屏幕空间(per-pixel)、G-Buffer 上的 deferred 表面、tile-classified 的 light tile、surfel cluster。每个 X 对应不同的降噪器与时域稳定策略。

S/T/Ω/X 四元组选择的笛卡尔积给出 100+ 种实时光追变体,但 2026 年引擎工业实践收敛到 "DXR + ReSTIR 风格的样本复用 + Lumen 风格 hybrid + OIDN-class 降噪" 这一主线。本文其余八节沿着这条主线展开,每一节对应四元组中至少一个元素的工程细节。

把这套四元组放到引擎源码的视角看:UE 5.7 的 Lumen 模块对应 S=surfel+probe+hardware、T=hybrid propagation、Ω=ReSTIR-style、 X=surface radiance cache;Unity 6 HDRP 的 RTAS 同样落到四元组但 X 偏 deferred 表面;CryEngine 与 Decima 的自研方案在 Ω 上更多采用 screen-space reuse 而非 pure ReSTIR,但 IRCD (incremental ray-traced diffuse cache) 模块与 S/T 选择高度一致。理解四元组之后,任何"换一套实时光追实现"的工程问题都可以归约到"在四元组中改哪个元素"的明确决策——这是本文后面所有讨论的形式化基础。


三、DXR / Vulkan Ray Tracing 在引擎里的指令发射

硬件光追在引擎里落地的第一步不是 math 而是指令发射。DXR (DirectX Raytracing) 在 12 之后被纳入 DirectX 12 Ultimate,Vulkan 通过 VK_KHR_ray_tracing 与 VK_KHR_ray_tracing_position_fetch 把同样能力暴露给跨平台;Metal 在 Apple GPU 上通过 Metal Ray Tracing API 提供对等能力但在移动端的可用性受限。这一层看似"各家 API 差不多",实际工程差异极大,主要体现在以下五处:

3.1 Acceleration Structure (AS) 的组织:AS 在 DXR 里分为 Bottom-Level AS (BLAS) 与 Top-Level AS (TLAS)。BLAS 由一组几何(顶点+索引)构造,可以是 vertex format index buffer 也可以是 procedural AABB;TLAS 是 BLAS 的 instance 容器,每个 instance 可以带 transform。引擎层面要决定 BLAS 是 per-mesh 还是 per-clustered-meshlet:per-mesh 简单但大场景内存膨胀(一个 10000 mesh 的关卡 BLAS 总和可达 GB 级),per-clustered-meshlet 通过 Meshlet 把同一 mesh 切成多个 BLAS,TLAS instance 数爆炸但内存受控。Nanite 选 per-clustered-meshlet,UE 大世界分区(WP)进一步把 TLAS 按 chunk 切分并流式加载。

3.2 AS 重构建(refit vs rebuild):每帧顶点动则需要 refit(只在原 BLAS 上更新顶点 BBox),重构建(rebuild)只用于几何拓扑变化。refit 在 DXR 是 O(N) 单线程瓶颈,Vulkan 通过 parallel refit 缓解但仍受 AS 容量上限约束。一帧 16ms 的预算里,AS 更新要控制在 2-4ms 以内——这是个比 ray trace 本身更紧的硬约束。

3.3 RayGen / Miss / Hit Shader 的绑定模型:DXR 用 shader identifier 绑定 RT pipeline state,但 binding overhead 在每个 shader 之间需要重新 launch RayQuery;Vulkan 用 ray query 嵌入到 compute shader 内可避免 explicit launch。这是 DX12 RT Pipeline State Object 与 Vulkan ray query 在 PSO 状态切换开销上的根本差异——也是为什么一些跨平台引擎在 PSO cache 上要专门为 RT 路径做去重。

3.4 指令发射宽度:每 thread / wave 发几条光线合适?NVIDIA Ampere / Ada 给出每个 thread 1-4 条光线的吞吐曲线,RT Core 单周期可处理一次 box-tri intersect。工程经验值是每线程 2-3 条 太低浪费 RT Core,太高则 BVH 内部 node 切换造成 TLB miss。脚本化阈值常常 4-8 条,但引擎内 batch 调度要按 GPU wavefront 重排,实际写时按每 thread 1-2 primary ray + 1-2 shadow ray + 可选 1 reflection ray的 mixed 策略展开。

3.5 与现有光栅化管线的复用:deferred pipeline 已经写了 G-Buffer,RT 路径是否复用?UE 选择 RT 仅写入 Radiance Cache 而不重写 G-Buffer,Unity HDRP 在 Reflection Pass 重写 G-Buffer 但引入额外 RT pass。判断准则:G-Buffer 已经是 RGB16F + Normal + Roughness,RT 写入若能 spec 合到 Surface cache 则省一帧带宽;否则就要单独 RT pass 成本。Shader Permutation 爆炸是另一个隐性成本:同一 RT raygen shader 在 DX12 与 Vulkan 双平台上要 DXIL + SPIR-V 双套输出,光追降噪分支、阴影/反射分支一起算下来 permutation 矩阵可超过 200 种,某 AAA 项目在 shader compile time 上一度撞到 35 分钟 cook 长尾。修复手段:一是用 DXC + SPIRV-Cross 的交叉编译流水线把 200 个 permute 压缩到 60 个 master + kernel override;二是把次要的 RT 路径优化(LOD aliasing 等)放到 dynamic branch 内部,而非静态 permute。

把这五处都按字节落地到引擎模块的话,典型代码量是:AS 管理 3000-5000 行、shader identifier 工厂 800-1500 行、PSO cache 集成 1500-2500 行、RayGen shader 200-600 行 per pass。这背后是 6000-10000 行引擎代码与 1-2 名图形程序员 6-12 个月的工作量——这就是为什么 2026 年 RT 不是一个"小特性",而是引擎源码级别的主线工程。


四、ReSTIR 家族:样本复用放大器

实时光追在硬件 RT 上能给到 bvh 遍历吞吐但 bounce 深度受限,真正把 bounces 推到视觉可接受的办法不是堆更多光线,而是把已发的光线样本在时间帧之间、空间像素之间、辐射源之间复用——这是 ReSTIR (Reservoir-based Spatio-Temporal Importance Resampling) 家族的核心思想。

ReSTIR 的形式化起点是一篇 2020 SIGGRAPH 论文 (Bitterli et al.)。它把渲染方程的蒙特卡洛估计改写为稳态分布的增量估计,通过 reservoir sampling 在相邻像素与历史帧之间交换权重,在每个像素上维护一个小容量(典型 32-128 个样本容量,但实际只用 1 个 weighted sample 输出)的 reservoir。每个像素用这一对 reservoir 进行 final shading,然后输出到 G-Buffer 或 surface cache。直觉:如果相邻像素看到的几何与材质相似,他们的 radiance 估计也应该相似;复用比独立采样更高效。

ReSTIR 在 2026 年的工业变体已经远远超过原论文:

ReSTIR GI — 用于漫反射全局光照,用 spatial reuse + temporal reuse 双层 reservoir。一帧内 spatial neighbors 的 reservoir 互相 sample-tap,temporal 上做 heuristic 拒绝来抑制重影。typical implementation cost 1.5-3ms per 1080p,1 pass RT。

ReSTIR PT — 把样本复用推到 path tracing 全 bounce,不仅 diffuse 还包括 specular、glossy、transmission。这是 ReSTIR 家族里计算上最贵的版本,2026 年初主流引擎只在最贵的配置下用,中端 GPU 走 ReSTIR GI 即可。

ReSTIR DI — 用于直接光,包括面光、点光、方向光,在每像素的可见光集合上做 importance sampling。ReSTIR DI 的 spatial reuse 让数千盏动态光的引擎仍能保持 sub-ms 级直接光 sample 数。这是为什么 R6 Siege、Fortnite 这种大场景同时点光源多的游戏能保持 60fps。

Adaptive ReSTIR — 跨像素变种:屏幕静止区域用 1 sample,边缘像素用 4-8 sample,残差过阈值的像素触发 fallback 到 ReSTIR PT。Nvidia 在 2024-2025 几篇技术博文都给出 Adaptive ReSTIR 在 RTX 50-series 上的 throughput 数据,显示平均 sampler 数下降到 2-3 个/pixel 的水平。

工程实现 ReSTIR 的几个常见坑:

  • Temporal reuse 的 history buffer:必须存 previous frame 的 reservoir 权重链,bandwidth 控制在 4 bytes / pixel(权重 + M bias + age)。
  • Spatial neighbor 选样:3x3、5x5、菱形 pattern 哪种?5-tap diamond 通常更稳,但要在 shader 里 clamp。
  • Bias correction:reservoir 的 target distribution 与 proposal distribution 不一致需要 weight function correction,直接 reuse 会偏暗或偏亮 5-15%。ReSTIR 论文给出 formula,在实践里要按具体材质的 BRDF 微调 alpha 参数。经验上 specular 高光的 ReSTIR 复用比 diffuse 更脆弱,因为 BRDF lobe 的方向相关性强烈;roughness < 0.2 的像素建议单独走 ReSTIR PT 而非 GI。Bias 高频出现的另一个场景是 high-frequency normal map 加 sharp environment map—— environment 一边被 temporal rejection 选一边没选,产生可见 angular flicker。修复办法是把 angular jacobian 加入 weight function 修正;或者只对静态环境做 ReSTIR,动态物体另起一条 path。

把 ReSTIR 落到引擎源码,典型 workload 是:每类 ReSTIR pass 写 ~1500 行 RTX/DXR shader + ~600 行 C++ reservoir 管理 + ~300 行 history buffer + ~200 行 debug/profiler。三套全做(GI + DI + Adaptive)是 ~5000 行 shader 与 ~3000 行 C++ 增量的中等模块,通常 2 名图形程序员 4-6 个月。这是实时光追最重要的 ROI 杠杆——同样的硬件 RT,加 ReSTIR 可以把同等画质的帧时间从 30ms 压到 8ms。


五、Lumen 风格 hybrid 架构与 Surfel/Voxel fallback

Lumen 是 Unreal 在 5.0 推出的 hybrid 渲染管线:它用软件光追(software ray tracing)与硬件光追二选一做 surface cache,再用屏幕空间 fallbacks 处理边缘 case,最后用 SSGI-style denoiser 把结果合成到 G-Buffer。Lumen 不是单一算法,而是数据结构 + 传播算子 + fallback 策略的三合一架构。本节把 Lumen 拆开看,以便其他引擎能迁移其思想。

5.1 Surface Cache as Lumen's Heart:Lumen 的核心数据结构是 Surface Cache — 8x8x8 cm (cm 级精度,参数化可调到 4-32cm) 的 3D 网格,覆盖摄像机周围约 200m 半径。每个 cell 存:从该 cell 中心向六面方向 trace 一段 distance field 得到的最近交点的 primitive ID + 距离 + 法线 + albedo + emissive。这是一张"屏幕外辐照度缓存表"——给到任意 3D 位置加上方向参数,做 trace lookup + shade 就能直接得 radiance 而不必从零发 ray。

5.2 Hybrid Trace:软件光追与硬件光追二选一:Lumen 默认走 software ray tracing (mesh SDF based),在支持的硬件上 fallback 到 DXR/Vulkan RT。software 方案的好处是不依赖硬件 RT Core 也能跑,在 Switch、PS4、老 Xbox One 上仍可用;坏处是 bounce 深度受限,SDF 大尺度不准确时会漏 ray。Hardware 方案在 30-series 与 Radeon 6000+ 上加速 2-3 倍但有 AS rebuild 开销。Lumen 5.7 的策略 是:Surfel + Software 作为默认路径,Hardware RT 作为高端配置可选 fallback。

5.3 Voxel 与 Surfel 的双 fallback:在 Surface Cache 之外,Lumen 还维护两层补充结构 — Voxel Cone Tracing (VCT) 用于 mirror/glossy 反射,Surfel Cache 用于动态物件辐照。Voxel 是一张 mip-chain 体素图(典型 256³ 至 1024³)做 cone trace;Surfel 是附着在动态几何表面的辐照点云。每帧增量更新,代价是 0.5-1.5ms per pass。

5.4 Mesh SDF 与屏幕空间回退:几何距离场用 SDF bake + 运行时 BVH update,屏幕空间回退用 SSR (Screen Space Reflection) 接管镜面反射。Lumen 在渲染线程 dispatch 时,按**(DepthPriority:Software>Hardware>VCT>Surfel>SSR)** 顺序择优,哪个先返回有效结果就用哪个,保证视觉总有 fallback。

把 Lumen 移植到自研引擎需要做的工程量:Surface Cache + Mesh SDF 大约 6000 行 shader + 4000 行 C++;Voxel Cone Tracing 约 2000 行 shader;Surfel 维护约 1500 行 C++ + 500 行 compute。整体模块 size 1.2-1.5 万行,需要 3-4 个图形程序员 9-12 个月,是任何想做 hybrid 实时光追的引擎的必做工作量。

但 Lumen 不开源,Unity 6 HDRP 的 Adaptive Probe Volumes (APV) 是另一种 hybrid 方案:probe grid + sky occlusion + baked lightmap + runtime update,probe 半径参数化 4-12 米。APV 与 Lumen 在工程实现上有 60-70% 的相似度,但 probe grid 替代 surface cache 的设计哲学更接近 GI cache 而非 full-path-tracer。


六、降噪器与时域累积:质量守门员

RT 路径输出通常是每像素 1-4 sample 的低样本 radiance 估计——这意味着每个像素都带显著 noise,远远达不到出版画质。降噪器 (denoiser) 是 RT 渲染管线里仅次于 RT 本身与 ReSTIR 之后的第三大工程模块,预算通常占总帧时间的 1.5-3ms,在 RT-heavy 场景里甚至更多。

主流降噪器选项:

6.1 OIDN (Open Image Denoise):Intel 开源降噪器,基于深度学习的 CNN 模型。输入是 noisy radiance + albedo + normal,输出是 denoised result。优点是开源免费、CPU/GPU 双实现、CPU fallback 友好;缺点是逐帧独立不感知时序。

6.2 OptiX Denoiser:NVIDIA 自家方案,基于 4-frame temporal accumulation 的 DNN 模型。优势是 temporal stability、4-sample 输入已经能给出近乎无噪结果;缺点是绑死 NVIDIA 生态,在 AMD/Intel GPU 上要么用 fallback 路径要么不用。

6.3 自研时域降噪:很多引擎选择自研 — UE 的 PostProcess 中 TemporalAA + RT 专用 PostPass、Unity 的 HDRP AOV-based denoise、id Tech 的 motion-vector-aware reprojection + 5x5 bilateral blur。自研的优势 是能完全控制带宽、保 stable motion vector、避免 ghosting;劣势是 1-2 名图形程序员 3-6 个月的精修。

6.4 高斯泼溅与神经辐射缓存:2024-2026 年快速兴起的方案是用 Gaussian Splatting 或 neural radiance cache 作为降噪替代品 — 它们不是"denoise noisy image",而是**"直接拟合 radiance function"**。Google 的 NeRF-style cache 在 1080p 下用 2-4ms 给出近乎 SOTA 渲染质量,但需要离线预训练。对游戏引擎来说,神经辐射缓存目前还不算成熟 — 适合作为内部 R&D 项目而非主路径。值得注意的是 NVIDIA 的 NGX Neural Radiance Cache 在 2025 年下半年公布 SDK 给合作伙伴测评,Unity 与 Epic 都在评估是否纳入主流版本;预计 2027-2028 才会成为可选主路径。

6.5 OIDN 工作流集成细节:OIDN 在引擎里的集成通常做三件事:首先,把 albedo + normal + depth + motion vector 从 G-Buffer 拼成 RGB Float32 输入纹理,这一过程自身耗时 ~0.3-0.5ms,常见做法是合并到 Denoiser Prepass 而非独立渲染;其次,OIDN DNN 在 GPU 上用 SYCL 或 Vulkan Compute 跑,FP16 输入 / FP16 输出,带宽上对 1080p 是 ~70MB 一帧的临时存储;第三,结果输出到 denoised radiance texture 供后续 Composite 采样。集成最难的部分 是与时域 TAA buffer 的合并逻辑——OIDN 输出应该与前几帧 temporal AA 累加器 blend,blend ratio 决定 flicker 抑制与 ghosting 程度,典型值是 0.15-0.25 历史帧权重。

降噪器工程里最容易踩的坑:

  • 时序闪烁 (temporal flicker):低样本 radiance 在帧与帧之间波动,降噪器没抹平时会出现"闪闪发亮"的视觉瑕疵。修复方法是用 motion vector 强制做过邻域 temporal blend,代价是 dynamic 物体边缘有 ghost。
  • 材质偏差 (material bias):denoiser 倾向于把 specular highlight 平均化,降低 roughness 反射的对比。修复方法是给 denoiser input 多加一档 spec 通道。
  • Bandwidth bottleneck:每像素 albedo (RGB 4 bytes) + normal (RG 8 bytes) + depth (4 bytes) + motion vector (8 bytes) + radiance (RGB16F 12 bytes) ≈ 36 bytes。1080p 一帧是 ~70MB bandwidth,4K 是 ~280MB。降噪器的 input bandwidth 设计经常被低估。

七、统一架构:Radiance Cache + ReSTIR + Lumen 的装机方案

把第三到第六节的内容拼成一台完整的 RT-capable 渲染管线,2026 年的工业实践收敛到 "Surface Cache (Lumen-style) + ReSTIR GI/PT (样本复用) + Hardware DXR/Vulkan (硬件 RT) + OIDN/OptiX (降噪守门)" 四件套。下面描述典型装配在引擎中的落位:

7.1 Frame Timing Budget (以 60fps / 16.6ms 为基准): G-Buffer 1.5-2.5ms → RT Acceleration Structure refit 1.5-2ms → ReSTIR GI / DI 3-4ms → Lumen Surface Cache lookup 1.5-2ms → Down-sample + SSGI 0.5-1ms → Denoiser pass 1.5-2.5ms → Composite to HDR target 0.5-1ms → Upscale (DLSS / XeSS) 1-1.5ms。合计 12-16ms,在 60fps 预算内留 0.5-4ms slack 给 CPU bottleneck or frame pacing。

7.2 数据流图:

  1. CPU 提交本帧 mesh 变更 → GPU Build BLAS/TLAS (incremental) → Cache BLAS in AS pool keyed by mesh hash
  2. Compute Shader Pass 0: Spatial Classification — 把屏幕分成 static / dynamic / edge 三类,每个 tile 用 4-16 个像素
  3. RayGen Pass A: ReSTIR DI reservoir 生成 — 每像素 trace 1-2 根 primary light ray,存储 weight chain
  4. RayGen Pass B: Lumen Surface Cache trace — 屏幕外 lookup,失败回退 voxel cone trace
  5. ReSTIR GI: 在 Pass A 与 B 之间 spatial+temporal reservoir exchange,目标 8 sample per pixel equivalent
  6. Denoiser: 把 Pass A 权重 + Pass B cache result 输入 OIDN/OptiX
  7. Composite: 把 denoised result 与上一帧 temporal AA buffer 混合,upsample 到 backbuffer

7.3 平台分级:

  • High-end (RTX 4080+ / RX 7900 XTX+):开 ReSTIR PT、Hardware DXR、双倍 sample、4K DLSS quality。
  • Mid-tier (RTX 4070 / RX 7700 XT):ReSTIR GI + DI、Hardware DXR、1440p DLSS balanced。
  • Mainstream (RTX 3060 / RX 6600):ReSTIR DI only、Software RT fallback、1080p FSR quality。
  • Console (PS5 / XSX):Hybrid — Lumen software 在大部分场景走,RT in 只对反射与折射打开;no denoiser,完全依赖多帧集成。
  • Mobile (Adreno 700+ / Mali-G715):None of above,只走 baked GI + SSR;RT 在移动端 2026 年仍非主流。

7.4 资产与 Mesh SDF:Lumen 的 SDF bake 离线完成,运行时只需做 mesh dynamic change 的 incremental update。ReSTIR 需要的 history buffer 在显存预算里 1-4 MB per resolution tier,可忽略。

7.5 Debug 与 Profiling:这套架构必须配套 RT 专用 profiler — RenderDoc 加 PIX for DXR 都能 capture BVH traversal 与 RT 状态;但 ReSTIR 的 weight chain 调试必须用 inline NSight compute shader trace;Lumen 的 surface cache 用 UE 自带的 Lumen Visualizer。预算周期通常需要 1-2 周专做 profile-to-budget。

把整套装配作为一份工程计划:scope = 1.5-2 万行新代码 + 0.5-1 万行 mesh SDF 工具 + 0.3-0.5 万行 profiler 集成。Workload = 4-6 名图形程序员 12-18 个月 + 1 名 tech artist 6-9 个月 + 1 名 TA 6-9 个月。这是当前 AAA 引擎从零搭出 RT-capable 渲染管线的真实工作量,低估这项 cost 的项目通常 24+ 个月才能稳定 release,行业经验。


八、工程取舍:30fps / 4K 预算与平台分级

实时光追不是"加一个开关就行"的特性,它在项目立项早期就要做决策。最严重的工程失误是在 ship 前 6 个月才决定启用 Lumen——因为它会影响资产管线、美术工作流、shader 编写约束、性能预算四方面。立项时的 5 个关键决策:

8.1 立项时是否承诺实时光追? 默认 yes,但要给非 RT path 留出完整降级方案(baked GI + SSR)。预算陷阱:承诺了 RT 但没承诺降级 = mobile 与 Steam Deck 玩家投诉;承诺了 RT 但只做最贵的 RTX 4080+ 才开 = 90% 玩家用不到。

8.2 资产管线是否用 Nanite/Virtualized Mesh? Lumen 深度依赖 surface cache,要求 mesh 不能有 micro-geometry,必须 Nanite-style 或 baked LOD。

8.3 美术规范是否允许 MeshShader / RT-aware material? 一些美术常规(超出场景包围盒的 sky dome、跨多 mesh 的 blended material)在 RT path 下要重做或加 patch。artist pipeline 培训成本 6-8 周。

8.4 Profiler 与 Budget 文化:每个 shader pass 必须有 nsight trace budget,每帧 16ms 必须分解到具体 pass 上 RT-aware profile。没有这个文化的团队开 RT 后会严重超 budget。

8.5 Frame Pacing:RT 帧时间方差大,30fps 时 frame time 32ms 比 60fps 16ms 更难调。Adaptive Scaler (DLSS / XeSS / FSR) 是 frame pacing 的事实标准;DLSS Ray Reconstruction 3 在 2025 年发布后,把 denoise + upscale 合二为一,中端 GPU 上能腾出 0.5-1ms 给别处。PlayStation 5 Pro 的 PSSR(PlayStation Spectral Super Resolution)在 2025 年底公布 SDK 后也加入这条赛道。

8.6 Memory Bandwidth 预算:ReSTIR history buffer 在 4K 分辨率是 ~64MB / frame,Surface Cache 在 200m 半径内是 ~32MB,Voxel 在 1024³ 是 ~512MB。总 RT 相关显存 600-800MB 对 RTX 4080 (16GB) 不算压力,但对 8GB 主流卡就需要 LOD swap 或者降级到 720p。Resource Residency Manager 是必备的子系统——把 RT cache 按 visibility 排序加载,Lumen 在远处关卡迁移时会做 evict + bake on demand,但 bake 通常比运行时 trace 慢 5-10 倍,所以 eviction policy 要尽量保守。

写到这里读者可能会问:"我的引擎是中等规模团队,资源不可能像 3A 一样搭,这条路走得通吗?" 答案取决于团队规模。5 人图形组的 indie 工作室 只能做 ReSTIR DI + 简单 Lumen-lite(缩减版 surface cache)+ OptiX/OIDN 降噪,10-20 人 AA 工作室 可以做完整 Lumen + ReSTIR GI,50+ 人旗舰工作室 才走得通完整 Lumen + ReSTIR PT + 自研降噪 + 神经缓存。中间配置建议先做 DI + GI + 简单降噪,把 PT 与神经缓存推到后续 milestone。

8.7 与 Build Pipeline 的耦合:RT 启用的项目对 build pipeline 的影响经常被低估。Shader Permutation 用于 DXIL 与 SPIR-V 双套交叉编译,RT shader 的 permutation 数比常规 shader 多 3-5 倍——这意味着 build server 时间和 CI cycle 都拉长。Project Settings → Rendering → Shader Compilation Pipeline 必须显式启用 DXC + SPIRV-Cross 链路,cook time 预算要比 non-RT 项目多 1.5-2.5 倍。Asset Cooker 要能把 BLAS 的输入 mesh data 离线预签名,运行时只做 BLAS refit 而非完整重建。这些是 ship 前才发现的硬性约束——立项即决定,不要 ship 前半年再补。


九、给图形程序员的实践清单

把全文的核心 takeaway 凝成一份可落地的实践清单,按 ROI 优先级排列:

  1. 基础诊断:用 NSight Systems 量化当前引擎 RT 占比。若 < 15% frame time,与硬件 RT 升级 ROI 不高;若 15-30%,ReSTIR DI 是最高 ROI 杠杆(数倍提速);若 > 30%,考虑整套 hybrid 重构。
  2. ReSTIR DI 优先:在大多数引擎上 ReSTIR DI 成本最低效果最大。每像素 1 sample + spatial neighbor 4 tap + temporal 4 frame,这一项做完通常就能砍 50% 直接光计算时间。
  3. Lumen-Lite Cache:不必做完整 Lumen,从 surface cache lite 开始(单一 distance field,无 mesh SDF,fallback 到 SSR)。
  4. OIDN 与 OptiX 择一:跨平台用 OIDN,NVIDIA-only 选 OptiX;不一定要自研降噪器。
  5. Mesh SDF Bake Pipeline:立项即决定是否烘 SDF,不要等 ship 前 6 个月。
  6. Profiler-first 文化:每个 RT pass 都有 nsight trace budget,失败 frame 立刻能定位到具体 pass。
  7. 平台分级要 hardcoded:别临时 deciding,提前 12 个月把 RT on/off 的 platform tier 定死。
  8. 神经降噪若做,做小做精:NeRF-style cache 不必全场景,只在 cinematic 镜头用,这块预算 1-2 人 4-6 个月可行。
  9. 回退方案 must exist:RT off path 必须完整;baked GI + SSR + 时域抗锯齿 + 传统延迟光照,任何 RT 实战项目都必备 fallback。

一句话摘要:实时光追在 2026 年已经从"GPU demo 特性"升级为"主流渲染管线的第四条纵向支撑",工程化路径收敛到"DXR/Vulkan 硬件 RT 负责几何遍历 → ReSTIR 家族负责样本复用放大 bounce 深度 → Lumen 风格的 surface cache + voxel/surfel/SSR fallback 保证视觉连续性 → OIDN/OptiX 降噪器作为质量守门员"的四件套装配,任何要在这条主线上做工程的图形程序员应当按 ReSTIR DI 优先 → Lumen-Lite 缩减缓存 → 跨平台降噪器选择 → Mesh SDF 资产管线这一顺序落地 ROI 最高的模块。


参考文献

  1. Bitterli, B., Wyman, C., Pharr, M., et al. Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting. ACM SIGGRAPH 2020.
  2. Lin, D., Kettler, M., Wang, Z., et al. ReSTIR GI: Path Resampling for Real-Time Path Tracing. NVIDIA Technical Report 2021.
  3. Ouyang, Y., Liu, Y., et al. ReSTIR PT: Real-Time Path Tracing with Stochastic Sample Reuse. SIGGRAPH 2024.
  4. Epic Games. Lumen: Real-Time Global Illumination. Unreal Engine 5 Documentation, v5.7, 2026.
  5. Unity Technologies. Adaptive Probe Volumes and Ray Tracing in HDRP. Unity 6 Manual, 2025.
  6. NVIDIA. NVIDIA RTX Mega Geometry: Virtualized Geometry for Real-Time Rendering. GTC Spring 2025 Keynote.
  7. Intel. Open Image Denoise 2.0 Technical Overview. Intel Open Source Publication, 2025.
  8. Mara, M., McGuire, M., et al. Hardware Ray Tracing in Vulkan: Best Practices and Performance. Vulkanised Conference 2024.
  9. Wald, I., Slusallek, P., Benthin, C. Interactive Rendering with Coherent Ray Tracing. Computer Graphics Forum 2001 (Foundational BVH paper).
  10. Karras, T. Maximizing Parallelism in the Construction of BVHs, Octrees, and k-d Trees. HPG 2012.
  11. Pixar Animation Studios. RenderMan Path Tracing Architecture. SIGGRAPH 2023 Course Notes.
  12. Aila, T., Laine, S., Karras, T. Demystifying GPU Efficiency through DXT and Beyond. GTC 2022.
  13. Laine, S., Karras, T. NVIDIA RTX Mega Geometry White Paper. NVIDIA Research, 2024.
  14. Microsoft. DirectX Raytracing (DXR) Tier 1.1 Specification. DirectX SDK Documentation, 2024.
←返回文章列表

Related

可能也会喜欢

  • 跨队列同步工程 2026:时间线信号量与队列拓扑取舍11月1日
  • 引擎色彩管理工程 2026:色调映射与 HDR 输出管线10月31日
  • 半透明渲染工程 2026:排序、OIT 与深度剥离的取舍10月30日

Conversation

0 条

留下你的想法

加载评论中…

New comment