Skip to content

渲染路径与帧合成

在深入 Render Graph 的底层机制之前,理解 Myth 的渲染路径 (Render Path)帧合成器 (Frame Composer) 有助于你建立全局视角:一帧画面究竟由哪些阶段、按什么顺序组装而成。

1. 两条渲染路径

引擎在创建 App 时通过 RendererSettings 选择渲染路径:

rust
App::new()
    .with_title("My App")
    .with_settings(RendererSettings {
        path: RenderPath::HighFidelity,
        ..Default::default()
    })
    .run::<MyApp>()
渲染路径定位适用场景
RenderPath::HighFidelity完整的 PBR + 后处理 + 屏幕空间特效 + 3DGS 管线桌面 / 高端设备,需要 Bloom、SSAO、SSR、SSGI、TAA、3DGS 等特性
RenderPath::BasicForward极简前向渲染低端设备、移动端,仅需基础着色

特性依赖

绝大多数高级特性(Bloom、SSAO、SSR、SSGI、SSSS、TAA、3DGS)都依赖 HighFidelity 路径。若发现某个后处理“不生效”,请先确认渲染路径设置正确。

2. 高保真帧的合成顺序

HighFidelity 路径下,帧合成器 (FrameComposer) 按下列拓扑顺序组装各个阶段。每个阶段都会向 Render Graph 声明其资源依赖,由编译器统一调度:

各阶段要点:

  • Shadow Pass: 为投射阴影的方向光生成级联阴影贴图 (CSM),聚光灯生成独立阴影。
  • Pre Pass: 提前写入场景深度、法线与速度缓冲,供 SSAO、SSSS、TAA 等屏幕空间特效复用。
  • Opaque Pass: PBR 不透明几何的主着色阶段,在此进行聚类光照查找。
  • SSSS: 基于屏幕空间的次表面散射,依赖 Pre Pass 的法线与 Feature ID。
  • 3DGS: 高斯溅射读取不透明深度缓冲,实现与传统几何的正确遮挡(仅在启用 3dgs 特性时存在)。
  • Bloom → Tone Mapping → FXAA: HDR 后处理链,最终输出到屏幕。

自动剔除

上述阶段并非每帧全部执行。若某个特效被关闭(例如 SSAO),编译器会自动剔除它及其唯一为它服务的前置节点(死节点剔除),完全零配置。详见 Render Graph 渲染图

3. 在合成流程中注入自定义阶段

帧合成器提供了钩子系统 (Hook System),允许你在标准阶段之间插入自定义的 Render Graph 节点,而无需修改引擎源码:

rust
// 在后处理之前插入自定义全屏特效
composer.add_hook(HookStage::BeforePostProcess, move |ctx| {
    // 向 ctx.graph 声明并返回你的自定义 Pass
});

这套机制让自定义后处理、调试可视化、GPU 数据生成等工作都能零副作用地嵌入主循环。详见 自定义 Shader 与后处理

下一步

基于 MIT / Apache-2.0 双协议发布