From 5a9a4f68e8bce050579235f71f47601214a95cf0 Mon Sep 17 00:00:00 2001 From: Adrien de Tocqueville Date: Fri, 16 Oct 2020 14:00:40 +0200 Subject: [PATCH 1/3] Rename function --- .../Runtime/Compositor/CompositionLayer.cs | 4 ++-- .../Runtime/Compositor/CompositionManager.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs index 29dcfe9953b..68e7af57aa0 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs @@ -151,7 +151,7 @@ public static CompositorLayer CreateStackLayer(LayerType type = CompositorLayer. var newLayer = new CompositorLayer(); newLayer.m_LayerName = layerName; newLayer.m_Type = type; - newLayer.m_Camera = CompositionManager.GetSceceCamera(); + newLayer.m_Camera = CompositionManager.GetSceneCamera(); newLayer.m_CullingMask = newLayer.m_Camera? newLayer.m_Camera.cullingMask : 0; //LayerMask.GetMask("None"); newLayer.m_OutputTarget = CompositorLayer.OutputTarget.CameraStack; newLayer.m_ClearDepth = true; @@ -222,7 +222,7 @@ public void Init(string layerID = "") // Note: Movie & image layers are rendered at the output resolution (and not the movie/image resolution). This is required to have post-processing effects like film grain at full res. if (m_Camera == null) { - m_Camera = CompositionManager.GetSceceCamera(); + m_Camera = CompositionManager.GetSceneCamera(); } var compositor = CompositionManager.GetInstance(); diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs index 400e64a2e62..633cfe28911 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs @@ -819,7 +819,7 @@ internal bool IsThisCameraShared(Camera camera) return count > 1; } - static public Camera GetSceceCamera() + static public Camera GetSceneCamera() { if (Camera.main != null) { @@ -827,7 +827,7 @@ static public Camera GetSceceCamera() } foreach (var camera in Camera.allCameras) { - if (camera.name != "MainCompositorCamera") + if (camera != CompositionManager.GetInstance().outputCamera) { return camera; } From 4fd4a38e68a819f95701d66580fda44b9b1ea813 Mon Sep 17 00:00:00 2001 From: Adrien de Tocqueville Date: Fri, 16 Oct 2020 15:07:02 +0200 Subject: [PATCH 2/3] Undoable "enable compositor" --- .../CHANGELOG.md | 1 + .../Editor/Compositor/CompositorWindow.cs | 5 +++++ .../Runtime/Compositor/CompositionLayer.cs | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index e4f142d1b14..697b1ff4dc6 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -166,6 +166,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed null reference in the Undo callback of the graphics compositor - Fixed cullmode for SceneSelectionPass. - Fixed issue that caused non-static object to not render at times in OnEnable reflection probes. +- Fixed undo after enabling compositor. ### Changed - Preparation pass for RTSSShadows to be supported by render graph. diff --git a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs index eee3264a789..41a36811c95 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs @@ -108,6 +108,11 @@ void OnGUI() compositor.SetupCompositionMaterial(); CompositionUtils.SetDefaultCamera(compositor); CompositionUtils.SetDefaultLayers(compositor); + + Undo.RegisterCreatedObjectUndo(compositor.outputCamera.gameObject, "Create Compositor"); + var undoID = Undo.GetCurrentGroup(); + Undo.RegisterCreatedObjectUndo(go, ""); + Undo.CollapseUndoOperations(undoID); } if (compositor) diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs index 68e7af57aa0..69acee00e6b 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs @@ -187,6 +187,15 @@ static float EnumToScale(ResolutionScale scale) return 1.0f / (int)scale; } + static T AddComponent(GameObject go) where T : Component + { + #if UNITY_EDITOR + return UnityEditor.Undo.AddComponent(go); + #else + return go.AddComponent(); + #endif + } + public int pixelWidth { get @@ -338,13 +347,15 @@ public void Init(string layerID = "") if (m_LayerCamera) { m_LayerCamera.enabled = m_Show; - var cameraData = m_LayerCamera.GetComponent(); + var cameraData = m_LayerCamera.GetComponent() + ?? AddComponent(m_LayerCamera.gameObject); + var layerData = m_LayerCamera.GetComponent(); { // create the component if it is required and does not exist if (layerData == null) { - layerData = m_LayerCamera.gameObject.AddComponent(); + layerData = AddComponent(m_LayerCamera.gameObject); layerData.hideFlags = HideFlags.HideAndDontSave | HideFlags.HideInInspector; } // Reset the layer params (in case we cloned a camera which already had AdditionalCompositorData) From 924b0ba324aa0f7a077e71beb9468b6d6e3c3e69 Mon Sep 17 00:00:00 2001 From: Adrien de Tocqueville Date: Fri, 16 Oct 2020 18:00:07 +0200 Subject: [PATCH 3/3] Undo/Redo Enable/Disable compositor --- .../Editor/Compositor/CompositorWindow.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs index 41a36811c95..53c2d7d529f 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs @@ -71,7 +71,6 @@ void Update() } } - } void OnGUI() @@ -117,6 +116,8 @@ void OnGUI() if (compositor) { + string message = enableCompositor ? "Enable Compositor" : "Disable Compositor"; + Undo.RecordObject(compositor, message); compositor.enabled = enableCompositor; } else