Skip to content

Commit d6f32ad

Browse files
authored
RP Workflows - Adding the capability to revert a single override of a Volume Component (#6129)
1 parent d2d04dc commit d6f32ad

File tree

12 files changed

+133
-32
lines changed

12 files changed

+133
-32
lines changed

com.unity.render-pipelines.core/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
1717

1818
### Added
1919
- Added support for high performant unsafe (uint only) Radix, Merge and Insertion sort algorithms on CoreUnsafeUtils.
20+
- Context menu on Volume Parameters to restore them to their default values.
2021
- Added DebugFrameTiming class that can be used by render pipelines to display CPU/GPU frame timings and bottlenecks in Rendering Debugger.
2122
- Added new DebugUI widget types: ProgressBarValue and ValueTuple
2223
- Added common support code for FSR

com.unity.render-pipelines.core/Editor/Volume/Drawers/ColorParameterDrawer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
1414
return false;
1515

1616
var o = parameter.GetObjectRef<ColorParameter>();
17-
value.colorValue = EditorGUILayout.ColorField(title, value.colorValue, o.showEyeDropper, o.showAlpha, o.hdr);
17+
18+
var rect = EditorGUILayout.GetControlRect();
19+
EditorGUI.BeginProperty(rect, title, value);
20+
value.colorValue = EditorGUI.ColorField(rect, title, value.colorValue, o.showEyeDropper, o.showAlpha, o.hdr);
21+
EditorGUI.EndProperty();
1822
return true;
1923
}
2024
}

com.unity.render-pipelines.core/Editor/Volume/Drawers/FloatParameterDrawer.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
1414
return false;
1515

1616
var o = parameter.GetObjectRef<MinFloatParameter>();
17-
float v = EditorGUILayout.FloatField(title, value.floatValue);
18-
value.floatValue = Mathf.Max(v, o.min);
17+
EditorGUILayout.PropertyField(value, title);
18+
value.floatValue = Mathf.Max(value.floatValue, o.min);
1919
return true;
2020
}
2121
}
@@ -31,8 +31,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
3131
return false;
3232

3333
var o = parameter.GetObjectRef<NoInterpMinFloatParameter>();
34-
float v = EditorGUILayout.FloatField(title, value.floatValue);
35-
value.floatValue = Mathf.Max(v, o.min);
34+
EditorGUILayout.PropertyField(value, title);
35+
value.floatValue = Mathf.Max(value.floatValue, o.min);
3636
return true;
3737
}
3838
}
@@ -48,8 +48,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
4848
return false;
4949

5050
var o = parameter.GetObjectRef<MaxFloatParameter>();
51-
float v = EditorGUILayout.FloatField(title, value.floatValue);
52-
value.floatValue = Mathf.Min(v, o.max);
51+
EditorGUILayout.PropertyField(value, title);
52+
value.floatValue = Mathf.Min(value.floatValue, o.max);
5353
return true;
5454
}
5555
}
@@ -65,8 +65,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
6565
return false;
6666

6767
var o = parameter.GetObjectRef<NoInterpMaxFloatParameter>();
68-
float v = EditorGUILayout.FloatField(title, value.floatValue);
69-
value.floatValue = Mathf.Min(v, o.max);
68+
EditorGUILayout.PropertyField(value, title);
69+
value.floatValue = Mathf.Min(value.floatValue, o.max);
7070
return true;
7171
}
7272
}
@@ -132,10 +132,12 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
132132
var sliderRect = new Rect(floatFieldLeft.xMax + kSeparatorWidth - indentOffset, lineRect.y, lineRect.width - labelRect.width - kFloatFieldWidth * 2 - kSeparatorWidth * 2, lineRect.height);
133133
var floatFieldRight = new Rect(sliderRect.xMax + kSeparatorWidth - indentOffset, lineRect.y, kFloatFieldWidth + indentOffset, lineRect.height);
134134

135+
EditorGUI.BeginProperty(lineRect, title, value);
135136
EditorGUI.PrefixLabel(labelRect, title);
136137
v.x = EditorGUI.FloatField(floatFieldLeft, v.x);
137138
EditorGUI.MinMaxSlider(sliderRect, ref v.x, ref v.y, o.min, o.max);
138139
v.y = EditorGUI.FloatField(floatFieldRight, v.y);
140+
EditorGUI.EndProperty();
139141

140142
value.vector2Value = v;
141143
return true;

com.unity.render-pipelines.core/Editor/Volume/Drawers/IntParameterDrawer.cs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
1515
return false;
1616

1717
var o = parameter.GetObjectRef<MinIntParameter>();
18-
int v = EditorGUILayout.IntField(title, value.intValue);
19-
value.intValue = Mathf.Max(v, o.min);
18+
EditorGUILayout.PropertyField(value, title);
19+
value.intValue = Mathf.Max(value.intValue, o.min);
2020
return true;
2121
}
2222
}
@@ -32,8 +32,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
3232
return false;
3333

3434
var o = parameter.GetObjectRef<NoInterpMinIntParameter>();
35-
int v = EditorGUILayout.IntField(title, value.intValue);
36-
value.intValue = Mathf.Max(v, o.min);
35+
EditorGUILayout.PropertyField(value, title);
36+
value.intValue = Mathf.Max(value.intValue, o.min);
3737
return true;
3838
}
3939
}
@@ -49,8 +49,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
4949
return false;
5050

5151
var o = parameter.GetObjectRef<MaxIntParameter>();
52-
int v = EditorGUILayout.IntField(title, value.intValue);
53-
value.intValue = Mathf.Min(v, o.max);
52+
EditorGUILayout.PropertyField(value, title);
53+
value.intValue = Mathf.Min(value.intValue, o.max);
5454
return true;
5555
}
5656
}
@@ -66,8 +66,8 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
6666
return false;
6767

6868
var o = parameter.GetObjectRef<NoInterpMaxIntParameter>();
69-
int v = EditorGUILayout.IntField(title, value.intValue);
70-
value.intValue = Mathf.Min(v, o.max);
69+
EditorGUILayout.PropertyField(value, title);
70+
value.intValue = Mathf.Min(value.intValue, o.max);
7171
return true;
7272
}
7373
}
@@ -83,8 +83,11 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
8383
return false;
8484

8585
var o = parameter.GetObjectRef<ClampedIntParameter>();
86-
EditorGUILayout.IntSlider(value, o.min, o.max, title);
86+
var lineRect = EditorGUILayout.GetControlRect();
87+
EditorGUI.BeginProperty(lineRect, title, value);
88+
EditorGUI.IntSlider(lineRect, value, o.min, o.max, title);
8789
value.intValue = Mathf.Clamp(value.intValue, o.min, o.max);
90+
EditorGUI.EndProperty();
8891
return true;
8992
}
9093
}
@@ -100,8 +103,11 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
100103
return false;
101104

102105
var o = parameter.GetObjectRef<NoInterpClampedIntParameter>();
103-
EditorGUILayout.IntSlider(value, o.min, o.max, title);
106+
var lineRect = EditorGUILayout.GetControlRect();
107+
EditorGUI.BeginProperty(lineRect, title, value);
108+
EditorGUI.IntSlider(lineRect, value, o.min, o.max, title);
104109
value.intValue = Mathf.Clamp(value.intValue, o.min, o.max);
110+
EditorGUI.EndProperty();
105111
return true;
106112
}
107113
}
@@ -151,9 +157,11 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
151157
if (value.propertyType != SerializedPropertyType.LayerMask)
152158
return false;
153159

160+
var lineRect = EditorGUILayout.GetControlRect();
161+
EditorGUI.BeginProperty(lineRect, title, value);
154162
value.intValue = FieldToLayerMask(
155-
EditorGUILayout.MaskField(title, LayerMaskToField(value.intValue), InternalEditorUtility.layers));
156-
163+
EditorGUI.MaskField(lineRect, title, LayerMaskToField(value.intValue), InternalEditorUtility.layers));
164+
EditorGUI.EndProperty();
157165
return true;
158166
}
159167
}

com.unity.render-pipelines.core/Editor/Volume/Drawers/TextureParameterDrawer.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,10 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
106106
if (value.propertyType != SerializedPropertyType.ObjectReference)
107107
return false;
108108

109-
TextureParameterHelper.DoObjectField(value, title, typeof(Texture2D), typeof(RenderTexture), validator);
109+
var rect = EditorGUILayout.GetControlRect();
110+
EditorGUI.BeginProperty(rect, title, value);
111+
TextureParameterHelper.DoObjectField(rect, value, title, typeof(Texture2D), typeof(RenderTexture), validator);
112+
EditorGUI.EndProperty();
110113
return true;
111114
}
112115
}
@@ -132,7 +135,10 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
132135
if (value.propertyType != SerializedPropertyType.ObjectReference)
133136
return false;
134137

135-
TextureParameterHelper.DoObjectField(value, title, typeof(Texture3D), typeof(RenderTexture), validator);
138+
var rect = EditorGUILayout.GetControlRect();
139+
EditorGUI.BeginProperty(rect, title, value);
140+
TextureParameterHelper.DoObjectField(rect, value, title, typeof(Texture3D), typeof(RenderTexture), validator);
141+
EditorGUI.EndProperty();
136142
return true;
137143
}
138144
}
@@ -157,7 +163,10 @@ static internal bool OnGUI(SerializedProperty value, GUIContent title)
157163
if (value.propertyType != SerializedPropertyType.ObjectReference)
158164
return false;
159165

160-
TextureParameterHelper.DoObjectField(value, title, typeof(Cubemap), typeof(RenderTexture), validator);
166+
var rect = EditorGUILayout.GetControlRect();
167+
EditorGUI.BeginProperty(rect, title, value);
168+
TextureParameterHelper.DoObjectField(rect, value, title, typeof(Cubemap), typeof(RenderTexture), validator);
169+
EditorGUI.EndProperty();
161170
return true;
162171
}
163172

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#if UNITY_EDITOR
2+
3+
using System;
4+
using UnityEditor;
5+
6+
namespace UnityEngine.Rendering
7+
{
8+
public partial class VolumeComponent : IApplyRevertPropertyContextMenuItemProvider
9+
{
10+
public bool TryGetRevertMethodForFieldName(SerializedProperty property, out Action<SerializedProperty> revertMethod)
11+
{
12+
revertMethod = property =>
13+
{
14+
var defaultVolumeComponent = VolumeManager.instance.GetDefaultVolumeComponent(property.serializedObject.targetObject.GetType());
15+
Undo.RecordObject(property.serializedObject.targetObject, $"Revert property {property.propertyPath} from {property.serializedObject}");
16+
SerializedObject serializedObject = new SerializedObject(defaultVolumeComponent);
17+
var serializedProperty = serializedObject.FindProperty(property.propertyPath);
18+
property.serializedObject.CopyFromSerializedProperty(serializedProperty);
19+
property.serializedObject.ApplyModifiedProperties();
20+
};
21+
22+
return true;
23+
}
24+
25+
public string GetSourceTerm()
26+
{
27+
return "Property";
28+
}
29+
30+
public bool TryGetApplyMethodForFieldName(SerializedProperty property, out Action<SerializedProperty> applyMethod)
31+
{
32+
applyMethod = null;
33+
return false;
34+
}
35+
36+
public string GetSourceName(Component comp)
37+
{
38+
return string.Empty;
39+
}
40+
}
41+
}
42+
#endif

com.unity.render-pipelines.core/Runtime/Volume/VolumeComponent.EditorOnly.cs.meta

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

com.unity.render-pipelines.core/Runtime/Volume/VolumeComponent.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Collections.ObjectModel;
4-
using System.Reflection;
54
using System.Linq;
5+
using System.Reflection;
66

77
namespace UnityEngine.Rendering
88
{
@@ -92,7 +92,7 @@ public sealed class VolumeComponentDeprecated : Attribute
9292
/// </code>
9393
/// </example>
9494
[Serializable]
95-
public class VolumeComponent : ScriptableObject
95+
public partial class VolumeComponent : ScriptableObject
9696
{
9797
/// <summary>
9898
/// Local attribute for VolumeComponent fields only.
@@ -146,7 +146,10 @@ internal static void FindParameters(object o, List<VolumeParameter> parameters,
146146
if (field.FieldType.IsSubclassOf(typeof(VolumeParameter)))
147147
{
148148
if (filter?.Invoke(field) ?? true)
149-
parameters.Add((VolumeParameter)field.GetValue(o));
149+
{
150+
VolumeParameter volumeParameter = (VolumeParameter)field.GetValue(o);
151+
parameters.Add(volumeParameter);
152+
}
150153
}
151154
else if (!field.FieldType.IsArray && field.FieldType.IsClass)
152155
FindParameters(field.GetValue(o), parameters, filter);

com.unity.render-pipelines.core/Runtime/Volume/VolumeManager.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,17 @@ public IEnumerable<Type> baseComponentTypes
131131
// would be error-prone)
132132
readonly List<VolumeComponent> m_ComponentsDefaultState;
133133

134+
internal VolumeComponent GetDefaultVolumeComponent(Type volumeComponentType)
135+
{
136+
foreach (VolumeComponent component in m_ComponentsDefaultState)
137+
{
138+
if (component.GetType() == volumeComponentType)
139+
return component;
140+
}
141+
142+
return null;
143+
}
144+
134145
// Recycled list used for volume traversal
135146
readonly List<Collider> m_TempColliders;
136147

com.unity.render-pipelines.high-definition/Editor/Lighting/Shadow/HDShadowSettingsEditor.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,11 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
190190
float max = o.normalized ? 100f : o.representationDistance;
191191
float modifiableValue = value.floatValue * max;
192192
EditorGUI.BeginChangeCheck();
193-
modifiableValue = EditorGUILayout.Slider(title, modifiableValue, 0f, max);
193+
194+
var lineRect = EditorGUILayout.GetControlRect();
195+
EditorGUI.BeginProperty(lineRect, title, value);
196+
modifiableValue = EditorGUI.Slider(lineRect, title, modifiableValue, 0f, max);
197+
EditorGUI.EndProperty();
194198
if (EditorGUI.EndChangeCheck())
195199
{
196200
modifiableValue /= max;
@@ -214,7 +218,10 @@ public override bool OnGUI(SerializedDataParameter parameter, GUIContent title)
214218
float max = o.normalized ? 100f : o.representationDistance;
215219
float modifiableValue = value.floatValue * max;
216220
EditorGUI.BeginChangeCheck();
217-
modifiableValue = EditorGUILayout.Slider(title, modifiableValue, 0f, max);
221+
var lineRect = EditorGUILayout.GetControlRect();
222+
EditorGUI.BeginProperty(lineRect, title, value);
223+
modifiableValue = EditorGUI.Slider(lineRect, title, modifiableValue, 0f, max);
224+
EditorGUI.EndProperty();
218225
if (EditorGUI.EndChangeCheck())
219226
value.floatValue = Mathf.Clamp01(modifiableValue / max);
220227
return true;

0 commit comments

Comments
 (0)