feat(srp): add descriptor-driven object draw authoring

- bridge renderer list descriptors into ScriptableRenderContext scene draw calls
- reuse DrawObjectsPass across Universal and project custom renderers
- add RenderObjectsRendererFeature for package-level object draw extension
This commit is contained in:
2026-04-20 22:05:38 +08:00
parent 3df87e941c
commit cee65fcf40
18 changed files with 493 additions and 73 deletions

View File

@@ -119,33 +119,44 @@ namespace ProjectScripts
}
}
public sealed class ProjectCustomOpaquePass
: ScriptableRenderPass
public sealed class ProjectRenderObjectsFeaturePipelineAsset
: UniversalRenderPipelineAsset
{
public ProjectCustomOpaquePass()
public ProjectRenderObjectsFeaturePipelineAsset()
{
renderPassEvent =
RenderPassEvent.RenderOpaques;
}
protected override bool RecordRenderGraph(
ScriptableRenderContext context,
RenderingData renderingData)
{
return context != null &&
renderingData != null &&
renderingData.isMainSceneStage &&
context.DrawRenderers(
SceneRenderPhase.Opaque,
RendererListType.Opaque);
rendererDataList = new ScriptableRendererData[]
{
new UniversalRendererData
{
renderOpaque = false,
renderSkybox = false,
renderTransparent = false,
rendererFeatures = new ScriptableRendererFeature[]
{
new RenderObjectsRendererFeature
{
passEvent =
RenderPassEvent.RenderOpaques,
scenePhase =
SceneRenderPhase.Opaque,
rendererListType =
RendererListType.Opaque
}
}
}
};
}
}
public sealed class ProjectCustomRenderer
: ScriptableRenderer
{
private readonly ProjectCustomOpaquePass m_opaquePass =
new ProjectCustomOpaquePass();
private readonly DrawObjectsPass m_opaquePass =
new DrawObjectsPass(
RenderPassEvent.RenderOpaques,
SceneRenderPhase.Opaque,
RendererListDesc.CreateDefault(
RendererListType.Opaque));
protected override void AddRenderPasses(
RenderingData renderingData)