Skip to main content

Chapter 146: Real-Time Ray Tracing Advances

实时光线追踪的主问题可以压缩成一句话:在一帧十几毫秒的预算内,如何把真实光传输的一部分交给 ray tracing,同时保持稳定帧率、稳定画面和可维护的跨平台工程结构。本章要建立的能力是:读者能够追踪一次实时 RT frame 中的 acceleration structure、ray dispatch、hit shader、denoiser 和 composite 路径,并能判断一个 RT 效果的瓶颈来自遍历、着色、带宽、历史重投影、材质分歧还是平台能力边界。

本章使用一个贯穿 frame:夜间室内中庭场景。画面中有大面积玻璃地面、金属扶手、发光广告牌、移动电梯、半透明植物和几盏动态区域光。传统 raster pipeline 可以稳定生成主可见表面、深度、法线、材质和 motion vector;实时 ray tracing 负责补充玻璃反射、接触阴影、少量间接光和局部高质量软阴影。这个 frame 足以暴露实时 RT 的核心矛盾:画面希望光线更真实,帧预算要求每个像素只能发射很少的 rays。

实时 RT 的先进性并不只来自硬件。硬件 RT 单元提高 traversal 和 primitive intersection 的吞吐,API 提供 acceleration structure 和 ray pipeline,渲染器通过 hybrid rendering 控制 ray budget,denoiser 把少量 noisy samples 转成稳定图像,内容管线控制材质复杂度和动态几何更新频率。任何一层失控,画面都会表现为噪声、拖影、漏光、闪烁、帧耗时尖峰或跨平台 fallback 质量断裂。

本章按五个层次展开:先看技术趋势如何从单一反射效果走向 hybrid path tracing,再拆硬件 RT 专用单元和 shader table 的边界,然后建立 DXR、Vulkan RT、MetalRT 的跨平台抽象,接着给出性能与视觉一致性的检查顺序,最后分析 ReSTIR、path guiding、neural radiance cache 等前沿算法怎样进入实时应用。

146.1 实时光线追踪技术的发展趋势

实时 RT 的发展趋势可以用一个变化概括:ray tracing 从“单个后处理式效果”进入“frame graph 中的光传输子系统”。早期实时应用常把 ray tracing 放在反射或阴影 pass 中,主画面仍由 rasterization 生成;新的 hybrid renderer 会把 shadow、reflection、ambient occlusion、global illumination 和 path traced preview 放入同一套资源生命周期管理中,由 frame graph 决定哪一帧构建 AS、哪一个 pass 发射 rays、哪一个 denoiser 消耗 history buffer。

贯穿 frame 中,raster pass 先输出 G-buffer:depth 提供可见表面的重投影锚点,normal 和 roughness 告诉 reflection rays 应该向哪里发射,motion vector 告诉 denoiser 哪些历史样本可复用,emissive 和 light list 告诉 lighting pass 哪些光源需要显式采样。ray tracing pass 使用这些输入去查询 scene acceleration structure,输出 noisy radiance、hit distance、visibility 或 shadow mask。最终画面质量取决于这些中间量能否稳定进入 temporal accumulation 和 denoising,而不只取决于 rays 数量。

下面的图描述这个 hybrid frame 的主路径。图中 RT pass 是 frame graph 的一个节点,和 raster、resource update、denoise、composite 共同决定输出图像。

这条路径说明实时 RT 的趋势不是把 rasterization 全部替换掉,而是把 rays 放到最能改变视觉结果的位置。夜间中庭的主可见几何、UI、透明排序、粒子和大多数材质仍适合 rasterization;玻璃地面上的屏幕外反射、金属扶手的高亮、动态区域光的接触阴影和局部间接光适合 ray tracing。工程判断的核心是:每一个 ray pass 必须回答一个 raster path 难以稳定回答的问题。

第二个趋势是 BVH update 成为内容管线问题。Bounding Volume Hierarchy(BVH)是把三角形或 procedural primitives 包进层级 bounding boxes 的空间结构,ray traversal 通过它减少逐三角形相交测试。实时场景包含移动电梯、开合门、角色、布料和破碎物体时,底层几何加速结构(BLAS)和顶层实例加速结构(TLAS)的更新策略会直接影响 CPU/GPU 同步、显存临时 scratch buffer 和 frame time 稳定性。静态建筑可以预构建 BLAS,移动刚体通常更新 TLAS transform,变形网格需要 refit 或 rebuild BLAS。每种策略都改变 frame graph 的 resource lifetime。

第三个趋势是 denoising 从附加滤镜变成 RT pipeline 的一部分。实时 RT 常在每像素 1 到少量 samples 的条件下运行,raw ray result 天然带有噪声。Denoiser 的输入包括 radiance、depth、normal、roughness、albedo、motion vector、hit distance、object id 和 history confidence。渲染器必须在 ray pass 写出这些 feature buffers,否则 denoiser 会把真实几何边界当成噪声,或者把噪声当成材质纹理保留下来。

第四个趋势是内容制作流程主动配合 RT。艺术资产需要标记哪些材质参与 reflections、哪些 alpha-tested 几何使用 simplified any-hit、哪些动态小物体从 TLAS 中剔除、哪些 emissive surfaces 进入 light sampling。实时 RT 的生产质量来自 renderer、asset pipeline 和 tools 的共同约束;只在 runtime 打开一个 RT 开关,通常会得到不稳定的成本和不一致的视觉结果。

146.2 硬件加速与专用指令集(RTX / RT Core)

硬件 RT 专用单元的工作边界需要先讲清。RT Core、Ray Accelerator、ray tracing unit 这类厂商命名都指向同一类任务:加速 ray 与 acceleration structure 的 traversal,以及 ray 与 box、triangle 或部分 primitive 的 intersection。它们降低的是“找到 hit 或 miss”的成本;BRDF 计算、texture fetch、material 分支、light sampling、denoising、history resolve 和 frame graph synchronization 仍由 shader cores、cache、memory subsystem 和通用 compute 资源承担。

在夜间中庭 frame 中,一条 reflection ray 从玻璃地面片元发出。GPU 先使用 TLAS 找到可能命中的实例,再进入对应 BLAS,沿着 bounding boxes 层级做 traversal。ray 命中金属扶手三角形后,hit shader 读取 material data、normal map、roughness 和 emissive contribution,生成反射颜色或继续发射下一跳 ray。硬件 RT 单元让 traversal 更快,但命中后的材质计算仍可能因为纹理访问、分支发散和 payload 过大成为主要成本。

DXR、Vulkan RT 和 MetalRT 都把这条路径拆成 API 对象。Microsoft 的 Direct3D 12 Raytracing 文档列出了 acceleration structure、raytracing pipeline state、DispatchRays、hit group、shader config 和 shader table 等对象;Khronos 的 Vulkan Ray Tracing Guide把功能拆成 VK_KHR_acceleration_structureVK_KHR_ray_tracing_pipelineVK_KHR_ray_query、pipeline library 和 deferred host operations;Apple 的 Metal ray tracing sample提供了 Metal acceleration structure 与 ray tracing 的工程入口。不同 API 名称不同,工程对象基本都落在 AS、ray pipeline、shader binding、dispatch 和 synchronization 这几类职责上。

Shader table 是实时 RT 工程中最容易被低估的对象。它可以理解为 ray dispatch 的“着色入口索引表”:ray generation shader 决定发射网格,miss shader 决定未命中时的环境贡献,hit group 绑定 closest-hit、any-hit 和可选 intersection shader,local parameters 为具体 material 或 geometry 提供索引和常量。夜间中庭里,玻璃、金属、发光广告牌和植物 alpha cards 需要不同 hit behavior;shader table 把这些行为和实例索引连接起来。

Inline ray query 是另一个关键边界。完整 ray tracing pipeline 会使用 ray generation、miss、hit group 和 shader table 组织独立 ray dispatch;inline ray query 把 traversal 查询嵌入 graphics 或 compute shader 中,适合短路径任务,例如片元 shader 中发射一条 shadow ray 检查遮挡。贯穿 frame 的软阴影可以用独立 RT shadow pass 生成可降噪的 visibility buffer;简单硬阴影或 contact shadow 可以在 lighting shader 中用 inline ray query 查询。前者更利于集中调度和 denoising,后者更容易接入既有 raster lighting。

硬件加速也有明确失效点。第一,ray divergence 会降低 SIMD / SIMT 执行效率。同一 wave 内的 rays 如果命中完全不同材质、走不同 bounce depth、访问不同纹理,shader cores 需要分路径执行,吞吐会下降。第二,any-hit shader 代价高。Alpha-tested foliage 需要对多个候选命中运行 any-hit 过滤,玻璃和植物会放大 traversal 后的 shading 成本。第三,动态 BLAS rebuild 会消耗 scratch memory、带宽和同步点。第四,payload 过大时,register pressure 上升,occupancy 下降。RT core 提升 traversal 能力,不能消除这些 shader 和 memory 层面的瓶颈。

因此,判断硬件 RT 收益时应按路径拆分:先看 AS build/update 时间,再看 ray traversal 时间,再看 hit shader 和 any-hit 时间,再看 denoiser 与 composite 时间。Nsight、RenderDoc、PIX、Xcode GPU tools 等工具能从 GPU markers、dispatch duration、resource barriers 和 shader counters 侧面定位问题;工具输出的价值在于回答“哪一个 pass 消耗预算”,并把总帧耗时拆回具体管线阶段。

146.3 跨平台实时 RT 实现模式

跨平台实时 RT 的稳定做法是建立 engine-level capability profile。这个 profile 不直接暴露某个 API 的全部细节,而是回答四个工程问题:当前设备支持完整 ray tracing pipeline 还是只适合 inline ray query;acceleration structure 支持哪些 build flags、update flags、compaction 和 geometry types;shader binding 采用 shader table、function table 或引擎自定义 indirection;fallback path 使用 screen-space、shadow map、probe、voxel、SDF 或 compute path 中的哪一种。

下面的表把三个常见 API 家族放到同一组维度中比较。它不是完整 API 清单,只服务于 renderer 抽象设计。

维度DXR / D3D12Vulkan RTMetalRT
AS 对象BLAS / TLAS 通过 D3D12 raytracing AS 相关结构构建VK_KHR_acceleration_structure 负责 AS 创建、构建、复制与序列化Metal acceleration structure 负责几何和实例查询入口
Dispatch 模型DispatchRays 配合 raytracing state object 和 shader tablevkCmdTraceRaysKHR 配合 ray tracing pipeline 和 shader binding table通过 Metal command encoder、intersection function 和相关 pipeline 组织
Inline 查询HLSL ray query 可服务 shadow / visibilityVK_KHR_ray_query 可在多类 shader 中使用Metal shader 中可接入 ray tracing 查询能力
工程抽象重点state object、root signature、SBT record layoutextension enable、buffer device address、SBT layout、barrierApple 平台 feature set、resource mode、Metal shader 组织
Fallback 设计D3D12 compute / raster fallbackVulkan compute / raster fallbackMetal compute / raster fallback

跨平台实现的第一层是 acceleration structure builder。它接收 engine scene 中的 mesh、instance、transform、mask、material id 和 update policy,输出 API 需要的 BLAS/TLAS 资源。静态建筑走 build-on-load 与 compaction,移动刚体走 TLAS transform update,skinned mesh 依据骨骼变形频率选择低频 rebuild 或 raster fallback。这个 builder 还要集中管理 scratch buffer、AS buffer、barrier 和 GPU timeline,减少每个 feature pass 私自构建 AS 的资源碎片。

第二层是 ray effect abstraction。Shadow、reflection、ambient occlusion、GI 和 debug ray 都不应该各自复制一套 AS 和 material binding 逻辑。更稳定的结构是:每个 ray effect 声明 ray type、ray flags、payload layout、hit group requirement、resolution scale、denoiser input 和 fallback mode。夜间中庭的 reflection pass 使用 roughness 控制 ray cone 和 max distance;shadow pass 使用 light radius 控制软阴影采样;GI pass 使用低分辨率 radiance 和 temporal reuse。这样 renderer 可以统一统计 ray budget,也能按平台关闭或降级某个 effect。

第三层是 material hit contract。Raster material 通常以 surface shading 为中心,RT material 还要回答 visibility、alpha test、emissive sampling、thin surface、two-sided 和 opacity 的问题。跨平台 renderer 可以把材质拆成两个层级:surface data 负责 normal、base color、roughness、metallic、emissive;hit behavior 负责 ray visibility、alpha cutoff、transmission、shadow mode 和 reflection mode。这样 shader table 或函数表只需要引用稳定的 behavior id,减少平台间 shader 变体数量。

第四层是 denoiser contract。Denoiser 不关心某个 ray 来自 DXR、Vulkan RT 还是 MetalRT,它关心输入是否在同一坐标空间和同一 history 规则下生成。Reflection denoiser 需要 radiance、hit distance、normal、roughness、motion vector 和 disocclusion mask;shadow denoiser 需要 visibility、hit distance、light size、normal 和 history confidence;GI denoiser 需要 diffuse albedo、normal、depth、radiance moments 和 temporal variance。跨平台一致性主要靠这些 feature buffers 和统一的 history 规则来维持。

Fallback path 需要在设计阶段进入 renderer。没有硬件 RT 的设备可以使用 SSR、shadow maps、probe GI、SDF shadows 或低频 baked lighting;支持 inline ray query 但 full pipeline 成本偏高的平台,可以只打开 contact shadow 或 short-range occlusion;支持完整 ray pipeline 的高端平台才打开多 bounce reflection 或 path traced mode。fallback 的目标是保持视觉语义一致:同一个材质在不同设备上仍表达“玻璃、金属、漫反射、发光体”的关系,只是反射范围、阴影精度和间接光细节不同。

146.4 性能与视觉一致性优化策略

实时 RT 优化必须同时看性能和视觉一致性。只降低 rays 数量会减少耗时,也会提高噪声;只加强 denoiser 会平滑噪声,也可能制造拖影和边界漏光。可复用的判断顺序是:先确定 effect 目标,再分配 ray budget,再控制 resolution,再定义 denoiser 输入,再检查 temporal stability,最后回到材质和 AS 更新策略。

Ray budget 是第一层约束。夜间中庭中,玻璃地面 reflection 对画面贡献高,可以分配每像素 1 ray 加 temporal accumulation;远处金属小物体的 reflection 可以走半分辨率或 probe fallback;动态区域光阴影只对近处接触区域发射 rays;GI 使用低分辨率 irradiance 或 reservoir reuse。每个 effect 都要有 max ray distance、max bounce、roughness cutoff、object mask 和 per-frame update frequency,这些参数决定 GPU 真实工作量。

Resolution scale 是第二层约束。Reflection 和 GI 常以半分辨率或 checkerboard 方式发射 rays,再通过 denoiser 与 upsampling 回到全分辨率。阴影 visibility 可以按光源重要性和接触区域分辨率分配。分辨率降低后,depth、normal、motion vector 的采样一致性变成关键;如果低分辨率 ray result 和全分辨率 G-buffer 对不上,边缘会出现闪烁和漏光。

Denoiser 的稳定性来自 feature buffers。Depth 用于防止跨几何边界混合,normal 用于区分不同朝向表面,roughness 用于决定 reflection blur,hit distance 用于识别近处接触阴影和远处软阴影,motion vector 用于历史重投影,variance 或 moments 用于判断历史可信度。缺少这些输入时,denoiser 只能根据颜色猜测噪声结构,结果很容易把真实高频材质抹平,或把随机 speckle 留在画面中。

Temporal stability 的核心是 history validity。移动电梯遮挡玻璃地面反射时,前一帧的 reflection history 可能对应已经离开的物体;动态广告牌亮度变化时,旧 radiance 会污染当前帧;摄像机快速移动时,screen-space reprojection 会产生 disocclusion holes。稳定策略包括 history clamping、disocclusion mask、reactive mask、per-material history weight、ray hit distance test 和 normal-angle rejection。它们都围绕同一个目标:只复用仍能解释当前 frame 的历史样本。

Material simplification 是第四层约束。RT hit shader 不宜完整复制离线 path tracer 的所有材质层。实时 renderer 常把透明、次表面、多层 clearcoat、复杂 procedural texture、parallax 和高频 alpha cards 转成更简化的 hit behavior。对 reflection rays,rough surface 可以降低 ray distance 或直接使用 prefiltered environment;对 shadow rays,alpha-tested material 可以使用 opacity micromap、粗略遮挡 mask 或几何代理;对 GI rays,复杂 specular material 可以退出 diffuse bounce。简化的依据不是偷工减料,而是每个 ray type 对最终视觉贡献不同。

AS update 策略决定帧耗时是否稳定。静态建筑和大件道具适合一次 build 后长期复用;移动刚体适合只更新 TLAS instance transform;skinned mesh 可按距离、屏幕占比和材质重要性选择 refit、低频 rebuild 或 raster-only visibility;粒子、毛发和小型透明装饰常走 proxy geometry 或从 RT visibility 中移出。每次 rebuild 都应有 GPU marker 和资源统计,便于确认成本来自 geometry update 还是 ray dispatch。

下面的检查表用于把性能症状映射回管线对象。

症状优先检查典型原因稳定处理方向
RT pass 耗时高dispatch duration、ray count、hit shader costray distance 过长、bounce 过多、any-hit 密集缩小 object mask、降低 bounce、简化 alpha hit
AS update 尖峰BLAS/TLAS build markers、scratch buffer动态网格 rebuild 集中到同一帧分帧更新、TLAS transform update、proxy geometry
反射闪烁motion vector、hit distance、history rejectionhistory 与当前表面错配提高 disocclusion 检测、降低 history weight
阴影漏光normal/depth filter、light radius、biasdenoiser 跨边界混合或 ray origin 偏移使用 hit distance guide、调整 ray bias 和边界权重
GI 画面糊low-res radiance、albedo、variancedenoiser 过度累积或输入特征不足增加 variance clamp、补充 normal/depth/albedo
平台差异大feature profile、fallback mode不同 API path 使用不同材质语义统一 hit behavior 和 denoiser contract

这个顺序的价值在于把“RT 太慢”变成可定位问题。引擎需要把每个 ray effect 的输入、输出、资源和耗时暴露到调试面板中:本帧 AS build 数量、ray dispatch 分辨率、每类 ray 的 max distance、denoiser history 命中率、fallback 状态、材质简化规则。没有这些证据,优化会变成凭感觉调参数。

146.5 前沿算法与实时应用案例

实时 RT 的前沿算法都在解决同一个约束:每帧 rays 很少,光传输积分很大。Path tracing 的理想形式会从相机出发沿多个 bounce 采样光路,估计直接光、间接光、反射、折射和体积散射;实时 frame 只能在有限样本下近似其中一部分。前沿方向的共同点是提高每条 ray 的信息价值,或者把历史、邻域、缓存和学习模型转成更好的样本估计。

ReSTIR 是实时 RT 中最具代表性的 sample reuse 方向。Reservoir-based SpatioTemporal Importance Resampling 的核心思路是为每个像素维护一个或少量 reservoir,把当前帧候选光样本、邻近像素样本和历史样本合并,选择更有贡献的 sample。NVIDIA 的 ReSTIR 技术博客SIGGRAPH 2020 ReSTIR paper说明了它如何服务大量动态光源下的直接光与阴影;RTXDI SDK进一步把 ReSTIR DI、ReSTIR GI 和 ReSTIR PT 放入可集成的实时渲染样例与库结构中。

把 ReSTIR 放回夜间中庭 frame,可以看到它解决的是 light sampling 问题。广告牌、灯带、动态区域光和小型发光装饰数量多,逐光采样会迅速超过 budget;随机挑一个光又会产生大量噪声。ReSTIR 把“哪个光值得采样”从单个像素的孤立决策,变成当前帧、空间邻域和历史之间的重采样问题。它依赖 motion vector、depth、normal 和 visibility tests;这些输入一旦不稳定,sample reuse 会带来相关性噪声、拖影或错误阴影。

Path guiding 是另一个方向。它的目标是学习或估计“从某个表面点向哪些方向采样更容易得到高贡献 radiance”。在室内中庭里,间接光可能主要来自广告牌和天窗区域;普通 cosine-weighted diffuse sampling 会把样本分散到很多低贡献方向,path guiding 会把采样分布推向更可能带来光能的方向。实时系统中,guiding 数据结构必须快速更新、显存可控、查询成本低,并能在动态光照和移动物体下保持稳定。它适合帮助 GI 和多 bounce path tracing,提高少量 samples 的利用率。

Neural radiance cache 代表学习型缓存方向。Real-time Neural Radiance Caching for Path Tracing把神经网络作为在线 radiance cache,在渲染过程中训练并查询,用少量计算近似复杂间接光。它的工程意义是把部分 indirect lighting 查询转成 cache query,再用真实 path samples 不断校正。实时集成时需要判断网络推理耗时、训练更新频率、缓存输入特征、动态场景适应速度和 bias。它适合画面中大面积漫反射 GI 的降噪和加速,但仍需要传统 ray samples、temporal validation 和 fallback 管线支撑最终稳定性。

Ray traced shadow、reflection 和 GI 是当前最常见的实时应用组合。Shadow 的收益来自屏幕外遮挡、接触阴影和区域光软边;reflection 的收益来自屏幕外几何、法线一致性和材质 roughness 变化;GI 的收益来自动态光照反弹和 color bleeding。它们的成本结构不同:shadow rays 通常短、payload 小、denoising 简单;reflection rays 命中材质复杂,容易产生 divergence;GI rays 噪声大,对 temporal reuse 和 denoiser 依赖高。选择应用顺序时,应先启用视觉贡献大且成本可控的效果,再把预算投向高阶 GI。

Path traced mode 是实时 RT 的高端形态。它通常出现在摄影模式、离线预览、cinematic viewport、高端 PC 配置或专业可视化中。工程上它仍然离不开 hybrid 思路:主 frame graph 提供 AS、materials、lights、motion vectors、exposure、tone mapping 和 denoiser;path tracing pass 负责更统一的光传输估计;UI、粒子、透明和特殊后处理仍可能走独立路径。它不是把所有渲染规则清空重写,而是把更多 lighting effects 统一到 path sampling 下,再由 sampling、reuse、denoising 和 hardware scheduling 把成本压入交互预算。

前沿算法进入产品时,需要用同一套验收标准。第一,看它提高的是 light sampling、path sampling、traversal coherence、denoising 还是 cache query。第二,看它依赖哪些输入:motion vector、normal、depth、material id、history buffer、light reservoir、radiance cache 或 training samples。第三,看它的失败形态:噪声、bias、lag、blurring、ghosting、light leaking 或 frame spike。第四,看它的 fallback:关闭算法后画面是否仍保持材质语义和照明层级。这样才能把“先进算法”落到 frame、pass、buffer、shader 和视觉结果之间的可复查关系中。

最小自检任务

给定一个夜间室内中庭 frame:玻璃地面需要反射屏幕外广告牌,移动电梯需要产生接触阴影,半透明植物密集分布在前景,目标平台包含高端 PC、支持 inline ray query 的移动设备和无硬件 RT 的低端设备。请设计一个实时 RT 接入方案,说明哪些效果使用 ray tracing,哪些资源需要写入 frame graph,怎样控制性能和视觉一致性,以及如何设置 fallback。

答案要点

先把效果按视觉贡献和成本拆开。玻璃地面反射对画面贡献高,在高端 PC 上使用半分辨率 RT reflection pass,每像素 1 ray,写出 radiance、hit distance、roughness、normal、motion vector 和 disocclusion mask,再进入 reflection denoiser;移动电梯接触阴影使用 short-range shadow rays 或 inline ray query,输出 visibility 与 hit distance;前景半透明植物降低 any-hit 复杂度,可以使用简化 alpha mask、proxy geometry 或从部分 ray visibility 中移出;低端设备使用 SSR、shadow maps、reflection probes 和 baked/probe GI 保持材质语义。

Frame graph 需要集中管理 BLAS/TLAS。静态建筑和大件道具预构建 BLAS,移动电梯更新 TLAS transform,变形或高频透明几何按距离和屏幕占比选择 proxy 或 raster-only path。每个 RT effect 声明 ray type、resolution scale、max distance、bounce count、object mask、payload layout、denoiser input 和 fallback mode。Denoiser contract 必须跨 API 一致,核心输入包括 depth、normal、roughness、motion vector、hit distance、radiance 和 history confidence。

性能检查顺序是:先看 AS build/update markers,再看 ray dispatch 分辨率和 ray count,再看 hit shader 与 any-hit cost,再看 denoiser 耗时和 history rejection,再看 composite 后的视觉问题。若反射闪烁,优先检查 motion vector、disocclusion 和 hit distance;若阴影漏光,优先检查 ray bias、normal/depth 边界和 denoiser filter;若平台差异大,优先检查 feature profile、material hit behavior 和 fallback 语义是否统一。

本章知识点总结

  • 主趋势:实时 RT 正在从单一效果进入 frame graph 中的光传输子系统。
  • 贯穿路径:一帧 RT 结果由 G-buffer、AS update、ray dispatch、denoiser 和 composite 共同决定。
  • BVH 作用:BVH 通过层级 bounding boxes 降低 ray 与场景几何的相交查询成本。
  • 硬件边界:RT 专用单元主要加速 traversal 和 intersection,材质、采样、降噪和同步仍受通用 GPU 资源约束。
  • Shader table:Shader table 把 ray type、geometry、material 和 hit behavior 连接成可调度的着色入口。
  • Inline query:Inline ray query 适合短路径 visibility 查询,完整 ray pipeline 更适合集中 dispatch 和 denoising。
  • 跨平台抽象:DXR、Vulkan RT 和 MetalRT 的名称不同,engine 抽象应集中到 AS、dispatch、binding、denoiser 和 fallback。
  • TLAS BLAS:静态几何、移动刚体和变形网格需要不同 AS 更新策略,更新成本会直接影响帧稳定性。
  • Denoiser 输入:Depth、normal、roughness、motion vector、hit distance 和 history confidence 决定少量 rays 能否形成稳定图像。
  • Ray budget:每个 RT effect 都应声明分辨率、ray 数量、最大距离、bounce、object mask 和更新频率。
  • 材质简化:不同 ray type 对材质细节的需求不同,hit behavior 应按 shadow、reflection 和 GI 分开设计。
  • ReSTIR 价值:ReSTIR 通过时空重采样提高动态多光源场景中少量 samples 的有效性。
  • Path guiding:Path guiding 把采样方向推向更可能贡献 radiance 的区域,适合辅助 GI 和多 bounce path tracing。
  • 神经缓存:Neural radiance cache 把部分间接光查询转成可在线更新的 radiance 近似,但仍依赖真实 samples 和历史验证。
  • 验收顺序:先进 RT 算法进入产品时,应检查提升对象、输入依赖、失败形态和 fallback 语义。