Files
XCEngine/docs/plan/rendering_srp_urp_closeout_plan.md

94 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
- 已把 `UniversalRenderer``PostProcess` 变成显式 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 产品主线