约 27 分钟技术学习游戏引擎

Games104学习笔记(8)

GAMES104:游戏中渲染管线、后处理和其他的一切

第 7 讲|主题:Render Pipeline、Post-process and Everything
视频时长:约 1 小时 58 分 50 秒
说明:本文根据本地视频课件与讲解脉络整理,不是逐字稿。

一句话理解

游戏渲染管线的职责,是管理一帧中各种渲染操作的执行顺序、数据依赖、资源状态与计算预算。在几何和光照结果产生后,AO、雾、抗锯齿、Bloom、Tone Mapping、Color Grading 等后处理继续修正最终图像;而 Deferred Rendering、Visibility Buffer、Frame Graph 等架构,则把“看见什么”“如何着色”和“如何调度资源”进一步解耦。

本讲学习目标

  • 理解 AO、雾和抗锯齿分别在解决什么视觉问题。
  • 区分预计算 AO、SSAO、HBAO、GTAO 与光追 AO 的基本思路。
  • 掌握深度雾、高度雾和体积雾的适用范围。
  • 理解 SSAA、MSAA、FXAA、SMAA 与 TAA 的采样位置和性能差异。
  • 说明 Bloom、Gaussian Blur、Tone Mapping、LUT 与 ACES 在后处理中的职责。
  • 了解透明物体排序、多光源 Deferred Rendering、Tile-based Rendering 和 Visibility Buffer。
  • 用 Frame Graph 的视角理解现代引擎如何管理 Pass、资源依赖、生命周期和状态转换。

1. 渲染管线到底管理什么

渲染管线不是简单地把“模型提交给 GPU”。它要回答一帧中的一系列系统问题:

  • 哪些资源先生成,哪些 Pass 必须等待它们?
  • 阴影、深度、材质、光照、透明和后处理的顺序是什么?
  • 一个纹理或 Buffer 当前处于什么读写状态?何时需要同步或转换?
  • 哪些中间结果可以复用、压缩、降分辨率或延迟生成?
  • 多个 GPU/CPU 工作能否并行,怎样确保在下一帧开始前完成?

课件给出的基本结构可以概括为:

Shadow Pass → Shading → Post-process

实际引擎会在这个骨架上插入深度预处理、环境遮挡、透明、反射、后处理链、UI 合成与显示输出等更多阶段。

2. Ambient Occlusion:补足局部遮挡感

2.1 AO 的视觉作用

环境光遮蔽(Ambient Occlusion, AO)近似描述一个表面点周围有多少方向被几何体挡住。角落、缝隙、物体接触地面的位置更难接收到来自环境的光,因此通常更暗。

AO 的主要作用是提供局部空间关系线索:

  • 让物体与地面有接触感。
  • 让凹槽、墙角和模型细节不显得漂浮。
  • 强化低频的遮挡层次。

它不是完整的阴影,也不等于全局光照。AO 通常不直接表达某个具体光源的方向性,而是对环境可见度的近似。

2.2 预计算 AO

预计算 AO 可以在离线阶段通过光线追踪等方法得到,再将结果存入纹理。它的优点是运行时成本低、质量稳定;缺点是:

  • 需要额外存储和烘焙流程。
  • 主要适用于静态对象。
  • 动态物体、动态几何或动态接触关系无法及时反映。

它适合把稳定的模型细节提前编码,但不适合独自处理实时变化的场景。

2.3 SSAO

屏幕空间环境光遮蔽(Screen Space Ambient Occlusion, SSAO)只使用当前帧的屏幕信息,典型输入是深度 Buffer:

  1. 在每个像素周围生成一组半球或球形样本。
  2. 将样本投影到屏幕空间。
  3. 读取样本位置的深度,与当前像素的深度比较。
  4. 统计被遮挡的样本比例,得到 AO 值。

SSAO 的优点是无需访问完整场景几何,适合实时动态场景;缺点是只能看到屏幕中已有的信息,屏幕外或被遮挡的几何无法参与,结果也容易受采样噪声、半径和深度精度影响。

2.4 HBAO

Horizon-Based Ambient Occlusion(HBAO)把深度 Buffer 看作一个二维高度场,从当前点沿不同方向寻找地平线角度,再根据被遮挡的角域估计 AO。

它相比简单 SSAO 更关注遮挡几何的方向和地平线结构,通常能得到更稳定、更有空间感的结果,但需要更多方向采样、步进和衰减计算。

2.5 GTAO

Ground Truth Ambient Occlusion(GTAO)继续改进屏幕空间 AO 的几何近似:

  • 使用深度信息估计地平线。
  • 改进余弦项带来的方向权重。
  • 移除或重构不够准确的衰减项。
  • 通过较快的近似补充多次遮挡/反弹效果。

课件还展示了使用关于反照率的三次多项式拟合来近似多次反弹的思路。这里的重点不是某条具体拟合式,而是:在不能完整求解光传输时,用低成本模型补回对外观影响较大的能量。

2.6 Ray-Tracing AO

光追 AO 可以从每个屏幕像素发射多条射线,利用光追硬件查询附近几何遮挡。它能突破部分屏幕空间限制,质量和空间一致性更好,但射线数量、遍历成本、噪声处理和时域稳定性都会增加预算压力。

方法 数据来源 优点 局限
预计算 AO 离线几何/光照计算 运行时便宜、稳定 静态为主,需要烘焙与存储
SSAO 屏幕深度 简单、实时、易接入 屏幕空间缺失、噪声和伪影
HBAO/GTAO 屏幕深度 + 地平线近似 方向性和空间感更好 采样/调参成本更高
Ray-Tracing AO 光追硬件/场景几何 视野外遮挡能力更强 射线、降噪和硬件成本高

3. Fog:对距离和空间介质做整合

3.1 Depth Fog

深度雾根据像素深度计算雾的混合系数,将物体颜色向雾颜色过渡。常见形式包括:

  • Linear Fog:随距离线性变化。
  • Exponential Fog:按指数衰减。
  • Exponential Squared Fog:用平方后的密度产生更快或更柔和的衰减。

深度雾成本低、容易控制,适合表达远景空气透视和简单距离雾,但它只依赖深度,不能表现同一深度下因高度、局部体积或光照方向不同而产生的变化。

3.2 Height Fog

高度雾把雾密度看作高度的函数。相机射线穿过不同高度时,需要对沿视线变化的雾密度做积分,因此能表达贴近地面的薄雾、山谷雾与高空稀薄区域。

它比简单深度雾更有空间意义,但射线积分和参数处理更复杂。高度雾仍然是相对低成本的近似,不能表达复杂的局部体积结构。

3.3 Voxel-Based Volumetric Fog

体积雾将空间划分为三维体素/网格,在体素中保存密度和光照相关数据。它可以让光线在雾中产生体积散射,表现灯光穿过烟雾、山谷光束和局部雾团。

基本流程可概括为:

  1. 建立相机视锥内的体积网格。
  2. 将雾密度、局部光源和阴影等信息注入网格。
  3. 在体积中传播或近似计算光照。
  4. 沿相机射线积分体素中的透射与散射。

体积雾的优势是空间一致性与光照互动更强;代价是三维数据存储、光照注入、过滤和视线积分都会增加成本。

4. Aliasing:采样不足造成的失真

锯齿(Aliasing)本质上是高频信号没有被足够采样。渲染时,几何边缘、纹理细节和高光都可能包含高频变化;当屏幕像素数量有限时,高频信息会折叠成闪烁、锯齿、摩尔纹或不稳定的高光。

课件将抗锯齿问题按信号来源分为:

  • Edge Sampling:几何边缘覆盖率采样不足。
  • Texture Sampling:纹理频率超过像素采样能力。
  • Specular Sampling:高光变化太尖锐,随视角/运动出现闪烁。

因此,抗锯齿不是只给三角形边缘加平滑;不同信号需要在不同阶段处理。

5. 抗锯齿方法

5.1 一般采样思路

对一个像素区域进行多次采样,再按照样本覆盖率或权重求和,可以得到更接近连续图像的颜色:

$C_{\mathrm{pixel}} \approx \sum_i w_i C_i$

代价取决于采样发生的位置:是重复整个渲染、只重复光栅化,还是在后处理阶段从已有图像重新估计。

5.2 SSAA

Super-Sample Anti-Aliasing(SSAA)在更高分辨率上完整渲染,再缩小到目标分辨率。它直接、质量高,能同时改善几何、纹理和部分着色锯齿,但会大幅增加光栅化、像素着色和帧缓冲成本。

它是最容易理解的基准方案:用更多真实样本换质量。

5.3 MSAA

Multi-Sample Anti-Aliasing(MSAA)主要针对几何边缘的覆盖采样:一个像素保留多个深度/覆盖样本,但在许多情况下只执行一次像素着色,再根据覆盖关系组合颜色。

因此 MSAA 通常比同倍率 SSAA 更便宜,但它对纯纹理高频、着色器内部产生的高频变化和透明物体的支持并不完整。

5.4 FXAA

Fast Approximate Anti-Aliasing(FXAA)在已渲染图像上做后处理:

  1. 从亮度/颜色变化中检测边缘。
  2. 沿边缘方向估计需要平滑的区域。
  3. 对当前像素进行偏移采样,并与邻域混合。

FXAA 不需要重新渲染几何,成本低、接入简单;但它是图像级近似,可能模糊细节,也可能误把真实高频纹理当作边缘。

5.5 SMAA

Subpixel Morphological Anti-Aliasing(SMAA)使用更精细的边缘搜索与形状判断:

  • 根据局部对比度确定边缘。
  • 沿水平/垂直等方向搜索边缘端点。
  • 估计边缘覆盖面积。
  • 依据混合权重合成邻近像素。

它在图像后处理成本和边缘质量之间取得比简单 FXAA 更好的平衡,但实现与调参更复杂。

5.6 TAA

Temporal Anti-Aliasing(TAA)利用时间维度的多个帧:

  • 使用当前帧颜色和上一帧历史颜色。
  • 通过 Motion Vector 将历史像素重投影到当前帧。
  • 用邻域约束、颜色范围和混合权重抑制错误历史。
  • 对当前帧与历史结果进行时空滤波。

TAA 能以较低的单帧采样成本获得更平滑的结果,还可复用历史样本处理高光和阴影噪声;但会遇到拖影、重影、历史失配和快速运动下的稳定性问题。

方法 主要采样位置 强项 典型问题
SSAA 整个高分辨率渲染 质量直接、全面 成本最高
MSAA 光栅化覆盖样本 几何边缘、实时性 对着色/透明高频不完整
FXAA 后处理邻域 便宜、简单 容易模糊
SMAA 后处理边缘形状 边缘判断更细 算法更复杂
TAA 当前帧 + 历史帧 时域复用、成本可控 拖影、重影、运动失配

6. Post-process:在图像空间继续塑造画面

后处理是在三维场景已经完成部分或全部绘制后,对颜色、亮度、深度或其他屏幕资源进行处理。它的优势是输入通常是屏幕大小的纹理,能统一作用于整个画面;限制是许多三维信息已经被压缩或丢失,后处理无法凭空恢复完整几何。

课程展示的常见后处理包括:

  • Bloom;
  • Tone Mapping;
  • Color Grading;
  • Blur 与各种图像滤波;
  • 结合深度、法线、运动向量的屏幕空间效果。

7. Bloom 与 Gaussian Blur

7.1 Bloom 的视觉来源

现实中的镜头、眼睛和成像系统并不会把高亮像素限制在单个像素内。衍射、散射和有限分辨率会让强光向周围扩散,形成光晕。游戏中的 Bloom 用图像近似这种高亮扩散。

7.2 基本 Bloom 流程

  1. 从 HDR 图像中提取超过阈值的高亮区域。
  2. 对高亮图进行降采样和模糊。
  3. 将模糊结果按强度与原图合成。

关键参数包括阈值、扩散半径、强度、颜色和是否在 Tone Mapping 前后处理。Bloom 的目标是让高亮拥有光学感觉,而不是把整张图无差别变亮。

7.3 Gaussian Blur

高斯模糊使用近似高斯分布的权重,让中心像素权重大、远处像素权重逐渐减小。二维高斯核可以分离成两个一维核:

  • 先做水平方向模糊。
  • 再做垂直方向模糊。

这种 Separable Gaussian Blur 能把二维卷积的成本显著降低。

7.4 Pyramid Gaussian Blur

当需要大范围模糊时,直接使用很大的卷积核仍然昂贵。金字塔模糊会先逐级降采样,在较小分辨率上完成宽范围模糊,再逐级上采样或合成。

它尤其适合 Bloom 等低频效果:远处的光晕不需要在原始分辨率上保留所有细节。

8. Tone Mapping、LUT 与 ACES

8.1 Tone Mapping 的问题

现代光照常在 HDR 范围内计算,而显示设备和最终输出通常需要有限范围的 LDR 颜色。Tone Mapping 将 HDR 映射到显示范围,同时尽量保留:

  • 高光层次;
  • 阴影细节;
  • 中间调对比度;
  • 颜色关系与整体风格。

简单的截断会导致高光全部变白、细节丢失;合适的曲线则会在压缩亮度范围的同时维持画面观感。

8.2 曲线与艺术风格

Tone Mapping Curve 常被设计成具有柔和肩部的 S 型或类似曲线:

  • 暗部保持一定分辨率,避免全部压黑。
  • 中间调维持对比度。
  • 高光逐渐压缩,避免突然截断。

不同曲线会给人不同的胶片感、对比度和饱和度。它既是显示转换的一部分,也是画面风格控制的一部分。

8.3 Lookup Table

颜色查找表(LUT)将输入颜色映射到输出颜色。运行时可以把当前图像颜色作为 LUT 坐标,查到经过预设调色后的结果。

LUT 的价值在于将复杂调色结果压缩成可实时采样的资源,让艺术家能够在外部工具中调整颜色风格,再由引擎统一应用到画面或特定区域。

要注意 LUT 不是光照模型,也不是 Tone Mapping 的唯一实现;它更像一个高效的颜色变换载体。

8.4 ACES

ACES(Academy Color Encoding System)面向电影、动画和跨设备颜色管理。课程强调其两个重要方向:

  • 在 HDR 中处理颜色编码和显示变换。
  • 将艺术意图与设备/显示机制分离,使同一套内容可以适配不同输出设备。

对游戏引擎来说,ACES 的启发是建立一致的色彩管理链,而不是在每个材质或后处理 Pass 中随意调颜色。

9. 透明物体与多光源

9.1 透明物体为什么要排序

不透明物体可以借助深度测试隐藏后方片元;普通 Alpha Blending 通常需要将前后颜色按顺序混合,因此透明物体的绘制顺序会影响结果。

常见做法是:

  • 不透明物体先画,建立稳定深度。
  • 透明物体按从远到近排序,再进行混合。

透明排序有两个困难:物体可能互相穿插,且三角形级别的严格排序可能形成环,无法用简单的全局顺序完美解决。实际引擎往往结合分层、近似排序、深度预处理和特殊透明算法。

9.2 Forward 渲染与许多光源

在 Forward Rendering 中,一个可见片元通常要在着色阶段遍历影响它的多个光源。光源数量增加后,片元着色成本快速上升,且同一几何可见性可能被反复处理。

这推动了 Deferred Rendering 等方案:先保存可见表面信息,再在屏幕空间按光源计算光照。

10. Deferred Rendering 与 G-Buffer

10.1 基本流程

Deferred Rendering 将渲染拆成两步:

  1. Geometry Pass:把可见片元的法线、深度、反照率、粗糙度等信息写入 G-Buffer。
  2. Lighting Pass:读取 G-Buffer,在屏幕空间计算光照。

这样每个光源只需要处理屏幕上实际可见的片元,而不必对不可见几何重复运行完整材质着色。

10.2 优点

  • 光照只计算可见片元。
  • 可以在 G-Buffer 上复用深度、法线等数据完成 AO、光照、后处理。
  • 多光源场景更容易将光源影响限制到屏幕区域或 Tile。

10.3 局限

  • G-Buffer 需要写入和读取多张大纹理,内存带宽和显存占用高。
  • 普通透明物体不适合直接套用不透明 Deferred 流程。
  • 多重采样抗锯齿、材质表达和高精度数据会进一步增加 G-Buffer 代价。
  • 材质、光照和几何属性被拆分后,资源格式与调试复杂度上升。

11. Tile-Based Rendering

Tile-based Rendering 将屏幕划分为许多小块,在每个 Tile 内先找出可能影响该区域的光源或其他数据,再进行着色。

11.1 为什么分 Tile

一个点光源通常只影响有限的屏幕范围。如果每个片元都遍历所有光源,很多计算会被浪费。按 Tile 建立光源列表后,片元只处理本 Tile 相关的光。

11.2 典型流程

  1. 根据光源体积或投影范围,将光源分配到屏幕 Tile。
  2. 将 Tile 的光源列表写入 GPU 可访问的结构。
  3. 着色时根据像素所在 Tile 读取局部光源列表。

它可以与 Deferred 或 Forward+ 等路径结合。关键是把“光源是否影响当前像素”的筛选提前做成空间分组。

12. Visibility Buffer:把可见性与材质着色分开

12.1 G-Buffer 与 V-Buffer 的差别

G-Buffer 通常直接存储多个着色所需属性,例如法线、深度、反照率和粗糙度。Visibility Buffer(可见性 Buffer)更倾向于存储:

  • 当前像素对应的三角形/Primitive ID;
  • 深度;
  • 三角形内的重心坐标等插值信息。

之后的材质阶段可根据 Primitive ID 找到原始顶点、材质和纹理,再重建该像素属性。

12.2 为什么只存可见性信息

如果先把所有材质属性都写入 G-Buffer,几何通道需要大量带宽。V-Buffer 只记录“屏幕上哪一个三角形覆盖了这里”,将材质着色延迟到后续阶段,可以:

  • 减少部分 G-Buffer 属性写入。
  • 延迟或筛选材质计算。
  • 更灵活地组织材质、几何和着色的关系。

代价是需要可靠的 Primitive ID 管理、顶点属性重建、材质查找和反走样处理;不同硬件与材质路径也需要做适配。

13. Frame Graph:用依赖图编排一帧

13.1 为什么需要 Frame Graph

现代渲染器通常包含大量 Pass 和临时资源。手工维护每个 Pass 的执行顺序、资源状态和同步点容易产生错误,也会限制并行调度与内存复用。

Frame Graph 将一帧表达为有向无环图(DAG):

  • 节点是 Render Pass。
  • 边表示资源读写依赖。
  • 资源声明其创建、读取、写入和释放范围。

图构建完成后,渲染器可以根据依赖推导合法执行顺序和资源转换。

13.2 它可以自动帮助什么

一个成熟的 Frame Graph 通常负责或辅助:

  • 对 Pass 进行拓扑排序。
  • 插入资源状态转换和必要的同步。
  • 发现未被消费的中间结果并裁剪工作。
  • 复用生命周期不重叠的临时纹理/Buffer。
  • 为并行录制 Command、异步计算和跨队列同步提供依据。
  • 统一追踪资源创建、别名、尺寸、格式和调试名称。

13.3 三类系统挑战

课件把现代管线的难点概括为:

  1. 并行工作很多,但资源依赖复杂,需要正确同步。
  2. 临时资源的生命周期短,适合复用,却必须保证不会发生读写冲突。
  3. 新 GPU 特性不断出现,渲染器需要暴露能力,同时不能要求每个用户理解底层硬件细节。

Frame Graph 的价值在于把这些约束显式化,让管线从“手写的一长串函数调用”变成可以分析和优化的数据结构。

13.4 Variable Refresh Rate

可变刷新率(Variable Refresh Rate, VRR)让显示设备根据渲染帧的完成节奏调整刷新时机。它可以减少固定刷新节奏与实际帧率不匹配带来的撕裂或等待,但也让渲染、提交、显示同步和延迟控制需要更明确的协作。

这说明渲染管线的边界不止在 GPU:最终帧何时显示,同样是引擎和平台系统需要共同管理的时序问题。

14. 后处理与渲染管线的关系

后处理不是渲染管线的“最后随便加几个效果”,而是依赖前序资源契约的一组阶段:

  • AO 可能依赖深度、法线或历史信息。
  • 雾依赖深度、世界位置和体积光照。
  • TAA 依赖 Motion Vector、历史颜色和邻域约束。
  • Bloom 依赖 HDR 颜色与高亮提取。
  • Tone Mapping/LUT 依赖正确的颜色空间和曝光。
  • UI 合成需要明确是在 Tone Mapping 前还是后完成。

因此,后处理质量问题经常不是某个滤波器单独造成的,而是资源分辨率、颜色空间、Pass 顺序、历史帧有效性和输入格式共同造成的。

15. 本讲的系统性结论

15.1 一条渲染架构链

可见几何与深度
→ 阴影、AO、G-Buffer/V-Buffer 等中间结果
→ 直接光与多光源着色
→ 透明物体按规则混合
→ 雾、Bloom、抗锯齿等屏幕空间处理
→ HDR Tone Mapping 与颜色管理
→ UI/显示输出。

15.2 选择技术要看输入和预算

  • AO 是局部遮挡近似,不替代方向性阴影或完整 GI。
  • 深度雾简单便宜,体积雾更真实但需要三维数据与积分。
  • SSAA 以高成本获得全面采样,MSAA 更针对几何边缘。
  • FXAA/SMAA 依赖图像边缘判断,TAA 依赖历史与运动信息。
  • Deferred 适合多光源不透明场景,但会增加 G-Buffer 带宽和透明处理难度。
  • Visibility Buffer 用 Primitive ID 和重心坐标延迟属性重建,换取更灵活的着色组织。
  • Frame Graph 不负责创造画面算法,但负责让大量 Pass 和资源可分析、可调度、可复用。

16. 复习用速记

问题 核心答案
AO 在解决什么? 近似环境光被局部几何遮挡的程度
SSAO 的主要限制? 只能使用屏幕空间已有信息
HBAO/GTAO 比简单 SSAO 多考虑什么? 地平线、方向性和更好的几何近似
深度雾与体积雾区别? 前者按深度混合,后者在三维介质中进行光传输近似
MSAA 为什么比 SSAA 便宜? 主要增加覆盖/深度样本,不必完整重复所有像素着色
TAA 为什么需要 Motion Vector? 把历史帧样本重投影到当前帧
Bloom 先做什么? 从 HDR 图像提取高亮,再模糊并合成
Tone Mapping 解决什么? 将 HDR 颜色压缩到显示输出范围并保留观感
Deferred 的核心变化? 先记录可见表面属性,再在屏幕空间计算光照
V-Buffer 主要存什么? 可见 Primitive 的身份、深度与重心坐标等信息
Frame Graph 的节点和边? Pass 是节点,资源读写依赖是边

17. 自测题

  1. AO 与阴影、全局光照分别有什么区别?
  2. 预计算 AO 为什么不适合直接处理动态物体?
  3. SSAO 如何从深度 Buffer 估计遮挡?
  4. HBAO 为什么要寻找地平线角度?
  5. GTAO 的改进方向是什么?
  6. 深度雾、线性高度雾和体积雾各自依赖哪些数据?
  7. 什么是 Aliasing?为什么几何边缘、纹理和高光都可能产生锯齿?
  8. SSAA 与 MSAA 的采样位置和成本有什么差别?
  9. FXAA、SMAA 与 TAA 分别如何得到抗锯齿结果?
  10. TAA 中历史帧为什么会产生拖影或重影?
  11. Bloom 为什么通常先提取高亮再做模糊?
  12. 为什么 Gaussian Blur 可以拆成水平和垂直两个一维卷积?
  13. Tone Mapping 与 LUT 的职责分别是什么?
  14. 普通透明物体为什么通常要按从远到近排序?
  15. Deferred Rendering 为什么适合多光源不透明场景?它的主要代价是什么?
  16. Visibility Buffer 相比 G-Buffer 延迟了哪些工作?
  17. Frame Graph 如何利用资源生命周期进行内存复用?

18. 术语表

术语 含义
AO Ambient Occlusion,环境光遮蔽,近似局部环境可见度
SSAO Screen Space Ambient Occlusion,基于屏幕深度的 AO
HBAO Horizon-Based Ambient Occlusion,基于地平线角度的 AO
GTAO Ground Truth Ambient Occlusion,改进地平线与遮挡近似的 AO
RTAO Ray-Traced Ambient Occlusion,基于光线追踪的 AO
Fog 雾;对光沿距离或体积介质传播的近似
Volumetric Fog 在三维体素/介质中计算散射和透射的雾
Aliasing 采样不足造成的锯齿、闪烁或频率折叠失真
SSAA Super-Sample Anti-Aliasing,超采样抗锯齿
MSAA Multi-Sample Anti-Aliasing,多重采样抗锯齿
FXAA Fast Approximate Anti-Aliasing,快速近似后处理抗锯齿
SMAA Subpixel Morphological Anti-Aliasing,子像素形态学抗锯齿
TAA Temporal Anti-Aliasing,利用历史帧的时域抗锯齿
Bloom 从高亮区域扩散出光晕的后处理效果
Gaussian Blur 使用高斯权重进行邻域平滑的滤波
Tone Mapping 将 HDR 颜色映射到有限显示范围的过程
LUT Lookup Table,用表格执行颜色或其他数值映射
ACES Academy Color Encoding System,面向影视和跨设备颜色管理的系统
G-Buffer Deferred Rendering 中存放可见表面属性的缓冲集合
Deferred Rendering 先记录可见表面,再在后续阶段计算光照的渲染路径
Tile-Based Rendering 按屏幕 Tile 分组和筛选光源/数据的渲染方式
Visibility Buffer 主要记录可见 Primitive、深度、重心坐标等信息的缓冲
Frame Graph 以 Pass 和资源依赖图描述一帧渲染工作的调度系统
Render Pass 读写渲染资源并完成一类工作的管线阶段
VRR Variable Refresh Rate,可变刷新率显示机制

19. 参考资料