Files
XCEngine/docs/plan/rendering_srp_urp_closeout_plan.md

4.3 KiB
Raw Blame History

Rendering SRP / URP Closeout Plan

更新日期: 2026-04-26

状态: Completed, Phase 1 closeout done

1. 长期目标

目标不是继续堆更多 URP 外形,而是把默认渲染主线真正收口为:

GraphicsSettings.renderPipelineAsset -> UniversalRenderPipelineAsset -> ScriptableRendererData -> UniversalRenderer -> ScriptableRendererFeature/Pass -> ScriptableRenderPipelineHost -> native backend contract -> RenderGraph / RHI

收口后的职责边界:

  • managed URP 负责 camera policy、renderer 选择、stage planning、feature/pass 编排、final color 策略
  • native Rendering 负责 scene extraction、scene draw、fullscreen graph execution、RenderGraph/RHI
  • BuiltinForwardPipeline 或其后继只保留 backend 语义,不继续承载产品层策略

2. 阶段路线

Phase 1: Renderer-backed URP v1 收口

  • 让默认 UniversalRenderPipelineAsset -> UniversalRenderer 成为唯一上层主线
  • 先收口 ownership 和 contract不在本阶段做 backend 大拆分

Phase 2: Native backend contract 抽取

  • 把默认 native backend 从产品层语义里剥离出来
  • 让 host/bridge 面向稳定 backend contract而不是面向 builtin forward 产品实现

Phase 3: Feature ownership 迁移

  • 把 feature 的启用、排序、插入点统一回收到 managed ScriptableRendererFeature

Phase 4: Asset / Editor / Runtime 产品化

  • 稳定 renderer data、camera override、runtime invalidation、editor 消费路径

Phase 5: 收尾与清理

  • 删除临时兼容层,统一命名和文档

3. Phase 1 已完成进展

  • 已补齐长期目标文档和 Rendering 模块目标描述
  • 已把 managed backend 解析从“隐式默认 fallback”改成“显式策略”
  • 已新增 ManagedPipelineRendererAssetPolicy
  • 已让 ManagedScriptableRenderPipelineAsset 先读显式 renderer asset再按 policy 解析 default native backend
  • 已让 MonoManagedRenderPipelineAssetRuntime::GetPipelineRendererAsset() 不再直接偷偷创建默认 native backend asset
  • 已让 Mono runtime 显式返回 DefaultNativeBackend policy
  • 已把 UniversalRendererPostProcess 变成显式 stage 分支
  • 已补 UniversalPostProcessBlock.EnqueueRenderPasses() 作为显式入口
  • 已把 RuntimeStateHashUtility 调整为跨程序集可见
  • 已把 ScriptableRendererFeature.CreateInstance() 调整为可供外部受控复用
  • 已更新一批 scripting 侧测试预期,使默认 URP/managed pipeline case 面向“显式 default backend policy”
  • 已完成 editor 编译与 12 秒启动冒烟
    • XCUIEditorApp 编译通过
    • build/editor/Debug/XCEngine.exe 12 秒启动烟测通过

4. Phase 1 验收结果

  • 已修掉 managed/GameScripts/RenderPipelineApiProbe.cs 中挡住本阶段验证的 managed API 问题
  • scripting_tests 已恢复为可用基线,并通过 9 条聚焦的 SRP/URP 回归用例
  • 默认 backend 来源、default renderer fallback、feature 注入、renderer invalidation 等关键主路径已被 focused regression tests 覆盖
  • editor 侧验证已补齐,XCUIEditorApp 编译与 build/editor/Debug/XCEngine.exe 12 秒启动烟测均通过
  • rendering_unit_tests 仍存在与本次收口无关的既有编译断点,但不再阻塞 Phase 1 收口验收

5. 当前 subplan

本轮 subplan 已完成,已从执行列表清空。

5.1 已完成验收项

  • 默认 backend 来源已变成显式可追踪的 policy
  • PostProcess ownership 已稳定挂到 UniversalRenderer
  • scripting_tests 已能稳定覆盖本阶段相关用例
  • 默认 URP 主路径已具备 focused regression tests
  • Phase 1 未再引入新的隐式 fallback 语义

6. 下一阶段建议

下一阶段可以进入 Phase 2但不要重新把产品层策略带回 native:

  1. 抽取更稳定的 native backend contract继续收窄 host/bridge 对具体 builtin forward 实现的依赖
  2. 继续把 feature 的启用、排序、插入点留在 managed ScriptableRendererFeature / UniversalRenderer 主线
  3. 在当前 focused regression baseline 之上继续稳住 renderer invalidation、asset authoring 和 editor/runtime 消费路径

7. 非目标

  • 本阶段不直接重命名 BuiltinForwardPipeline
  • 不在本阶段完成 backend-only 最终类层次
  • 不引入 deferred、clustered lighting、完整 volume framework 等新能力
  • 不把 editor tooling 路径强行并进默认 URP 产品主线