Align URP scene drawing with RenderGraph renderer lists
This commit is contained in:
@@ -39,7 +39,7 @@ Unity 兼容的公开命名、对象所有权和扩展点。
|
||||
Opaque、skybox、transparent、depth、shadow、post 和 final-output 流程应来自 URP
|
||||
blocks 和 passes。
|
||||
- 保持 `DrawObjectsPass` 和 `DrawSkyboxPass` 作为 managed URP pass declarations,并通过
|
||||
renderer-list/native scene-recorder backends 执行。
|
||||
RenderGraph renderer-list declarations 和 native scene draw backend 执行。
|
||||
- 收紧 stage 支持规则。如果 fullscreen 或 main-scene stage 需要 managed graph recording,
|
||||
必须要求所选 renderer/pipeline 支持并记录该 stage。
|
||||
- 只在 Unity 形态的 API 后面扩展 managed RenderGraph:resource declarations、frame data、
|
||||
@@ -216,9 +216,10 @@ Managed SRP assets 通过 `GraphicsSettings.renderPipelineAsset` 选择,并通
|
||||
- Mono 创建 `MonoManagedRenderPipelineAssetRuntime` 和 `MonoManagedRenderPipelineStageRecorder`。
|
||||
Scriptable context、planning context、camera request context、scene setup context 和 shadow execution
|
||||
context handles 都是临时 native registry entries。不要在调用之外保存 managed context objects。
|
||||
- 当前 Mono-backed SRP assets 显式使用 `DefaultNativeBackend` 做 scene drawing。Managed
|
||||
`ScriptableRenderContext.DrawRenderers` 和 `DrawSkybox` 委托给 `NativeSceneRecorder` 以及 native
|
||||
`SceneDrawBackend`。
|
||||
- 当前 Mono-backed SRP assets 显式使用 `DefaultNativeBackend` 做 scene drawing。URP 内置对象和 skybox
|
||||
drawing 通过 managed RenderGraph 声明 renderer list、attachments 和 render func,再由 native
|
||||
`SceneDrawBackend` 执行。`ScriptableRenderContext.DrawRenderers` 和 `DrawSkybox` 仍作为 SRP v1 兼容入口保留,
|
||||
并委托给 `NativeSceneRecorder`。
|
||||
- Managed resource/version invalidation 是正确性的一部分。如果 managed asset、renderer data 或 feature
|
||||
修改 runtime state,调用 `SetDirty` 或本地 invalidation helper,确保 native runtime caches 被释放。
|
||||
当前 runtime version 也会兜底 hash `UniversalRenderPipelineAsset` 的 shadow/final-color settings,以及
|
||||
@@ -279,12 +280,19 @@ Managed RenderGraph 目前有意保持较小,但应维持 Unity 的现代形
|
||||
`XCEngine.Rendering.RenderGraphModule.RenderGraph.AddRasterPass` 和
|
||||
`RenderGraphRasterPassBuilder` 进行。
|
||||
- Public passes 应声明 reads、bindings、color attachments、depth attachment 和 render func,然后 `Commit`。
|
||||
- Renderer-list drawing 是 RenderGraph authoring 的一等声明:先用
|
||||
`RenderGraph.CreateRendererList(RendererListDesc, DrawingSettings)` 创建 `RendererListHandle`,再通过
|
||||
`RenderGraphRasterPassBuilder.UseRendererList` 声明 pass 依赖,最后在 render func 中调用
|
||||
`CommandBuffer.DrawRendererList`。URP 内置 `DrawObjectsPass` 必须走这条路径。
|
||||
- Skybox drawing 也应从 managed raster pass 的 render func 进入 `CommandBuffer.DrawSkybox`。URP 内置
|
||||
`DrawSkyboxPass` 不应再直接在 recording 阶段调用 `ScriptableRenderContext.DrawSkybox`。
|
||||
- Internal fullscreen helpers,例如 color scale、shader vector 和 final color,是 URP implementation details。
|
||||
不要把它们作为 public `ScriptableRenderContext` shortcuts 暴露。
|
||||
- Managed `SetRenderFunc` 是 deferred RenderGraph execution callback。Mono bridge 必须 retain delegate,
|
||||
在 native graph pass 执行时创建 pass-scoped `CommandBuffer`,并把已支持的 managed command stream flush 到
|
||||
当前 `RHICommandList`。当前公开且已测试的命令子集是 `CommandBuffer.ClearRenderTarget(Color)`,写向 pass
|
||||
的 primary color attachment;没有 native command stream 和 executor 测试的命令不要暴露成 public API。
|
||||
当前 `RHICommandList`。当前公开命令子集是 `CommandBuffer.ClearRenderTarget(Color)`、
|
||||
`CommandBuffer.DrawRendererList(RendererListHandle)` 和 `CommandBuffer.DrawSkybox()`;没有 native command stream
|
||||
和 executor 测试的命令不要暴露成 public API。
|
||||
- Public RenderGraph frame data 由同一个 renderer stage 内记录的所有 passes 共享。保持 `ContextContainer`
|
||||
作为 stage frame data,而不是 pass-local scratch data。
|
||||
- Fullscreen internal passes 需要有效 `sourceColorTexture` 和 `primaryColorTarget`。Multi-pass fullscreen chains
|
||||
@@ -350,10 +358,10 @@ Scene data 每个 camera frame 提取一次,然后由 pipeline 调整。
|
||||
|
||||
### 当前债务
|
||||
|
||||
- Managed SRP 仍是 SRP v1 surface。Main scene drawing 通过 managed calls 记录,但由 native scene draw
|
||||
backends 执行。
|
||||
- Managed `CommandBuffer` 已能随 public `SetRenderFunc` 延迟到 RenderGraph 执行期运行,但当前只收口了
|
||||
`ClearRenderTarget(Color)` 这一条受测命令。它不是完整 Unity `CommandBuffer`;新增命令必须一起补
|
||||
- Managed SRP 仍是 SRP v1 surface。Main scene drawing 现在可通过 managed RenderGraph renderer-list
|
||||
declarations 记录,但实际绘制仍由 native scene draw backends 执行。
|
||||
- Managed `CommandBuffer` 已能随 public `SetRenderFunc` 延迟到 RenderGraph 执行期运行,但它不是完整 Unity
|
||||
`CommandBuffer`;新增命令必须一起补
|
||||
native command stream、RHI flush 和 scripting bridge tests。
|
||||
- Managed RenderGraph 当前暴露 raster authoring。Native graph 有 compute pass support,但 managed compute
|
||||
authoring 还未公开。
|
||||
@@ -401,7 +409,13 @@ Scene data 每个 camera frame 提取一次,然后由 pipeline 调整。
|
||||
details。
|
||||
- Public managed `SetRenderFunc` 已从 recording-time 调用改为 RenderGraph execution-time 调用;
|
||||
native 通过 retained managed delegate 和 pass-scoped `CommandBuffer` bridge 执行已支持的 command stream,
|
||||
当前受测命令为 `CommandBuffer.ClearRenderTarget(Color)`。
|
||||
当前支持 `CommandBuffer.ClearRenderTarget(Color)`、`CommandBuffer.DrawRendererList(RendererListHandle)` 和
|
||||
`CommandBuffer.DrawSkybox()`。
|
||||
- Renderer-list drawing 已成为 managed RenderGraph 声明:`RenderGraph.CreateRendererList` 创建
|
||||
`RendererListHandle`,`RenderGraphRasterPassBuilder.UseRendererList` 把 renderer list 纳入 pass declaration,
|
||||
`CommandBuffer.DrawRendererList` 在 RenderGraph 执行期触发 native `SceneDrawBackend`。URP 内置
|
||||
`DrawObjectsPass` 和 `DrawSkyboxPass` 已迁离 recording-time `ScriptableRenderContext.DrawRenderers/DrawSkybox`
|
||||
主路径。
|
||||
- Public `ScriptableRenderPass.RecordRenderGraph(RenderGraph, ContextContainer)` 通过 `RenderingData`、
|
||||
`CameraData`、`LightingData`、`ShadowData`、`EnvironmentData`、`FinalColorData` 和 `StageColorData`
|
||||
接收真实 URP frame data。
|
||||
|
||||
Reference in New Issue
Block a user