feat(srp): add managed camera frame planning seam

Expose native camera frame planning controls to managed pipeline assets and renderer features.

Allow managed planning to override fullscreen stage heuristics while keeping CameraFramePlan as the native execution contract.

Add scripting coverage, probe assets, and archive the phase plan after build, test, and editor smoke validation.
This commit is contained in:
2026-04-20 01:48:16 +08:00
parent 58dde75d3d
commit 9e6c473186
17 changed files with 926 additions and 9 deletions

View File

@@ -899,6 +899,41 @@ namespace Gameplay
}
}
internal sealed class ManagedFeaturePlannedPostProcessRendererFeature
: ScriptableRendererFeature
{
public override void ConfigureCameraFramePlan(
ScriptableRenderPipelinePlanningContext context)
{
if (context == null ||
context.IsStageRequested(CameraFrameStage.PostProcess))
{
return;
}
context.RequestFullscreenStage(
CameraFrameStage.PostProcess,
CameraFrameColorSource.MainSceneColor);
}
}
internal sealed class ManagedFeaturePlannedPostProcessRendererData
: ProbeRendererData
{
protected override ScriptableRenderer CreateProbeRenderer()
{
return new ProbeSceneRenderer();
}
protected override ScriptableRendererFeature[] CreateRendererFeatures()
{
return new ScriptableRendererFeature[]
{
new ManagedFeaturePlannedPostProcessRendererFeature()
};
}
}
internal sealed class ManagedRenderContextCameraDataProbeRendererData
: ProbeRendererData
{
@@ -1206,6 +1241,52 @@ namespace Gameplay
}
}
public sealed class ManagedFeaturePlannedPostProcessProbeAsset
: UniversalRenderPipelineAsset
{
public ManagedFeaturePlannedPostProcessProbeAsset()
{
rendererDataList =
new ScriptableRendererData[]
{
new ManagedFeaturePlannedPostProcessRendererData()
};
}
}
public sealed class ManagedClearedPostProcessRenderPipelineProbeAsset
: UniversalRenderPipelineAsset
{
public ManagedClearedPostProcessRenderPipelineProbeAsset()
{
rendererDataList =
new ScriptableRendererData[]
{
new ManagedPlannedFullscreenRenderPipelineProbeRendererData()
};
}
protected override void ConfigureCameraFramePlan(
ScriptableRenderPipelinePlanningContext context)
{
if (context == null)
{
return;
}
context.ClearFullscreenStage(
CameraFrameStage.PostProcess);
context.RequestFullscreenStage(
CameraFrameStage.FinalOutput,
CameraFrameColorSource.MainSceneColor);
}
protected override FinalColorSettings GetDefaultFinalColorSettings()
{
return ProbeFinalColorSettingsFactory.Create();
}
}
internal sealed class ManagedCameraRequestConfiguredRendererData
: UniversalRendererData
{