Align managed raster RenderGraph authoring with URP

This commit is contained in:
2026-04-26 23:32:09 +08:00
parent 09b1289338
commit 3b38d65ab8
13 changed files with 430 additions and 123 deletions

View File

@@ -7,12 +7,6 @@ using XCEngine.Rendering.Universal;
namespace Gameplay
{
internal static class BuiltinShaderPaths
{
public const string ColorScalePostProcess =
"builtin://shaders/color-scale-post-process";
}
internal static class ProbeFinalColorSettingsFactory
{
public static FinalColorSettings Create()
@@ -141,12 +135,6 @@ namespace Gameplay
Transparent
}
internal enum FullscreenPassKind
{
ColorScale,
ShaderVector
}
internal sealed class ScenePhasePass : ScriptableRenderPass
{
private readonly ScenePhaseKind m_phaseKind;
@@ -197,9 +185,6 @@ namespace Gameplay
internal sealed class FullscreenPass : ScriptableRenderPass
{
private readonly FullscreenPassKind m_passKind;
private readonly Vector4 m_vectorPayload;
private readonly string m_shaderPath;
private readonly string m_passName;
public FullscreenPass(
@@ -207,22 +192,14 @@ namespace Gameplay
Vector4 colorScale)
{
renderPassEvent = passEvent;
m_passKind = FullscreenPassKind.ColorScale;
m_vectorPayload = colorScale;
m_shaderPath = string.Empty;
m_passName = string.Empty;
}
public FullscreenPass(
RenderPassEvent passEvent,
string shaderPath,
Vector4 vectorPayload,
string passName = null)
string passName)
{
renderPassEvent = passEvent;
m_passKind = FullscreenPassKind.ShaderVector;
m_vectorPayload = vectorPayload;
m_shaderPath = shaderPath ?? string.Empty;
m_passName = passName ?? string.Empty;
}
@@ -238,21 +215,32 @@ namespace Gameplay
private bool RecordFullscreen(
ScriptableRenderContext context)
{
switch (m_passKind)
RenderGraphTextureHandle sourceColor =
context.sourceColorTexture;
RenderGraphTextureHandle outputColor =
context.primaryColorTarget;
if (!sourceColor.isValid ||
!outputColor.isValid)
{
case FullscreenPassKind.ColorScale:
return RecordColorScaleFullscreenPass(
context,
m_vectorPayload);
case FullscreenPassKind.ShaderVector:
return RecordShaderVectorFullscreenPass(
context,
m_shaderPath,
m_vectorPayload,
m_passName);
default:
return false;
return false;
}
return context
.AddRasterPass(ResolvePassName())
.UseColorSource(sourceColor)
.SetColorAttachment(outputColor)
.SetRenderFunc(
rasterContext =>
{
})
.Commit();
}
private string ResolvePassName()
{
return string.IsNullOrEmpty(m_passName)
? "Gameplay.GenericFullscreenRasterPass"
: m_passName;
}
}
@@ -535,14 +523,10 @@ namespace Gameplay
new FullscreenFeature(
new FullscreenPass(
RenderPassEvent.BeforeRenderingPostProcessing,
BuiltinShaderPaths.ColorScalePostProcess,
firstVectorPayload,
"ColorScale"),
"ManagedPostProcess.First"),
new FullscreenPass(
RenderPassEvent.AfterRenderingPostProcessing,
BuiltinShaderPaths.ColorScalePostProcess,
secondVectorPayload,
"ColorScale")));
"ManagedPostProcess.Second")));
}
}
@@ -554,10 +538,10 @@ namespace Gameplay
{
AddFeature(new DefaultSceneFeature(onOpaqueRecorded));
AddFeature(
new FullscreenFeature(
new FullscreenPass(
RenderPassEvent.BeforeRenderingPostProcessing,
postProcessScale)));
new ColorScalePostProcessRendererFeature
{
colorScale = postProcessScale
});
}
}
@@ -2131,8 +2115,6 @@ namespace Gameplay
new FullscreenFeature(
new FullscreenPass(
RenderPassEvent.BeforeRenderingPostProcessing,
BuiltinShaderPaths.ColorScalePostProcess,
new Vector4(1.05f, 1.0f, 0.95f, 1.0f),
"ManagedCameraOverridePostProcess")));
}
}
@@ -2607,11 +2589,13 @@ namespace Gameplay
return context != null &&
context
.AddRasterPass(
"Managed.InvalidMainSceneRasterPass")
"Managed.MainSceneGenericRasterPass")
.SetColorAttachment(
context.primaryColorTarget)
.SetColorScaleFullscreenExecution(
new Vector4(1.0f, 1.0f, 1.0f, 1.0f))
.SetRenderFunc(
rasterContext =>
{
})
.Commit();
}
}

View File

@@ -69,9 +69,13 @@ namespace Gameplay
public bool HasRenderGraphRasterPassBuilderUseColorSource;
public bool HasRenderGraphRasterPassBuilderUseTexture;
public bool HasRenderGraphRasterPassBuilderSetColorAttachment;
public bool HasRenderGraphRasterPassBuilderSetRenderFunc;
public bool HasRenderGraphRasterPassBuilderSetColorScaleFullscreenExecution;
public bool HasRenderGraphRasterPassBuilderSetShaderVectorFullscreenExecution;
public bool HasRenderGraphRasterPassBuilderSetFinalColorFullscreenExecution;
public bool HasRenderGraphRasterPassBuilderCommit;
public bool HasRenderGraphRasterContextType;
public bool HasRenderGraphRasterContextCommandBuffer;
public bool HasSceneRenderPhaseType;
public bool HasSceneRenderInjectionPointType;
public bool HasRendererListType;
@@ -105,6 +109,9 @@ namespace Gameplay
public bool HasRenderGraphType;
public bool HasRenderGraphAddRasterPass;
public bool HasRenderPassPublicRecordRenderGraph;
public bool HasRenderPassProtectedRecordColorScaleFullscreenPass;
public bool HasRenderPassProtectedRecordShaderVectorFullscreenPass;
public bool HasRenderPassProtectedRecordFinalColorFullscreenPass;
public bool HasRenderPassComparisonOperators;
public bool HasRenderPassEventUnityNumericOrder;
public bool HasRenderPassEventEngineExtensionOrder;
@@ -172,6 +179,8 @@ namespace Gameplay
"XCEngine.ScriptableObject");
System.Type rasterPassBuilderType =
typeof(RenderGraphRasterPassBuilder);
System.Type rasterPassContextType =
typeof(RenderGraphRasterContext);
System.Type rendererFeatureType =
typeof(ScriptableRendererFeature);
System.Type rendererDataType =
@@ -476,10 +485,18 @@ namespace Gameplay
rasterPassBuilderType.GetMethod(
"SetColorAttachment",
PublicInstanceMethodFlags) != null;
HasRenderGraphRasterPassBuilderSetRenderFunc =
rasterPassBuilderType.GetMethod(
"SetRenderFunc",
PublicInstanceMethodFlags) != null;
HasRenderGraphRasterPassBuilderSetColorScaleFullscreenExecution =
rasterPassBuilderType.GetMethod(
"SetColorScaleFullscreenExecution",
PublicInstanceMethodFlags) != null;
HasRenderGraphRasterPassBuilderSetShaderVectorFullscreenExecution =
rasterPassBuilderType.GetMethod(
"SetShaderVectorFullscreenExecution",
PublicInstanceMethodFlags) != null;
HasRenderGraphRasterPassBuilderSetFinalColorFullscreenExecution =
rasterPassBuilderType.GetMethod(
"SetFinalColorFullscreenExecution",
@@ -488,6 +505,13 @@ namespace Gameplay
rasterPassBuilderType.GetMethod(
"Commit",
PublicInstanceMethodFlags) != null;
HasRenderGraphRasterContextType =
rasterPassContextType != null;
HasRenderGraphRasterContextCommandBuffer =
rasterPassContextType.GetProperty(
"cmd",
BindingFlags.Instance |
BindingFlags.Public) != null;
HasSceneRenderPhaseType =
contextType.Assembly.GetType(
"XCEngine.Rendering.SceneRenderPhase") != null;
@@ -640,6 +664,21 @@ namespace Gameplay
typeof(ContextContainer)
},
null) != null;
HasRenderPassProtectedRecordColorScaleFullscreenPass =
renderPassType.GetMethod(
"RecordColorScaleFullscreenPass",
BindingFlags.Instance |
BindingFlags.NonPublic) != null;
HasRenderPassProtectedRecordShaderVectorFullscreenPass =
renderPassType.GetMethod(
"RecordShaderVectorFullscreenPass",
BindingFlags.Instance |
BindingFlags.NonPublic) != null;
HasRenderPassProtectedRecordFinalColorFullscreenPass =
renderPassType.GetMethod(
"RecordFinalColorFullscreenPass",
BindingFlags.Instance |
BindingFlags.NonPublic) != null;
HasRenderPassComparisonOperators =
renderPassType.GetMethod(
"op_GreaterThan",