diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index 46517162261..f83cb9c25d6 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -194,6 +194,7 @@ The version number for this package has increased due to a version update of a r - Fixed issue that caused non-static object to not render at times in OnEnable reflection probes. - Baked reflection probes now correctly use static sky for ambient lighting. - Use draggable fields for float scalable settings +- 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 7b1b12e8ea5..6db97847a12 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() @@ -108,10 +107,14 @@ void OnGUI() compositor.SetupCompositionMaterial(); CompositionUtils.SetDefaultCamera(compositor); CompositionUtils.SetDefaultLayers(compositor); - } - if (compositor) + Undo.RegisterCreatedObjectUndo(compositor.outputCamera.gameObject, "Create Compositor"); + Undo.RegisterCreatedObjectUndo(go, "Create Compositor"); + } + else if (compositor) { + string message = enableCompositor ? "Enable Compositor" : "Disable Compositor"; + Undo.RecordObject(compositor, message); compositor.enabled = enableCompositor; } else 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 804f76453f9..747da77bff9 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; @@ -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 @@ -222,7 +231,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(); @@ -340,13 +349,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) 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 c2f9fcde07a..d1269b3188d 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs @@ -826,7 +826,7 @@ internal bool IsThisCameraShared(Camera camera) return count > 1; } - static public Camera GetSceceCamera() + static public Camera GetSceneCamera() { if (Camera.main != null) { @@ -834,7 +834,7 @@ static public Camera GetSceceCamera() } foreach (var camera in Camera.allCameras) { - if (camera.name != "MainCompositorCamera") + if (camera != CompositionManager.GetInstance().outputCamera) { return camera; }