中EN
概念页

硬件光线追踪管线

Hardware Ray Tracing Pipeline

高端 GPU 提供硬件加速的光线追踪,它像 GPU 中独立于光栅管线和计算管线的另一条管线,但能与它们协调同步。场景几何要先组织成两层加速结构(TLAS 实例层与 BLAS 几何层),光线发射后由 any-hit、closest-hit、miss 等着色器处理结果。由于还不够快,GPU 光追通常与光栅化结合成混合渲染:先光栅化 G-buffer,再对镜面、反射和间接光发射光线。

加速结构(卷 II 11.4.6.3)

光线追踪也可以完全在 CPU 上或用计算着色器实现;硬件光追则要求把场景几何以加速结构的形式交给 GPU。它相当于一种场景图,让光追着色器快速查出每条光线可能击中哪些图元。下图是两层结构。

flowchart TD
    T["TLAS 顶层加速结构"] --> I1["实例: id + 变换矩阵 + BLAS 引用"]
    T --> I2["实例: id + 变换矩阵 + BLAS 引用"]
    I1 --> B1["BLAS 底层加速结构: 几何图元及其包围体"]
    I2 --> B1
    I2 --> B2["BLAS: 程序化几何节点, 如解析球"]
  • TLAS(top-level acceleration structure)描述构成场景的几何图元实例;每个条目含实例 id、把几何放到世界空间的变换矩阵,以及对 BLAS 中几何节点的引用。
  • BLAS(bottom-level acceleration structure)存放实际的几何图元和它们的包围体;也可以包含程序化几何节点,让光线与球等解析表面求交。
  • 通用的 BVH 与求交原理见 空间数据结构、光线求交测试。

发射光线与处理结果

  • CPU 上的应用调用光线分派 (ray-dispatch) 函数生成一批批光线;GPU 上的着色器也能直接产生新光线。
  • 检测到相交时调用两类着色器:
    • any-hit 着色器:光线上的每一个交点都会调用;可以拒绝该命中,或接受并让测试继续或提前终止,还能修改光线参数。

      原书问题(11.4.6.3):any-hit 着色器不能修改光线本身(原点、方向、tt 区间只读),也不能调用 TraceRay 发射新光线;它能做的是读写光线负载 (payload),并通过 IgnoreHit() 拒绝命中或 AcceptHitAndEndSearch() 提前结束遍历。能发射新光线的是光线生成、closest-hit 和 miss 着色器(DirectX Raytracing 功能规范,"Shader types"/"TraceRay" 可调用阶段表;Vulkan VK_KHR_ray_tracing_pipeline 同理)。

    • closest-hit 着色器:与 any-hit 类似,但还能发射新的光线来模拟反射。
  • 没有击中任何几何的光线调用 miss 着色器,它也能修改光线参数、发射新光线。

混合渲染的典型用法

GPU 光追还不足以支撑完全用光线追踪渲染一个场景所需的数百万条光线,所以通常与光栅化结合:先用传统光栅化把场景渲染进 G-buffer(见 延迟着色),在屏幕空间计算漫反射光照,再对需要镜面高光、反射或间接(反弹)光照的区域发射光线。GEA 把这类引擎称为混合渲染引擎(见 图形栈与渲染引擎架构)。随机光线追踪与路径追踪的原理在 GEA 卷 II 12.6 节展开。

局限:场景要描述两次

  • 光栅管线通常把几何描述成 LOD 层级,同一表面按离相机远近用不同表示(见 细节层次);光线追踪需要与 LOD 无关的表示,因为发射光线时离相机的距离无关紧要。
  • 目前 TLAS/BLAS 与传统网格数据结构不兼容,想用硬件光追的引擎必须把场景描述两次:一份给光追管线,一份用另一种格式给光栅管线。GEA 说图形程序员希望未来的实现能让两条管线更好地共享几何数据。

特性级别

GEA 表 11.2:硬件光追从特性级别 11_0 起可选,在 12_2 成为必需(Tier 1.1)(见 图形 API 设备、管线状态与资源)。UE5 中硬件光追的启用和用法见 硬件光线追踪与路径追踪器,光追硬件单元的结构见 并行图形架构与排序分类。

取舍

  • 好处:能做光栅化难以做好的镜面反射、间接光等效果,且可与光栅管线协同。
  • 代价:光线数量受限,只能用于部分效果;加速结构要额外构建和维护,并与光栅用的 LOD 网格数据重复(卷 II 11.4.6.3)。光线追踪本身缓存不友好、难以并行,是它长期没有用于实时渲染的原因(卷 II 11.1.2)。

GEA 第 12 章的补充(卷 II 12.6.5.2、12.9.3)

  • 硬件加速结构在内部实现为 BVH,但只暴露 TLAS 和 BLAS 两层。BLAS 通常对应一个或多个 3D 模型,引用整理成 GPU 可用顶点缓冲和索引缓冲的原始三角形数据;模型通过实例化组成场景,例如一个垃圾桶模型在城市场景中实例化 100 次。每个 TLAS 包含多个 BLAS 实例(通常有预定的最大容量),每个实例用变换矩阵定位(卷 II 12.6.5.2)。BVH 本身的原理见 随机光线追踪与路径追踪 和 空间数据结构。
  • 静态关卡几何的 TLAS/BLAS 加速结构可以在资产调理阶段离线生成,和 BSP 树、四叉树、八叉树、包围球层次一样(卷 II 12.9.3)。

PBRT 的视角:CPU 端的实例化与两层结构(PBRT 4e 7.1.2)

PBRT 的 CPU 路径没有硬件 TLAS/BLAS,而是用软件实现同样的思想;GPU 路径则直接用光追 API 的加速结构(书中 15.3.6 节)。

概念硬件光追(上文)PBRT CPU 路径
底层结构BLAS:三角形几何一个 BVHAggregate(任何 Primitive 集合)
实例TLAS 条目:实例 id + 变换 + BLAS 引用TransformedPrimitive:变换 + Primitive 指针;运动用 AnimatedPrimitive
顶层TLAS场景级 BVHAggregate,叶子是实例
层数固定两层任意嵌套(元层次结构)

PBRT 的一个设计取舍:被实例化的形状不知道实例变换。若让三角网格知道所有实例变换,它就得为每个实例拷贝一份变换后的顶点,抵消实例化省下的内存。数量级见书中生态场景:内存里 2400 万三角形,经实例化表示 31 亿三角形,约 4 GB 对比 516 GB 以上。BVH 本身的细节见 空间数据结构。

  1. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  2. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 11 章 11.4.6.3 节
  3. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 12 章 12.6.5.2、12.9.3 节
  4. PBRT 4e source excerpt: chapter 07 (Primitives and Intersection Acceleration)
  5. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 7 章 7.1.2 节,pbr-book.org/4ed/Primitives_and_Intersection_Acceleration

相关页面

图形学图形栈与渲染引擎架构Graphics Stack & Rendering Engine Architecture渲染引擎要解决的"渲染问题"是:给定由场景元素、虚拟光源和虚拟相机组成的虚拟世界,生成相机看到的二维彩色图像。GEA 把它拆成可见性问题和光照问题,按解法把引擎分为光线追踪、深度缓冲光栅化、辐射度和混合四类;光栅化引擎通常采用立即模式的两层结构:下层是图形管线,上层是负责剔除、提交几何和设置着色器参数的应用层。本页讲这套整体架构,管线内部见 渲染管线。图形学空间数据结构Spatial Data Structures空间数据结构把几何体按 n 维空间组织起来,通常是层次化的树,使"几何体是否重叠"一类查询从 O(n) 降到大约 O(\log n)。常见类型有包围体层次 (BVH)、BSP 树(轴对齐的 k-d 树与多边形对齐两种)、四叉树/八叉树(含松散八叉树),以及更偏向组织模型关系的场景图。它们是剔除、光线求交、碰撞检测等加速算法的基础。图形学并行图形架构与排序分类Parallel Graphics Architectures & Sort Taxonomy提升图形速度的最佳方式是并行:多个几何单元、光栅化单元和像素处理单元同时工作再合并结果。Amdahl 定律指出串行部分限制总加速比。由于 API 要求按提交顺序处理图元,并行单元之间必须在某处做"模型空间到屏幕空间"的排序,按排序位置分为 sort-first、sort-middle、sort-last fragment、sort-last image 四类,各有负载均衡与带宽取舍。本页还简述光线追踪硬件的共同特征。图形学延迟着色Deferred Shading延迟着色先用一遍几何 pass 把所有可见表面的材质参数写入多张渲染目标(G-buffer),再以后处理方式对这些存储值逐光源计算光照,从而把"几何可见性"与"光照"彻底解耦,并把材质与光源分离。它避免了着色的过度绘制、简化了着色器管理、天然适合贴花,但 G-buffer 占用显存和带宽,且难以直接支持透明和 MSAA。本页也覆盖前向渲染下限制光源影响范围的基础手段与"光照预通道 (light prepass)"类混合方案。图形学细节层次Level of Detail细节层次 (LOD) 在物体对图像贡献变小时改用更简单的表示。LOD 系统由三部分组成:生成(简化或手工制作多个版本)、选择(按距离、投影面积等收益函数挑选)、切换(尽量减少跳变 popping)。LOD 主要减少顶点处理,也通过减少 quad 过度着色降低像素开销;进一步还可在预算约束下全局选择 LOD,实现时间关键(恒定帧率)渲染。图形学网格着色器管线Mesh Shader Pipeline网格着色器管线(也叫网格几何管线)是 GPU 厂商为取代传统光栅管线前段而推出的新架构:光栅化器和像素着色器不变,网格着色器和可选的放大着色器(任务着色器)接管顶点、外壳、域和几何着色器的全部工作。它以类似计算着色器的线程组处理叫 meshlet 的小批图元,像启动计算着色器一样启动绘制,还能把部分应用层工作搬到 GPU 上。2019 年进入 DirectX 12,2022 年以 VKEXTmeshshader 扩展进入 Vulkan。图形学图形 API 设备、管线状态与资源Graphics API Devices, Pipeline State & Resources所有图形 API(OpenGL、DirectX、Vulkan、Metal)都围绕同一组概念:代表 GPU 的设备、描述各阶段配置的管线状态、承载数据的资源及其视图。GEA 把 API 分成高层(OpenGL、D3D11 及更早)和底层(D3D12、Vulkan、Metal、PlayStation 的 Gnm),并介绍 D3D11 的特性级别、设备上下文与延迟上下文、D3D12 的命令列表、PSO 和根签名。本页按 GEA 的整理讲这些跨 API 的共同概念,不是任何一个 API 的教程。图形学渲染方程Rendering Equation渲染方程 (Kajiya, 1986) 把"某点接收到的光就是其他点发出或反射的光"写成递归积分,概括了光从光源出发经任意次反弹到达眼睛的所有路径。反射方程是它的受限特例。离线用辐射度 (Radiosity) 或蒙特卡洛路径追踪求解;实时渲染则靠简化和预计算逼近它(RTR4 第 11 章)。游戏开发 · UE5硬件光线追踪与路径追踪器Hardware Ray Tracing & Path TracerUE5 的硬件光线追踪 (HWRT) 大部分功能都集成在 Lumen 里;也有光追阴影等独立功能。Lumen 在显卡、RHI 和操作系统支持时使用 HWRT,否则回退到软件光追;反射光线可以用表面缓存(快)或命中点光照(质量高)来着色;实例超过 10 万时,HWRT 的场景更新开销很大。路径追踪器 (Path Tracer) 是渐进式、硬件加速的无偏渲染模式,用作 ground truth 参考和影视级最终输出,与 Sequencer/Movie Render Queue 集成。游戏数学光线求交测试Ray Intersection Tests光线求交用于拾取、光线追踪、地面高度查询等。本页给出四类经典测试:光线-球(代数解与带早期拒绝的几何优化解)、光线-盒(平板法与光线斜率法)、光线-三角形(Möller-Trumbore,直接从顶点求重心坐标与距离)、光线-多边形(先求平面交点,再投影到二维做交叉数测试)。共同思路是先做便宜的拒绝测试、推迟除法与开方、必要时降维。图形学随机光线追踪与路径追踪Stochastic Ray Tracing & Path Tracing光线追踪用投射光线同时解决可见性问题和光照问题。GEA 从最简单的"眼睛光线 + 着色方程"讲起,逐步加入阴影光线、透射光线、用蒙特卡洛估计渲染方程的随机光线追踪、递归间接光照,再到每次只走一条路径的路径追踪、双向路径追踪和 Metropolis 光传输,最后讨论降噪与光线投射效率(GEA4 卷 II 12.6.3–12.6.5)。游戏开发资产管线与工具链Asset Conditioning Pipeline & Tools游戏引擎的输入数据来自美术使用的数字内容创作 (DCC) 工具,但 DCC 格式几乎从不直接用于游戏,必须经过资产调理管线 (Asset Conditioning Pipeline, ACP) 导出、处理并按平台打包。围绕它还有世界编辑器、记录资产元数据的资源数据库,以及几种工具架构(独立工具、与引擎共享底层、编辑器内嵌于引擎、Web 界面),各有取舍。图形学波前路径追踪Wavefront Path Tracing波前 (wavefront) 架构把路径追踪拆成一串独立的 GPU 内核(生成相机光线、采样、求交、介质采样、逃逸光线、命中发光体、按材质分开的着色、阴影光线、写胶片),内核之间用工作队列传递数据;每个内核开始时线程都在做同一件事,执行是收敛的。代价是每个内核都要从显存读入、再写回全部状态,因此更受带宽限制。pbrt 4e 的 GPU 渲染路径 WavefrontPathIntegrator 就是这种结构,算法与 CPU 上的 VolPathIntegrator 完全相同(见 参与介质与体积散射),只改变计算的组织方式和数据布局。注意术语:这里的"波前"指整批光线按深度推进的处理方式,与 AM

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原