From 79c376e55dd59a369307b2481aa21cc8331c0502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Vauchelles?= Date: Fri, 3 Jul 2020 15:53:15 +0200 Subject: [PATCH] Find the appropriate default frame settings per editor (case 1247631) --- .../CHANGELOG.md | 1 + .../Lighting/Reflection/HDProbeEditor.cs | 7 +++++- .../Settings/DefaultSettingsPanel.cs | 24 ++++++++++++++++--- .../Settings/FrameSettingsUI.Drawers.cs | 16 ++++++------- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index 217e1e06348..f64d8edd6fe 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -712,6 +712,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed issue with light layers bigger than 8 (and above the supported range). - Fixed issue with culling layer mask of area light's emissive mesh - Fixed errors when switching area light to disk shape while an area emissive mesh was displayed. +- Fixed default frame settings MSAA toggle for reflection probes (case 1247631) ### Changed - Improve MIP selection for decals on Transparents diff --git a/com.unity.render-pipelines.high-definition/Editor/Lighting/Reflection/HDProbeEditor.cs b/com.unity.render-pipelines.high-definition/Editor/Lighting/Reflection/HDProbeEditor.cs index 81abdeaca4a..2d1625dcc18 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Lighting/Reflection/HDProbeEditor.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Lighting/Reflection/HDProbeEditor.cs @@ -16,7 +16,7 @@ interface IHDProbeEditor bool showChromeGizmo { get; set; } } - abstract class HDProbeEditor : Editor, IHDProbeEditor + abstract class HDProbeEditor : Editor, IHDProbeEditor, IDefaultFrameSettingsType where TProvider : struct, HDProbeUI.IProbeUISettingsProvider, InfluenceVolumeUI.IInfluenceUISettingsProvider where TSerialized : SerializedHDProbe { @@ -142,5 +142,10 @@ static Func ComputeCapturePointPreviewSizeGetter() } internal static float capturePointPreviewSize { get { return s_CapturePointPreviewSizeGetter(); } } + + public FrameSettingsRenderType GetFrameSettingsType() + => GetTarget(target).mode == ProbeSettings.Mode.Realtime + ? FrameSettingsRenderType.RealtimeReflection + : FrameSettingsRenderType.CustomOrBakedReflection; } } diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/DefaultSettingsPanel.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/DefaultSettingsPanel.cs index 367dbddb259..be7b7ac6f8c 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/DefaultSettingsPanel.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/DefaultSettingsPanel.cs @@ -22,12 +22,27 @@ public static SettingsProvider CreateSettingsProvider() keywords = SettingsProvider.GetSearchKeywordsFromGUIContentProperties() .Concat(SettingsProvider.GetSearchKeywordsFromGUIContentProperties()) .Concat(OverridableFrameSettingsArea.frameSettingsKeywords).ToArray(), - guiHandler = s_IMGUIImpl.OnGUI, + guiHandler = s_IMGUIImpl.DoGUI, }; } class DefaultSettingsPanelIMGUI { + // A wrapper for CoreEditorDrawers + class CoreEditorDrawerEditorWrapper : Editor, IDefaultFrameSettingsType + { + public FrameSettingsRenderType GetFrameSettingsType() + { + switch (HDRenderPipelineUI.selectedFrameSettings) + { + case HDRenderPipelineUI.SelectedFrameSettings.Camera: return FrameSettingsRenderType.Camera; + case HDRenderPipelineUI.SelectedFrameSettings.RealtimeReflection: return FrameSettingsRenderType.RealtimeReflection; + case HDRenderPipelineUI.SelectedFrameSettings.BakedOrCustomReflection: return FrameSettingsRenderType.CustomOrBakedReflection; + } + throw new Exception("unreachable"); + } + } + public class Styles { public const int labelWidth = 220; @@ -47,8 +62,9 @@ public class Styles ReorderableList m_BeforePostProcessCustomPostProcesses; ReorderableList m_AfterPostProcessCustomPostProcesses; int m_CurrentVolumeProfileInstanceID; + private Editor m_Cache; - public void OnGUI(string searchContext) + public void DoGUI(string searchContext) { m_ScrollViewPosition = GUILayout.BeginScrollView(m_ScrollViewPosition, EditorStyles.largeLabel); Draw_GeneralSettings(); @@ -278,7 +294,9 @@ void Draw_DefaultFrameSettings() var serializedObject = new SerializedObject(hdrpAsset); var serializedHDRPAsset = new SerializedHDRenderPipelineAsset(serializedObject); - HDRenderPipelineUI.FrameSettingsSection.Draw(serializedHDRPAsset, null); + Editor.CreateCachedEditor(hdrpAsset, typeof(CoreEditorDrawerEditorWrapper), ref m_Cache); + + HDRenderPipelineUI.FrameSettingsSection.Draw(serializedHDRPAsset, m_Cache); serializedObject.ApplyModifiedProperties(); } } diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs index 055b2533ec8..ecc16a314e9 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs @@ -44,6 +44,11 @@ public static MaterialQualityMode Into(this MaterialQuality quality) } } + interface IDefaultFrameSettingsType + { + FrameSettingsRenderType GetFrameSettingsType(); + } + partial class FrameSettingsUI { enum Expandable @@ -131,14 +136,9 @@ static HDRenderPipelineAsset GetHDRPAssetFor(Editor owner) static FrameSettings GetDefaultFrameSettingsFor(Editor owner) { HDRenderPipelineAsset hdrpAsset = GetHDRPAssetFor(owner); - if (owner is IHDProbeEditor) - { - if ((owner as IHDProbeEditor).GetTarget(owner.target).mode == ProbeSettings.Mode.Realtime) - return hdrpAsset.GetDefaultFrameSettings(FrameSettingsRenderType.RealtimeReflection); - else - return hdrpAsset.GetDefaultFrameSettings(FrameSettingsRenderType.CustomOrBakedReflection); - } - return hdrpAsset.GetDefaultFrameSettings(FrameSettingsRenderType.Camera); + return owner is IDefaultFrameSettingsType getType + ? hdrpAsset.GetDefaultFrameSettings(getType.GetFrameSettingsType()) + : hdrpAsset.GetDefaultFrameSettings(FrameSettingsRenderType.Camera); } static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, Editor owner, bool withOverride)