NOTE系列导航:00 总览 → 01 线程与 Scene Proxy → 02 可见性与 Mesh Drawing → 03 RDG → 04 Deferred Frame → 05 Nanite。版本基线为 UE 5.8 Desktop Deferred。
先给结论
理解 UE5 的一帧,最稳妥的方法不是背 GPU Capture 中的 Pass 排列,而是追踪核心资源:
谁生产 SceneDepth?谁生产 GBuffer 与 Velocity?谁消费 Depth / GBuffer 得到 Shadows、GI、Reflections 和 Lighting?SceneColor 在哪一步仍是 HDR / Pre-Exposed?Temporal History 何时读入、何时写回?内部渲染分辨率在哪一步变成输出分辨率?默认 Desktop Deferred 的主干可以概括为:
Scene / View 更新 → 可见性与几何前端 → Depth / HZB → GBuffer / Velocity → Shadows + GI + Reflections + Direct Lighting → Atmosphere / Fog / Translucency → Temporal Upscale 与 Post Process → Tonemap / UI / Present但它不是固定线性清单。Nanite、Early Z、DBuffer、VSM、Lumen、Hardware RT、Water、Translucency 位置、TSR 和 Async Compute 都会改变实际 RDG 拓扑。
一帧资源依赖总图
这里把大量子 Pass 合并为功能节点。例如 Lumen 内部有 Scene Update、Surface Cache、Screen Probe Gather、Reflections 和 Temporal Filter;TSR 内部也有多个重投影、Reject、Resolve 与 History Pass。GPU Capture 中不应期待每个框只对应一个事件。
先认清五类资源
1. Scene Texture
Renderer 把一组按 View / Scene 配置建立的纹理组织为 Scene Textures,常见语义包括:
- Scene Depth / Stencil;
- Scene Color;
- GBuffer MRT;
- Velocity;
- Small Depth / HZB 等派生深度;
- Custom Depth / Stencil;
- Mobile 或特定路径的替代布局。
FSceneTexturesConfig 一类配置决定 Extent、Format、Sample Count 与功能开关,FSceneTextures / Scene Texture Parameters 把资源带进 RDG 和 Shader。字段与布局随版本变化,应搜索当前分支而不是照抄旧版结构体截图。
2. Lighting / Shadow 中间资源
包括 Shadow Depth、VSM Page / Physical Pool、Screen Shadow Mask、Light Grid、Diffuse Indirect、Reflection、AO 等。它们通常不跨帧永久存在,但 VSM Cache、Lumen Scene 与部分 History 有持久外部状态。
3. Temporal History
TSR / TAA、Lumen、Exposure、Occlusion 与部分降噪器会读取上一时刻状态。History 通常是 External Resource:当前 Graph 注册并读取旧 History,生成新结果,再提取给未来帧。
4. View Uniform 与 Scene GPU Buffer
View Matrix、Jitter、Pre-Exposure、View Rect、Primitive / Instance Scene Data 等不一定表现为二维纹理,却决定所有 Pass 如何解释坐标和数据。
5. Back Buffer / Output Surface
最终图像经过 Tonemap、HDR Output Transform、UI Composite 等进入交换链。Back Buffer 的格式、色域、HDR 模式和平台 Present 策略与内部 SceneColor 不同。
View Rect 不等于 Texture Extent
很多全屏 Shader Bug 来自把 Texture->Desc.Extent 当成当前 View 的有效区域:
Texture Extent:底层资源实际分配尺寸View Rect:当前 View 在资源中的有效矩形Screen Percentage:主渲染 View Rect 相对输出尺寸的缩放Unscaled View Rect:输出 / 目标坐标中的 View 区域分屏、VR、多 View、Dynamic Resolution、Editor Viewport、Scene Capture 和资源对齐都会让它们不同。Shader 采样应使用 View 提供的 UV Scale / Bias、Buffer Size 与 View Rect 参数,不能只除以纹理宽高。
阶段 0:Scene Update 与 View 准备
这一阶段在 GPU Capture 中可能分散在 CPU 和 GPU:
- Game Thread 已把 Component 更新同步给 Renderer Scene;
FSceneRenderer为 View Family 建立FViewInfo;- GPU Scene 上传脏 Primitive / Instance 数据;
- InitViews 计算 Primitive Relevance;
- Instance Culling 与 Nanite 准备当前 View 的几何工作;
- View Uniform Buffer 写入 View / Projection、Jitter、Prev Matrix、Pre-Exposure 等。
它生产的不是最终颜色,而是后续所有 Pass 的可见集合和坐标约定。CPU 的 InitViews 很贵时,不能只在 GPU Profile 里找原因。
阶段 1:Depth、Stencil 与 Early Z
PrePass 的目的
传统 PrePass 先用简化材质路径写入深度,让后续 Base Pass 对被遮挡像素执行 Early Z Reject。项目可以按平台与内容选择:
- 不做完整 PrePass;
- 只画特定 Opaque;
- Opaque + Masked;
- 由引擎自动决定;
- 因 DBuffer、Nanite、Virtual Texturing 或其他功能而需要额外深度工作。
PrePass 是额外几何工作,只有当它减少的 Pixel Shader / Overdraw、提供的 Depth 依赖或其他功能收益超过成本时才划算。
Nanite 与 Scene Depth
Nanite 通过自身 Cull / Raster 流程产生可见性和深度,再与传统几何形成一致的 Scene Depth 语义。不能在 Capture 中只找一条名为 PrePass 的 Draw Event 来代表全部深度生产者。
Stencil 不只是遮罩
Stencil 位可能被 Shading Model、Lighting Channel、Decal、Custom Depth、Hair、Substrate 或其他功能使用。具体 Bit Packing 是版本和路径细节;自定义 Pass 不应占用“看起来没用”的 Stencil Bit 而不检查当前平台定义。
Depth 的消费者
- HZB 构建;
- Base Pass Depth Test;
- Occlusion / Instance / Nanite Culling;
- DBuffer Decals;
- Screen Space Traces;
- SSAO / GTAO;
- Shadow Page Marking;
- Translucency Depth Test;
- DOF、Motion Blur、TSR、Fog 等 Post Process。
阶段 2:HZB
HZB 从 Depth 建立 Mip 金字塔。不同消费者可能需要当前或历史 HZB:
- Primitive / Instance Occlusion;
- Nanite Cluster Occlusion;
- Lumen Screen Traces;
- Screen Space Reflections / AO;
- VSM Page 或其他屏幕覆盖判断。
Capture 中可能存在多个 HZB、Furthest / Closest 语义或不同 View 的 HZB。必须从资源名、Format、Extent 和消费者确认,不能看到 HZB 字样就认定是同一张纹理。
阶段 3:DBuffer Decals(可选)
DBuffer Decal 通常在 Base Pass 前读取 Scene Depth,把 Decal 属性写进独立 DBuffer;Base Pass 再读取并合并到材质输出。这让 Decal 能影响静态 / 间接光照相关材质属性,但引入:
- 对完整或足够 Depth 的依赖;
- DBuffer MRT 带宽与显存;
- Base Pass 额外读取和 Material Permutation;
- 大屏幕覆盖 Decal 的 Overdraw。
其他 Decal 路径可能在 Base Pass 后直接修改 GBuffer / SceneColor,实际阶段取决于 Decal Blend / Material 与平台支持。
阶段 4:Base Pass 与 GBuffer
Base Pass 写什么
Desktop Deferred 的 Opaque / Masked 材质在 Base Pass 把表面属性写入多 Render Target。稳定语义通常包括:
- World / View Space Normal 的编码;
- Base Color;
- Metallic、Specular、Roughness;
- Shading Model 与 Selective Output Mask;
- Material AO;
- Shading Model 专用 Custom Data;
- Precomputed Lighting / Shadow 相关数据(配置相关);
- 初始 HDR SceneColor 或与静态光照相关的贡献;
- Velocity 可能在此写入,也可能走其他阶段。
不要死记 GBufferA.R 之类通道:Packing 会受平台、精度设置、Static Lighting、Substrate、DBuffer、Velocity 配置和版本影响。正确检查方式是:
- Buffer Visualization 看语义;
- RenderDoc / PIX 看实际 Render Target Format;
- 搜索当前分支
GBufferEncoding / Decode Shader; - 通过
FSceneTextureParameters或标准 Material Helper 读取。
为什么 Deferred 适合很多动态灯
Base Pass 只把材质表面属性写入 GBuffer,后续每盏灯读取 GBuffer 做光照,不必为每个材质 × 每盏灯重新执行完整材质 Shader。代价是:
- GBuffer 带宽与显存较大;
- MSAA 支持复杂;
- 透明物体通常不能直接使用同一 Deferred GBuffer 模型;
- 材质与 Lighting Model 受 GBuffer 编码约束。
阶段 5:Velocity
Velocity / Motion Vector 表达当前像素从上一帧到当前帧的位置变化,TSR、TAA、Motion Blur、Temporal Denoiser 等依赖它。
项目可配置 Velocity 在 Depth Pass、Base Pass 或其后单独 Pass 写入。选择影响:
- 几何是否重复提交;
- Masked / WPO 材质执行成本;
- Base Pass MRT 带宽;
- 静态对象是否需要写 Camera Motion;
- Nanite、Skeletal Mesh、Vertex Deformation 的支持路径。
错误 Velocity 的症状不只拖影,也可能是:
- 细节闪烁;
- 遮挡显露区域历史错误;
- WPO 物体留下残影;
- Camera Cut 后短暂污染;
- TSR History Rejection 过多导致不稳定。
阶段 6:Shadow Setup、Shadow Depth 与 VSM
阴影支路可能在 Frame Graph 中与 Depth / Base Pass 交错,因为不同工作依赖不同输入:
- CPU / GPU 选择投影光源和 Shadow Caster;
- VSM 根据屏幕需求标记 Virtual Page;
- 分配或复用 Physical Page;
- 只为需要更新的 Page 渲染 Nanite / 非 Nanite Shadow Caster;
- 传统 Shadow Map / CSM / One-Pass Point Light 等走其他路径;
- Lighting 阶段采样阴影表示得到可见性。
VSM Cache 是跨帧状态,移动光、WPO、动画或 Primitive 更新可能让 Page 失效。Shadow GPU 时间必须同时解释“本帧渲染多少页”和“为什么缓存失效”。
阶段 7:AO、Lumen GI 与 Reflections
AO 支路
SSAO / GTAO 等通常读取 Depth、Normal 和历史数据,生成局部遮蔽。启用 Lumen 后,AO 与间接光组合策略会变化;不能简单把 AO Pass 与 Lumen Diffuse Indirect 数值相加当作最终间接光。
Lumen 支路
Lumen 不是一个 Pass。典型工作包括:
- 更新 Lumen Scene / Surface Cache;
- Screen Trace;
- Software 或 Hardware Ray Tracing;
- Screen Probe Gather;
- Radiance Cache;
- Diffuse Indirect Temporal / Spatial Filter;
- Reflections Trace、Resolve 与 Denoise;
- 把 GI / Reflections 合成进 SceneColor 或 Lighting 结果。
Screen Trace 依赖当前 Depth / GBuffer / HZB;Scene Trace 依赖 Lumen Scene 或 Ray Tracing Scene;Temporal Filter 依赖 History。因此 Lumen 问题必须按“屏幕数据—场景表示—缓存—历史”分层定位。
阶段 8:Deferred Direct Lighting
Direct Lighting 通常读取:
- GBuffer Material 与 Normal;
- Scene Depth / World Position 重建参数;
- Light Data / Light Grid;
- Shadow Mask、VSM 或 Ray Traced Shadow;
- Lighting Channels、Shading Model 与 Hair / Substrate 分类;
- AO、Sky Lighting、Reflection Environment 等相关输入。
然后以 Fullscreen、Light Volume、Tiled / Clustered 或 Compute 等方式把光累加到 HDR SceneColor。不同光类型和平台可能走不同实现,因此一个名为 Lights 的父事件下会出现多个 Draw / Dispatch。
HDR SceneColor 与 Pre-Exposure
UE 会在写入 SceneColor 时使用 Pre-Exposure,把 HDR 数值缩放到更适合当前格式与计算精度的范围。它通常来自已有的 Exposure 状态,而 Eye Adaptation 又根据图像统计更新未来使用的 Exposure。
因此自定义 Shader 读写 SceneColor 时必须遵守 Pre-Exposure 约定:
- 不能假设 SceneColor 中的数值就是绝对物理亮度;
- 合成外部纹理时要确认它是否已 Pre-Exposed;
- 跨帧 History 需要处理 Exposure 比例变化;
- Debug Capture 的数值应结合 View 的 PreExposure 解读。
阶段 9:Sky、Atmosphere、Cloud 与 Fog
这些效果不总是简单排在“Lighting 后面”:
- Sky Atmosphere 可能生成 LUT,并在不同阶段合成;
- Volumetric Cloud 有自己的 Trace、Shadow 与 Temporal History;
- Exponential Height Fog 与 Volumetric Fog 使用不同数据;
- Fog 需要正确处理 Opaque Depth、Translucency 和 Sky;
- Aerial Perspective 可能在材质或后处理阶段应用。
用资源依赖判断:它读 Scene Depth / SceneColor / Lighting 的哪个版本,产出又被哪类 Translucency 或 Post Process 消费。
阶段 10:Water 与 Translucency
透明物体通常不能像 Opaque 一样把唯一表面写进 GBuffer,因为一个像素可能有多层透明表面。常见路径包括:
- Standard Translucency;
- Separate Translucency;
- Before / After DOF Translucency;
- Single Layer Water;
- Hair / Volumetric / Niagara 专用路径;
- Distortion、Refraction 与 Translucency Lighting Volume。
其成本容易受屏幕覆盖、Overdraw、材质复杂度和分辨率放大。TSR 前后渲染的 Translucency 还需要不同的 History / Responsive 策略。
阶段 11:Post Process 与 Temporal Upscale
Post Process 是一个依赖图,典型节点包括:
- Eye Adaptation / Local Exposure;
- Depth of Field;
- Temporal Upscaler(TSR / TAAU);
- Motion Blur;
- Bloom、Lens Flare;
- Color Grading / Tonemap;
- Chromatic Aberration、Vignette、Film Grain;
- Spatial Upscale / Sharpen;
- User Post Process Material;
- HDR Output Transform。
顺序会受 Blendable Location、Translucency Pass、AA 方法、Primary / Secondary Upscale 和平台改变。自定义 Post Process Material 必须明确它插入 Tonemap 前还是后、输入分辨率和颜色空间是什么。
TSR 的核心输入输出
TSR 要解决的不只是放大,还包括:
- Jitter Sample 的时域整合;
- History Reprojection;
- Disocclusion / Shading Change 检测;
- Anti-Aliasing;
- Detail Reconstruction;
- History 格式与分辨率管理。
降低 Screen Percentage 会减少 TSR 前许多 Pass 的像素成本,但输入信息也随之减少;TSR 自身和部分后处理可能在接近输出分辨率运行。不能假设所有 GPU Pass 都按 Screen Percentage 的平方等比缩放。
阶段 12:Tonemap、UI 与 Present
Tonemap 把 Pre-Exposed HDR SceneColor 映射到目标显示范围,并结合 Exposure、Color Grading、Film Curve 与输出设备变换。Tonemap 后的值不再适合当作线性 HDR Lighting 数据使用。
随后可能发生:
- After Tonemap Post Process;
- Secondary Spatial Upscale;
- Slate / UMG / Debug Canvas 合成;
- HDR UI 亮度处理;
- Copy / Resolve 到 Back Buffer;
- Swap Chain Present 与 VSync。
GPU Present 时间高不一定是一个昂贵 Shader,也可能是在等待 VSync、Frame Pacing 或交换链。
条件化 Pass:为什么两台机器的 Capture 不一样
| 条件 | 主要变化 |
|---|---|
| Nanite 开 / 关 | 几何 Cull / Raster、Depth 与材质阶段的组织不同 |
| Early Z 模式 | PrePass 覆盖范围、Masked 重复工作、Base Pass Overdraw 不同 |
| DBuffer Decals | Base Pass 前增加 DBuffer 写入与读取 |
| Velocity Pass 位置 | Depth / Base / Separate Pass 的 MRT 与几何成本变化 |
| VSM vs CSM / Traditional Shadow | Page Marking、Cache、Shadow Depth 组织不同 |
| Lumen vs SSAO + Reflection Capture | GI / Reflection 分支和 History 完全不同 |
| Software vs Hardware Lumen | Scene Trace 表示与 Ray Tracing Pass 不同,但 Screen Trace / Cache 可能仍在 |
| TSR / TAA / FXAA / None | Temporal History、Velocity 依赖和 Upscale 位置不同 |
| Screen Percentage / Dynamic Resolution | 各 Pass Extent 和 History 重分配不同 |
| Substrate | Material Classification、GBuffer / Tile 与 Lighting 路径改变 |
| Forward Renderer | 不再使用同一 Desktop Deferred GBuffer / Lighting 主线 |
| Scene Capture / Reflection Capture | View State、History、Show Flags 和输出目标不同 |
比较 Capture 前必须把 Project Settings、Console Variables、RHI、分辨率和平台写入实验记录。
用 GPU Capture 给资源建立“户口本”
对每个核心纹理记录:
| 字段 | 示例问题 |
|---|---|
| RDG / RHI 名称 | 它在 Capture 中叫什么?是否每帧稳定? |
| Descriptor | Format、Extent、Mip、Array、Flags 是什么? |
| 有效 View Rect | 实际只使用资源的哪一块? |
| 第一个生产者 | Clear、Raster 还是 Compute? |
| 所有消费者 | 哪些 Pass 读 SRV / UAV / Attachment? |
| 最后使用点 | 何时可被释放或 Alias? |
| 是否 External / Extracted | 是否跨 Graph / 跨帧? |
| 是否 History | Camera Cut / Resize 时怎样失效? |
| Pre-Exposure / Color Space | 数值怎样解释? |
先为 SceneDepth、主要 GBuffer、Velocity、SceneColor 和 TSR History 建五张卡片,就能解释大半帧图。
源码阅读地图
| 入口 | 常见目录 / 文件 | 要回答的问题 |
|---|---|---|
FDeferredShadingSceneRenderer::Render | DeferredShadingRenderer.cpp | 主 Graph 怎样按 Feature 分支组装? |
| Scene Texture 配置 | SceneTexturesConfig.*、SceneTextureParameters.* | Extent、Format 与参数怎样确定? |
| Depth | DepthRendering.* | 哪些 Primitive 进入 PrePass,使用什么 Material Shader? |
| HZB | 搜索 BuildHZB / HZB | 谁生产每种 HZB,谁消费? |
| Base Pass | BasePassRendering.* | GBuffer、SceneColor、DBuffer 怎样绑定? |
| Velocity | VelocityRendering.* | 本配置在哪个阶段写 Velocity? |
| Decals | DeferredDecals.* | DBuffer 与其他 Decal Stage 怎样分支? |
| Shadows | ShadowSetup.*、ShadowDepthRendering.* | Caster 选择和 Shadow Depth 怎样产生? |
| VSM | VirtualShadowMaps/ | Page Mark、Allocate、Render、Cache 在哪? |
| Lumen | Lumen/ | Scene Update、GI、Reflection 的 RDG 边是什么? |
| Lighting | DeferredLighting.*、LightRendering.* | Light Grid、Shadow 与 GBuffer 怎样合成? |
| Atmosphere / Fog | 对应 SkyAtmosphere、Volumetric* 文件 | LUT、History 与 SceneColor 在哪合成? |
| Translucency | TranslucentRendering.* 等 | Before / After DOF 与 Separate 路径怎样组织? |
| Post Process | PostProcess/PostProcessing.* | Post Graph 与 Blendable Location 怎样建立? |
| TSR | PostProcess/TemporalSuperResolution.* | History、Reject、Resolve 与输出 Rect 是什么? |
| Tonemap / Exposure | PostProcess/Tonemap.*、EyeAdaptation.* | Pre-Exposure 怎样进入最终输出? |
文件名会随版本调整。最有效的追踪方式是从 GPU Event 名在源码搜索 RDG_EVENT_NAME,再反向找输入资源和调用方。
GPU Capture 对齐步骤
- 固定相机、分辨率、Screen Percentage、VSync、帧率上限和 Dynamic Resolution。
- 等待 Shader / PSO、Texture Streaming、Nanite Streaming、Lumen / VSM Cache 与 Exposure 稳定。
- 用
ProfileGPU找大类,用 RenderDoc / PIX / RGP / Nsight 打开具体资源与 Dispatch。 - 记录 Capture Frame 的 RHI、Feature Level、Project Settings 和关键 CVar Dump。
- 从
SceneDepth → GBuffer → SceneColor → TSR Output → Back Buffer追五条资源链。 - 每次只切换一个 Feature,再在同一相机重抓。
- GPU Queue 有重叠时,不把各 Event Duration 简单相加当作总帧时间。
Capture 工具会扰动 Barrier、Transient Aliasing、并行提交和时序;它适合解释工作,不一定提供最无扰动的性能数字。性能结论需与多帧统计和平台 Profiler 交叉验证。
七个可证伪实验
H1:Early Z 是否值得取决于 Pixel Cost 与 Overdraw
准备低 Pixel Cost / 高几何量和高 Pixel Cost / 高 Overdraw 两组场景,分别改变 Early Z 模式。记录 PrePass、Base Pass、总 GPU、Triangles 与 Pixel Shader Invocation。
预期:完整 PrePass 增加几何成本,但在高 Overdraw + 昂贵材质时可能降低总时长;不存在“永远打开更快”的结论。
H2:DBuffer 把 Decal 工作放到 Base Pass 之前
固定一组覆盖大屏幕的 Decal,分别使用进入 DBuffer 与不进入 DBuffer 的合法配置。观察 DBuffer 资源、PrePass 依赖、Base Pass 输入和 Decal GPU 时间。
预期:DBuffer 配置产生 Base Pass 前的属性缓冲并被 Base Pass 消费;具体效果与材质 Blend 支持有关。
H3:Velocity Pass 位置改变几何与 MRT 成本
在运动 Static Mesh、Skeletal Mesh 和 WPO Mesh 上分别测试 Velocity 写入位置。检查 Velocity 生产者、Base Pass Render Targets、重复 Draw 与 TSR Visualization。
预期:Pass 拓扑和带宽改变,但最终正确 Motion Vector 应保持一致;若 WPO 缺失,检查 Previous Frame Switch / Material 设置和路径支持。
H4:Screen Percentage 只缩放部分 Pass
固定 4K 输出,分别测试 50%、67%、77%、100% Primary Screen Percentage。记录每个核心资源 Extent 与 Pass 时间。
预期:Depth、GBuffer、Lighting 等主渲染 Pass 随内部尺寸变化;TSR 与部分 Post 在更高或输出分辨率运行,不会全部按像素数同率缩放。
H5:关闭 Lumen 会替换一条分支,不会删除整个 Lighting
用固定灯光与材质切换 Lumen GI / Reflection 到一个明确的非 Lumen 对照。比较 GBuffer、Direct Lighting、GI、Reflection、SceneColor。
预期:几何与 Direct Lighting 主干仍存在,GI / Reflection 分支和结果改变。
H6:View Rect 错误会在分屏 / Dynamic Resolution 暴露
实现一个测试 Fullscreen RDG Pass,先错误地用 Texture Extent 生成 UV,再改为 View 参数。分别在单 View、分屏和非 100% Screen Percentage 测试。
预期:错误实现出现偏移、串 View 或边缘采样;使用 View Rect / UV Scale Bias 后恢复。
H7:Pre-Exposure 错误会随曝光变化闪烁
把一个固定亮度外部纹理合成到 Tonemap 前,分别使用错误的绝对数值和正确 Pre-Exposure 转换。让相机从室内走到室外。
预期:错误路径相对场景亮度漂移或闪烁;正确路径在 Exposure 变化中保持预期关系。
故障定位表
| 症状 | 优先检查资源 / 阶段 |
|---|---|
| Opaque 物体转角消失 | Bounds → Primitive / Nanite Culling → SceneDepth |
| 材质看起来完全错误 | GBuffer Visualization → Shading Model → Base Pass Permutation |
| 动态物体拖影 | Velocity → Depth → TSR Reject / History |
| 阴影偶发暴涨 | VSM Page / Cache Invalidations → Shadow Caster |
| 间接光漏光 / 黑面 | Lumen Scene / Surface Cache → Screen Trace → Scene Trace |
| 透明物体糊或排序错 | Translucency Pass 位置 → Depth / Velocity → TSR |
| 后处理在分屏串色 | View Rect / UV Scale Bias → Scene Texture Extent |
| 室内外切换亮度闪烁 | Pre-Exposure → Eye Adaptation History → Tonemap |
| Screen Percentage 降低却没快 | 找不随内部分辨率缩放的 Pass、CPU / Geometry / Bandwidth 瓶颈 |
| Present 很高 | VSync / Swap Chain / Frame Pacing,不先改 Shader |
本篇建立的心智模型
几何前端生产 Depth / GBuffer / Velocity → Shadows、AO、Lumen、Direct Lighting 消费它们 → 得到 Pre-Exposed HDR SceneColor → Atmosphere / Fog / Translucency → Temporal History + Post Process → Tonemap / Output Transform → UI / Back Buffer / Present下一篇单独拆 Nanite:Cluster Hierarchy 怎样选择细节,Two-Pass Occlusion 为什么需要 HZB,Hardware / Software Raster 如何协作,Streaming Page 与 Material Shading 又怎样回到本篇的 Depth 和 GBuffer 主线。
官方资料
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






