From 94393c1082f231825c3bf7c5df5dff24b2218b04 Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Thu, 11 Mar 2021 16:33:16 +0900 Subject: [PATCH 1/7] [UniversalRP] Replace some magic numbers by named variable UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution --- .../Editor/UniversalRenderPipelineAssetEditor.cs | 4 ++-- .../Editor/UniversalRenderPipelineLightEditor.cs | 4 ++-- .../Runtime/UniversalAdditionalLightData.cs | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAssetEditor.cs b/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAssetEditor.cs index 13f735ce94b..029651b991b 100644 --- a/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAssetEditor.cs +++ b/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAssetEditor.cs @@ -47,7 +47,7 @@ internal class Styles public static GUIContent perObjectLimit = EditorGUIUtility.TrTextContent("Per Object Limit", "Maximum amount of additional lights. These lights are sorted and culled per-object."); public static GUIContent supportsAdditionalShadowsText = EditorGUIUtility.TrTextContent("Cast Shadows", "If enabled shadows will be supported for spot lights.\n"); public static GUIContent additionalLightsShadowmapResolution = EditorGUIUtility.TrTextContent("Shadow Atlas Resolution", "All additional lights are packed into a single shadowmap atlas. This setting controls the atlas size."); - public static GUIContent additionalLightsShadowResolutionTiers = EditorGUIUtility.TrTextContent("Shadow Resolution Tiers", "Additional Lights Shadow Resolution Tiers. Rounded to the next power of two, and clamped to be at least 128."); + public static GUIContent additionalLightsShadowResolutionTiers = EditorGUIUtility.TrTextContent("Shadow Resolution Tiers", $"Additional Lights Shadow Resolution Tiers. Rounded to the next power of two, and clamped to be at least {UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution}."); public static GUIContent[] additionalLightsShadowResolutionTierNames = { new GUIContent("Low"), @@ -379,7 +379,7 @@ void DrawShadowResolutionTierSettings() { var fieldSlot = new Rect(contentRect.x + pixelShift, contentRect.y, num - labelWidth, contentRect.height); // Define the rectangle for the field int value = EditorGUI.DelayedIntField(fieldSlot, values[index].intValue); - values[index].intValue = Mathf.Max(128, Mathf.NextPowerOfTwo(value)); + values[index].intValue = Mathf.Max(UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution, Mathf.NextPowerOfTwo(value)); } pixelShift += spaceLeft; // Shift by the slot that was left for the field } diff --git a/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineLightEditor.cs b/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineLightEditor.cs index 1432bdb2b58..7bf20c9cba1 100644 --- a/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineLightEditor.cs +++ b/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineLightEditor.cs @@ -35,7 +35,7 @@ class Styles public static readonly GUIContent ShadowNormalBias = EditorGUIUtility.TrTextContent("Normal", "Controls the distance shadow caster vertices are offset along their normals when rendering shadow maps. Currently ignored for Point Lights."); // Resolution (default or custom) - public static readonly GUIContent ShadowResolution = EditorGUIUtility.TrTextContent("Resolution", "Sets the rendered resolution of the shadow maps. A higher resolution increases the fidelity of shadows at the cost of GPU performance and memory usage. Rounded to the next power of two, and clamped to be at least 128."); + public static readonly GUIContent ShadowResolution = EditorGUIUtility.TrTextContent("Resolution", $"Sets the rendered resolution of the shadow maps. A higher resolution increases the fidelity of shadows at the cost of GPU performance and memory usage. Rounded to the next power of two, and clamped to be at least {UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution}."); public static readonly int[] ShadowResolutionDefaultValues = { UniversalAdditionalLightData.AdditionalLightsShadowResolutionTierCustom, @@ -376,7 +376,7 @@ void DrawShadowsResolutionGUI() { // show the custom value field GUI. var newResolution = EditorGUI.IntField(fieldRect, settings.shadowsResolution.intValue); - settings.shadowsResolution.intValue = Mathf.Max(128, Mathf.NextPowerOfTwo(newResolution)); + settings.shadowsResolution.intValue = Mathf.Max(UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution, Mathf.NextPowerOfTwo(newResolution)); m_AdditionalLightDataSO.ApplyModifiedProperties(); } diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs b/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs index 37363dac78c..5ae2efc03c2 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs @@ -31,6 +31,7 @@ public bool usePipelineSettings public static readonly int AdditionalLightsShadowResolutionTierHigh = 2; public static readonly int AdditionalLightsShadowDefaultResolutionTier = AdditionalLightsShadowResolutionTierLow; public static readonly int AdditionalLightsShadowDefaultCustomResolution = 128; + public static readonly int AdditionalLightsShadowMinimumResolution = 128; [Tooltip("Controls if light shadow resolution uses pipeline settings.")] [SerializeField] int m_AdditionalLightsShadowResolutionTier = AdditionalLightsShadowDefaultResolutionTier; From 204a9e1f10f65fa8275a941d6299976b76659c31 Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Thu, 11 Mar 2021 16:36:25 +0900 Subject: [PATCH 2/7] [UniversalRP] Make sure upgrading to Universal RP 2021 does not change Spot Light shadow resolutions (internal ticket https://fogbugz.unity3d.com/f/cases/1316540 ) --- .../Runtime/Data/UniversalRenderPipelineAsset.cs | 10 ++++++++++ .../Runtime/UniversalAdditionalLightData.cs | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs index d24b35eec16..8681390a2ad 100644 --- a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs +++ b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs @@ -927,6 +927,16 @@ public void OnAfterDeserialize() k_AssetVersion = 7; } + if (k_AssetVersion < 8) + { + m_AdditionalLightsShadowResolutionTierHigh = (int)m_AdditionalLightsShadowmapResolution; + m_AdditionalLightsShadowResolutionTierMedium = Mathf.Max(m_AdditionalLightsShadowResolutionTierHigh / 2, UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution); + m_AdditionalLightsShadowResolutionTierLow = Mathf.Max(m_AdditionalLightsShadowResolutionTierMedium / 2, UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution); + + k_AssetPreviousVersion = k_AssetVersion; + k_AssetVersion = 8; + } + if (k_AssetVersion < 8) { k_AssetPreviousVersion = k_AssetVersion; diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs b/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs index 5ae2efc03c2..3053fce9acd 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalAdditionalLightData.cs @@ -29,7 +29,7 @@ public bool usePipelineSettings public static readonly int AdditionalLightsShadowResolutionTierLow = 0; public static readonly int AdditionalLightsShadowResolutionTierMedium = 1; public static readonly int AdditionalLightsShadowResolutionTierHigh = 2; - public static readonly int AdditionalLightsShadowDefaultResolutionTier = AdditionalLightsShadowResolutionTierLow; + public static readonly int AdditionalLightsShadowDefaultResolutionTier = AdditionalLightsShadowResolutionTierHigh; public static readonly int AdditionalLightsShadowDefaultCustomResolution = 128; public static readonly int AdditionalLightsShadowMinimumResolution = 128; From 1f7e9539071c62b249517284577dc5f763ab3fd0 Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Thu, 11 Mar 2021 17:44:05 +0900 Subject: [PATCH 3/7] [UniversalRP] Only upgrade Additional Light Shadow Resolution Tier values if it seems that they have never been customized (@Verasl suggestion) --- .../Data/UniversalRenderPipelineAsset.cs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs index 8681390a2ad..f7e0d80a451 100644 --- a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs +++ b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs @@ -139,9 +139,9 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset, ISerial [SerializeField] bool m_AdditionalLightShadowsSupported = false; [SerializeField] ShadowResolution m_AdditionalLightsShadowmapResolution = ShadowResolution._2048; - [SerializeField] int m_AdditionalLightsShadowResolutionTierLow = 256; - [SerializeField] int m_AdditionalLightsShadowResolutionTierMedium = 512; - [SerializeField] int m_AdditionalLightsShadowResolutionTierHigh = 1024; + [SerializeField] int m_AdditionalLightsShadowResolutionTierLow = AdditionalLightsDefaultShadowResolutionTierLow; + [SerializeField] int m_AdditionalLightsShadowResolutionTierMedium = AdditionalLightsDefaultShadowResolutionTierMedium; + [SerializeField] int m_AdditionalLightsShadowResolutionTierHigh = AdditionalLightsDefaultShadowResolutionTierHigh; // Shadows Settings [SerializeField] float m_ShadowDistance = 50.0f; @@ -193,6 +193,10 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset, ISerial public static readonly string packagePath = "Packages/com.unity.render-pipelines.universal"; public static readonly string editorResourcesGUID = "a3d8d823eedde654bb4c11a1cfaf1abb"; + public static readonly int AdditionalLightsDefaultShadowResolutionTierLow = 256; + public static readonly int AdditionalLightsDefaultShadowResolutionTierMedium = 512; + public static readonly int AdditionalLightsDefaultShadowResolutionTierHigh = 1024; + public static UniversalRenderPipelineAsset Create(ScriptableRendererData rendererData = null) { // Create Universal RP Asset @@ -929,9 +933,15 @@ public void OnAfterDeserialize() if (k_AssetVersion < 8) { - m_AdditionalLightsShadowResolutionTierHigh = (int)m_AdditionalLightsShadowmapResolution; - m_AdditionalLightsShadowResolutionTierMedium = Mathf.Max(m_AdditionalLightsShadowResolutionTierHigh / 2, UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution); - m_AdditionalLightsShadowResolutionTierLow = Mathf.Max(m_AdditionalLightsShadowResolutionTierMedium / 2, UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution); + if (m_AdditionalLightsShadowResolutionTierHigh == AdditionalLightsDefaultShadowResolutionTierHigh && + m_AdditionalLightsShadowResolutionTierMedium == AdditionalLightsDefaultShadowResolutionTierMedium && + m_AdditionalLightsShadowResolutionTierLow == AdditionalLightsDefaultShadowResolutionTierLow) + { + // if all resolutions are still the default values, we assume that they have never been customized and that it is safe to upgrade them to fit better the Additional Lights Shadow Atlas size + m_AdditionalLightsShadowResolutionTierHigh = (int)m_AdditionalLightsShadowmapResolution; + m_AdditionalLightsShadowResolutionTierMedium = Mathf.Max(m_AdditionalLightsShadowResolutionTierHigh / 2, UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution); + m_AdditionalLightsShadowResolutionTierLow = Mathf.Max(m_AdditionalLightsShadowResolutionTierMedium / 2, UniversalAdditionalLightData.AdditionalLightsShadowMinimumResolution); + } k_AssetPreviousVersion = k_AssetVersion; k_AssetVersion = 8; From cd1b5e80a5d7e4321c2f9dcda85415961b1ba701 Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Fri, 12 Mar 2021 16:46:45 +0900 Subject: [PATCH 4/7] [UniversalRP] Move UniversalRenderPipelineAsset.AdditionalLightsDefaultShadowResolutionTier... constant definitions outside of #if UNITY_EDITOR block --- .../Runtime/Data/UniversalRenderPipelineAsset.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs index f7e0d80a451..ee42017b982 100644 --- a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs +++ b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs @@ -186,6 +186,10 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset, ISerial internal const int k_ShadowCascadeMinCount = 1; internal const int k_ShadowCascadeMaxCount = 4; + public static readonly int AdditionalLightsDefaultShadowResolutionTierLow = 256; + public static readonly int AdditionalLightsDefaultShadowResolutionTierMedium = 512; + public static readonly int AdditionalLightsDefaultShadowResolutionTierHigh = 1024; + #if UNITY_EDITOR [NonSerialized] internal UniversalRenderPipelineEditorResources m_EditorResourcesAsset; @@ -193,10 +197,6 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset, ISerial public static readonly string packagePath = "Packages/com.unity.render-pipelines.universal"; public static readonly string editorResourcesGUID = "a3d8d823eedde654bb4c11a1cfaf1abb"; - public static readonly int AdditionalLightsDefaultShadowResolutionTierLow = 256; - public static readonly int AdditionalLightsDefaultShadowResolutionTierMedium = 512; - public static readonly int AdditionalLightsDefaultShadowResolutionTierHigh = 1024; - public static UniversalRenderPipelineAsset Create(ScriptableRendererData rendererData = null) { // Create Universal RP Asset From aac184c7b7bd4594abf457f52269fcdce886f3c4 Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Wed, 17 Mar 2021 11:52:45 +0900 Subject: [PATCH 5/7] [UniversalRP] Fix merge error - Addresses comment https://github.com/Unity-Technologies/Graphics/pull/3831#pullrequestreview-612968669 --- .../Data/UniversalRenderPipelineAsset.cs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs index ee42017b982..7e1d925d559 100644 --- a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs +++ b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs @@ -104,8 +104,8 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset, ISerial ScriptableRenderer[] m_Renderers = new ScriptableRenderer[1]; // Default values set when a new UniversalRenderPipeline asset is created - [SerializeField] int k_AssetVersion = 8; - [SerializeField] int k_AssetPreviousVersion = 8; + [SerializeField] int k_AssetVersion = 9; + [SerializeField] int k_AssetPreviousVersion = 9; // Deprecated settings for upgrading sakes [SerializeField] RendererType m_RendererType = RendererType.UniversalRenderer; @@ -932,6 +932,13 @@ public void OnAfterDeserialize() } if (k_AssetVersion < 8) + { + k_AssetPreviousVersion = k_AssetVersion; + m_CascadeBorder = 0.1f; // In previous version we had this hard coded + k_AssetVersion = 8; + } + + if (k_AssetVersion < 9) { if (m_AdditionalLightsShadowResolutionTierHigh == AdditionalLightsDefaultShadowResolutionTierHigh && m_AdditionalLightsShadowResolutionTierMedium == AdditionalLightsDefaultShadowResolutionTierMedium && @@ -944,14 +951,7 @@ public void OnAfterDeserialize() } k_AssetPreviousVersion = k_AssetVersion; - k_AssetVersion = 8; - } - - if (k_AssetVersion < 8) - { - k_AssetPreviousVersion = k_AssetVersion; - m_CascadeBorder = 0.1f; // In previous version we had this hard coded - k_AssetVersion = 8; + k_AssetVersion = 9; } #if UNITY_EDITOR @@ -984,10 +984,10 @@ static void UpgradeAsset(UniversalRenderPipelineAsset asset) asset.k_AssetPreviousVersion = 5; } - if (asset.k_AssetPreviousVersion < 8) + if (asset.k_AssetPreviousVersion < 9) { // The added feature was reverted, we keep this version to avoid breakage in case somebody already has version 7 - asset.k_AssetPreviousVersion = 8; + asset.k_AssetPreviousVersion = 9; } EditorUtility.SetDirty(asset); From 43ed67dda22f948983dd7b74da0aee1738458ae7 Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Tue, 23 Mar 2021 10:35:34 +0900 Subject: [PATCH 6/7] [UniversalRP] Increase UniversalGraphicsTest_Foundation scene 105_TransparentReceiveShadow spot light shadow resolution to higher tier to match previous settings --- .../Assets/Scenes/105_TransparentReceiveShadows.unity | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/105_TransparentReceiveShadows.unity b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/105_TransparentReceiveShadows.unity index b48b44cee5d..56ea8f7bcba 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/105_TransparentReceiveShadows.unity +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/105_TransparentReceiveShadows.unity @@ -1752,7 +1752,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_UsePipelineSettings: 0 - m_AdditionalLightsShadowResolutionTier: 1 + m_AdditionalLightsShadowResolutionTier: 2 --- !u!1 &558490757 GameObject: m_ObjectHideFlags: 0 From 82f939df2d54238754f8cb91df530258f5bf9212 Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Thu, 1 Apr 2021 17:56:30 +0900 Subject: [PATCH 7/7] Add local variable to make code easier to read (as suggested in https://github.com/Unity-Technologies/Graphics/pull/3831#discussion_r605061504) --- .../Runtime/Data/UniversalRenderPipelineAsset.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs index 7e1d925d559..71890049eab 100644 --- a/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs +++ b/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs @@ -940,9 +940,12 @@ public void OnAfterDeserialize() if (k_AssetVersion < 9) { - if (m_AdditionalLightsShadowResolutionTierHigh == AdditionalLightsDefaultShadowResolutionTierHigh && - m_AdditionalLightsShadowResolutionTierMedium == AdditionalLightsDefaultShadowResolutionTierMedium && - m_AdditionalLightsShadowResolutionTierLow == AdditionalLightsDefaultShadowResolutionTierLow) + bool assetContainsCustomAdditionalLightShadowResolutions = + m_AdditionalLightsShadowResolutionTierHigh != AdditionalLightsDefaultShadowResolutionTierHigh || + m_AdditionalLightsShadowResolutionTierMedium != AdditionalLightsDefaultShadowResolutionTierMedium || + m_AdditionalLightsShadowResolutionTierLow != AdditionalLightsDefaultShadowResolutionTierLow; + + if (!assetContainsCustomAdditionalLightShadowResolutions) { // if all resolutions are still the default values, we assume that they have never been customized and that it is safe to upgrade them to fit better the Additional Lights Shadow Atlas size m_AdditionalLightsShadowResolutionTierHigh = (int)m_AdditionalLightsShadowmapResolution;