Align URP pass queue authoring with per-camera data

This commit is contained in:
2026-04-28 01:25:29 +08:00
parent 6f1458a8e7
commit b96764e31b
16 changed files with 195 additions and 117 deletions

View File

@@ -243,8 +243,9 @@ package。
- `ScriptableRendererData` 的 runtime state version 不只来自 feature collection。`UniversalRendererData`
已把 `mainScene``shadowCaster``depthPrepass` block settings 纳入 hash这些 settings 改变时必须
触发 renderer cache 释放和 pass queue/stage manifest 重建。
- `ScriptableRenderer`stage 构建 `m_activePassQueue`。它依次调用 feature `SetupRenderPasses`、feature
`AddRenderPasses`,再调用 renderer-owned `AddRenderPasses`passes 按 `RenderPassEvent` 顺序插入,并归组到
- `ScriptableRenderer`per-camera pass queue 构建 `m_activePassQueue`。它依次调用 feature
`SetupRenderPasses`、feature `AddRenderPasses`,再调用 renderer-owned `AddRenderPasses`这些声明入口接收
`RendererPassQueueData`,不暴露 `RenderingData.stage`passes 按 `RenderPassEvent` 顺序插入,并归组到
`RendererBlocks`
- URP stage planning 以 `ScriptableRenderer` 的 active pass queue 为最终事实源。`ConfigureCameraFramePlan`
仍是兼容和高级策略 hook但它不能单独声明 shadow、depth、post 或 final-output stage没有被 pass queue
@@ -263,7 +264,8 @@ package。
pass 状态的边界;新增 mutable pass state 时必须确认它能被 frame-plan snapshot 捕获,避免后续 camera
planning 改写前一个 camera 的 recording。
- URP features 的 `AddRenderPasses` 是 per-camera 声明点,不是 per-stage 回调。不要通过
`RenderingData.stage` 分阶段重复 enqueuepass 所属 stage 应由 `RenderPassEvent -> RendererBlock`
stage 数据分阶段重复 enqueue`AddRenderPasses`/`SetupRenderPasses` 必须使用 `RendererPassQueueData`
而不是 recording 阶段的 `RenderingData`。pass 所属 stage 应由 `RenderPassEvent -> RendererBlock`
映射决定renderer recording 再按 block range 消费同一份 queue。
- `RendererBlock` 将 pass events 映射到 camera stagesshadow caster、depth prepass、main opaque、main
skybox、main transparent、post process 和 final output。
@@ -411,6 +413,9 @@ Scene data 每个 camera frame 提取一次,然后由 pipeline 调整。
fullscreen stage planner。
- `ScriptableRenderPass.CreateFramePlanSnapshot` 已接入 `RendererFramePlan` 生成路径。多 camera planning 会冻结
每个 camera 当时的 pass 状态,后续 camera 对复用 pass 实例的 `Configure` 不应污染已生成的 frame plan。
- `AddRenderPasses`/`SetupRenderPasses` 已从 recording `RenderingData` 分离到 `RendererPassQueueData`
`RendererPassQueueData` 是 per-camera queue 声明数据,故意不携带 stagestage 信息只应在 pass recording
阶段通过 `RenderingData`/`ScriptableRenderContext` 消费。
- URP runtime-state invalidation 已覆盖 asset-level shadow/final-color settings 和 renderer-data-level
main-scene/shadow-caster/depth-prepass block settings。配置变更会通过 runtime resource version 释放
renderer caches并让后续 planning 重新生成 `RendererFramePlan` 和 stage manifest。