Skip to content

Commit 9b64832

Browse files
seungwon-ohEvergreen
authored andcommitted
[UUM-77742] Fix depth rendering when using Render Objects
1 parent 3ba610d commit 9b64832

12 files changed

Lines changed: 1117 additions & 5 deletions

File tree

Packages/com.unity.render-pipelines.universal/Editor/UniversalRendererDataEditor.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ private static class Styles
1818
public static readonly GUIContent PostProcessIncluded = EditorGUIUtility.TrTextContent("Enabled", "Enables the use of post processing effects within the scene. If disabled, Unity excludes post processing renderer Passes, shaders and textures from the build.");
1919
public static readonly GUIContent PostProcessLabel = EditorGUIUtility.TrTextContent("Data", "The asset containing references to shaders and Textures that the Renderer uses for post-processing.");
2020
public static readonly GUIContent FilteringSectionLabel = EditorGUIUtility.TrTextContent("Filtering", "Settings that controls and define which layers the renderer draws.");
21+
public static readonly GUIContent PrepassMask = EditorGUIUtility.TrTextContent("Prepass Layer Mask", "Controls which prepass layers this renderer draws. It applies to any prepass.");
2122
public static readonly GUIContent OpaqueMask = EditorGUIUtility.TrTextContent("Opaque Layer Mask", "Controls which opaque layers this renderer draws.");
2223
public static readonly GUIContent TransparentMask = EditorGUIUtility.TrTextContent("Transparent Layer Mask", "Controls which transparent layers this renderer draws.");
2324

@@ -45,6 +46,7 @@ private static class Styles
4546
public static readonly GUIContent deferredPlusIncompatibleWarning = EditorGUIUtility.TrTextContent("Deferred+ is only available with Render Graph. In compatibility mode, Deferred+ falls back to Forward+.");
4647
}
4748

49+
SerializedProperty m_PrepassLayerMask;
4850
SerializedProperty m_OpaqueLayerMask;
4951
SerializedProperty m_TransparentLayerMask;
5052
SerializedProperty m_RenderingMode;
@@ -64,6 +66,7 @@ private static class Styles
6466

6567
private void OnEnable()
6668
{
69+
m_PrepassLayerMask = serializedObject.FindProperty("m_PrepassLayerMask");
6770
m_OpaqueLayerMask = serializedObject.FindProperty("m_OpaqueLayerMask");
6871
m_TransparentLayerMask = serializedObject.FindProperty("m_TransparentLayerMask");
6972
m_RenderingMode = serializedObject.FindProperty("m_RenderingMode");
@@ -160,6 +163,11 @@ public override void OnInspectorGUI()
160163

161164
EditorGUILayout.LabelField(Styles.FilteringSectionLabel, EditorStyles.boldLabel);
162165
EditorGUI.indentLevel++;
166+
if (GraphicsSettings.TryGetRenderPipelineSettings<RenderGraphSettings>(out var renderGraphSettings)
167+
&& !renderGraphSettings.enableRenderCompatibilityMode)
168+
{
169+
EditorGUILayout.PropertyField(m_PrepassLayerMask, Styles.PrepassMask);
170+
}
163171
EditorGUILayout.PropertyField(m_OpaqueLayerMask, Styles.OpaqueMask);
164172
EditorGUILayout.PropertyField(m_TransparentLayerMask, Styles.TransparentMask);
165173
EditorGUI.indentLevel--;
@@ -222,8 +230,7 @@ public override void OnInspectorGUI()
222230

223231

224232
EditorGUI.indentLevel--;
225-
if (GraphicsSettings.TryGetRenderPipelineSettings<RenderGraphSettings>(out var renderGraphSettings)
226-
&& renderGraphSettings.enableRenderCompatibilityMode)
233+
if (renderGraphSettings != null && renderGraphSettings.enableRenderCompatibilityMode)
227234
{
228235
EditorGUILayout.Space();
229236
EditorGUILayout.LabelField(Styles.RenderPassSectionLabel, EditorStyles.boldLabel);

Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalRenderingData.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ internal CommandBuffer commandBuffer
4848
/// </summary>
4949
public RenderingMode renderingMode { get; internal set; }
5050

51+
/// <summary>
52+
/// The layer mask set on the renderer to filter prepass objects.
53+
/// </summary>
54+
public LayerMask prepassLayerMask { get; internal set; }
55+
5156
/// <summary>
5257
/// The layer mask set on the renderer to filter opaque objects.
5358
/// </summary>
@@ -72,6 +77,7 @@ public override void Reset()
7277
perObjectData = default;
7378
renderingMode = default;
7479
stencilLodCrossFadeEnabled = default;
80+
prepassLayerMask = -1;
7581
opaqueLayerMask = -1;
7682
transparentLayerMask = -1;
7783
}

Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,7 @@ static UniversalRenderingData CreateRenderingData(ContextContainer frameData, Un
16131613
if (universalRenderer != null)
16141614
{
16151615
data.renderingMode = universalRenderer.renderingModeActual;
1616+
data.prepassLayerMask = universalRenderer.prepassLayerMask;
16161617
data.opaqueLayerMask = universalRenderer.opaqueLayerMask;
16171618
data.transparentLayerMask = universalRenderer.transparentLayerMask;
16181619
}

Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ internal RenderingMode renderingModeActual {
213213
internal PostProcessPass finalPostProcessPass { get => m_PostProcessPasses.finalPostProcessPass; }
214214
internal RTHandle colorGradingLut { get => m_PostProcessPasses.colorGradingLut; }
215215
internal DeferredLights deferredLights { get => m_DeferredLights; }
216+
internal LayerMask prepassLayerMask { get; set; }
216217
internal LayerMask opaqueLayerMask { get; set; }
217218
internal LayerMask transparentLayerMask { get; set; }
218219
internal bool shadowTransparentReceive { get; set; }
@@ -265,6 +266,15 @@ public UniversalRenderer(UniversalRendererData data) : base(data)
265266
m_DefaultStencilState.SetZFailOperation(stencilData.zFailOperation);
266267

267268
m_IntermediateTextureMode = data.intermediateTextureMode;
269+
if (GraphicsSettings.TryGetRenderPipelineSettings<RenderGraphSettings>(out var renderGraphSettings)
270+
&& !renderGraphSettings.enableRenderCompatibilityMode)
271+
{
272+
prepassLayerMask = data.prepassLayerMask;
273+
}
274+
else
275+
{
276+
prepassLayerMask = data.opaqueLayerMask;
277+
}
268278
opaqueLayerMask = data.opaqueLayerMask;
269279
transparentLayerMask = data.transparentLayerMask;
270280
shadowTransparentReceive = data.shadowTransparentReceive;
@@ -319,8 +329,8 @@ public UniversalRenderer(UniversalRendererData data) : base(data)
319329
// Schedule XR copydepth right after m_FinalBlitPass
320330
m_XRCopyDepthPass = new CopyDepthPass(RenderPassEvent.AfterRendering + k_AfterFinalBlitPassQueueOffset, copyDephPS);
321331
#endif
322-
m_DepthPrepass = new DepthOnlyPass(RenderPassEvent.BeforeRenderingPrePasses, RenderQueueRange.opaque, data.opaqueLayerMask);
323-
m_DepthNormalPrepass = new DepthNormalOnlyPass(RenderPassEvent.BeforeRenderingPrePasses, RenderQueueRange.opaque, data.opaqueLayerMask);
332+
m_DepthPrepass = new DepthOnlyPass(RenderPassEvent.BeforeRenderingPrePasses, RenderQueueRange.opaque, prepassLayerMask);
333+
m_DepthNormalPrepass = new DepthNormalOnlyPass(RenderPassEvent.BeforeRenderingPrePasses, RenderQueueRange.opaque, prepassLayerMask);
324334

325335
if (renderingModeRequested == RenderingMode.Forward || renderingModeRequested == RenderingMode.ForwardPlus)
326336
{

Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererData.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,9 @@ static void CreateUniversalRendererData()
132132
/// </summary>
133133
public PostProcessData postProcessData = null;
134134

135-
const int k_LatestAssetVersion = 2;
135+
const int k_LatestAssetVersion = 3;
136136
[SerializeField] int m_AssetVersion = 0;
137+
[SerializeField] LayerMask m_PrepassLayerMask = -1;
137138
[SerializeField] LayerMask m_OpaqueLayerMask = -1;
138139
[SerializeField] LayerMask m_TransparentLayerMask = -1;
139140
[SerializeField] StencilStateData m_DefaultStencilState = new StencilStateData() { passOperation = StencilOp.Replace }; // This default state is compatible with deferred renderer.
@@ -163,6 +164,19 @@ protected override ScriptableRenderer Create()
163164
return new UniversalRenderer(this);
164165
}
165166

167+
/// <summary>
168+
/// Use this to configure how to filter prepass objects.
169+
/// </summary>
170+
public LayerMask prepassLayerMask
171+
{
172+
get => m_PrepassLayerMask;
173+
set
174+
{
175+
SetDirty();
176+
m_PrepassLayerMask = value;
177+
}
178+
}
179+
166180
/// <summary>
167181
/// Use this to configure how to filter opaque objects.
168182
/// </summary>
@@ -399,6 +413,10 @@ void ISerializationCallbackReceiver.OnAfterDeserialize()
399413
m_CopyDepthMode = CopyDepthMode.AfterOpaques;
400414
}
401415

416+
if (m_AssetVersion <= 2)
417+
{
418+
m_PrepassLayerMask = m_OpaqueLayerMask;
419+
}
402420

403421
m_AssetVersion = k_LatestAssetVersion;
404422
}

Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/URPAssets/DefaultURPAsset.asset

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ MonoBehaviour:
5757
- {fileID: 11400000, guid: 89054f48c57da7c479fee17c7a703635, type: 2}
5858
- {fileID: 11400000, guid: 030c8301f2c12b94fa730f3f402b803e, type: 2}
5959
- {fileID: 11400000, guid: 07cb18bb06b5e43c09f9c046804bde0d, type: 2}
60+
- {fileID: 11400000, guid: 6810122dc0f8d244faf9c3cd24516686, type: 2}
6061
m_DefaultRendererIndex: 0
6162
m_RequireDepthTexture: 1
6263
m_RequireOpaqueTexture: 1

Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/351_PrepassLayer.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)