Skip to content

Commit

Permalink
Added custom editor for URP feature
Browse files Browse the repository at this point in the history
  • Loading branch information
alelievr committed Jan 27, 2025
1 parent 3fb1e8a commit a0b2bc1
Show file tree
Hide file tree
Showing 9 changed files with 955 additions and 62 deletions.
782 changes: 781 additions & 1 deletion Assets/DefaultVolumeProfile.asset

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions Assets/Scenes/Universal.unity
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ GameObject:
- component: {fileID: 72368114}
- component: {fileID: 72368113}
- component: {fileID: 72368112}
- component: {fileID: 72368115}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
Expand Down Expand Up @@ -211,6 +212,50 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &72368115
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 72368111}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_AllowHDROutput: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
m_TaaSettings:
m_Quality: 3
m_FrameInfluence: 0.1
m_JitterScale: 1
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
--- !u!1 &674503080
GameObject:
m_ObjectHideFlags: 0
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using Mixture;
using UnityEditor;
using UnityEditor.Rendering.Universal;
using UnityEngine;
using UnityEngine.Rendering.Universal;

[CustomEditor(typeof(MixtureFeature), true)]
public class MixtureFeatureEditor : ScriptableRendererFeatureEditor
{
public override void OnInspectorGUI()
{
var settings = serializedObject.FindProperty("settings");
var feature = serializedObject.targetObject as MixtureFeature;
var graph = feature.settings.graphReference;

using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.PropertyField(settings.FindPropertyRelative("graph"));

if (GUILayout.Button(new GUIContent("Open Graph"), GUILayout.Width(90)))
{
if (graph != null)
MixtureGraphWindow.Open(graph);
}
}

if (graph == null)
return;

serializedObject.ApplyModifiedProperties();

foreach (var p in graph.exposedParameters)
{
if (p.settings.isHidden)
continue;

var rect = EditorGUILayout.GetControlRect(true);
MixtureRenderPipelineEditorUtils.DrawExposedParameter(p, rect);
}

serializedObject.Update();
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -37,65 +37,8 @@ protected override void DoPassGUI(SerializedProperty customPass, Rect rect)
if (p.settings.isHidden)
continue;

// TODO: Draw the parameters using ImGUI
switch (p)
{
case FloatParameter r:
var s = r.settings as FloatParameter.FloatSettings;
switch (s.mode)
{
case FloatParameter.FloatMode.Default:
r.value = EditorGUI.FloatField(rect, r.name, (float)r.value);
break;
case FloatParameter.FloatMode.Slider:
r.value = EditorGUI.Slider(rect, r.name, (float)r.value, s.min, s.max);
break;
default: continue;
}
break;
case IntParameter r:
var si = r.settings as IntParameter.IntSettings;
switch (si.mode)
{
case IntParameter.IntMode.Default:
r.value = EditorGUI.IntField(rect, r.name, (int)r.value);
break;
case IntParameter.IntMode.Slider:
r.value = EditorGUI.IntSlider(rect, r.name, (int)r.value, si.min, si.max);
break;
default: continue;
}
break;
case ColorParameter r:
r.value = EditorGUI.ColorField(rect, r.name, (Color)r.value);
break;
case Texture2DParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Texture2D)r.value, typeof(Texture2D), false);
break;
case Texture3DParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Texture3D)r.value, typeof(Texture3D), false);
break;
case CubemapParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Cubemap)r.value, typeof(Cubemap), false);
break;
case BoolParameter r:
r.value = EditorGUI.Toggle(rect, r.name, (bool)r.value);
break;
case GradientParameter r:
r.value = EditorGUI.GradientField(rect, r.name, (Gradient)r.value);
break;
case AnimationCurveParameter r:
r.value = EditorGUI.CurveField(rect, r.name, (AnimationCurve)r.value);
break;
case MeshParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Mesh)r.value, typeof(Mesh), false);
break;
case StringParameter r:
r.value = EditorGUI.TextField(rect, r.name, (string)r.value);
break;
default: continue;
}

MixtureRenderPipelineEditorUtils.DrawExposedParameter(p, rect);

rect.y += lh;
paramCount++;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using GraphProcessor;
using UnityEngine;
using Mixture;
using UnityEditor;

public static class MixtureRenderPipelineEditorUtils
{
public static bool DrawExposedParameter(ExposedParameter p, Rect rect)
{
switch (p)
{
case FloatParameter r:
var s = r.settings as FloatParameter.FloatSettings;
switch (s.mode)
{
case FloatParameter.FloatMode.Default:
r.value = EditorGUI.FloatField(rect, r.name, (float)r.value);
break;
case FloatParameter.FloatMode.Slider:
r.value = EditorGUI.Slider(rect, r.name, (float)r.value, s.min, s.max);
break;
default: return false;
}
break;
case IntParameter r:
var si = r.settings as IntParameter.IntSettings;
switch (si.mode)
{
case IntParameter.IntMode.Default:
r.value = EditorGUI.IntField(rect, r.name, (int)r.value);
break;
case IntParameter.IntMode.Slider:
r.value = EditorGUI.IntSlider(rect, r.name, (int)r.value, si.min, si.max);
break;
default: return false;
}
break;
case ColorParameter r:
r.value = EditorGUI.ColorField(rect, r.name, (Color)r.value);
break;
case Texture2DParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Texture2D)r.value, typeof(Texture2D), false);
break;
case Texture3DParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Texture3D)r.value, typeof(Texture3D), false);
break;
case CubemapParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Cubemap)r.value, typeof(Cubemap), false);
break;
case BoolParameter r:
r.value = EditorGUI.Toggle(rect, r.name, (bool)r.value);
break;
case GradientParameter r:
r.value = EditorGUI.GradientField(rect, r.name, (Gradient)r.value);
break;
case AnimationCurveParameter r:
r.value = EditorGUI.CurveField(rect, r.name, (AnimationCurve)r.value);
break;
case MeshParameter r:
r.value = EditorGUI.ObjectField(rect, r.name, (Mesh)r.value, typeof(Mesh), false);
break;
case StringParameter r:
r.value = EditorGUI.TextField(rect, r.name, (string)r.value);
break;
default: return false;
}

return true;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
"Unity.RenderPipelines.HighDefinition.Runtime",
"Unity.RenderPipelines.Core.Editor",
"Unity.RenderPipelines.Core.Runtime",
"Unity.RenderPipelines.HighDefinition.Editor"
"Unity.RenderPipelines.HighDefinition.Editor",
"Unity.RenderPipelines.Universal.Editor",
"Unity.RenderPipelines.Universal.Runtime"
],
"includePlatforms": [
"Editor"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ static void ExecutePass(PassData data, UnsafeGraphContext context)
}
}

RenderTexture outputRT = data.outputTarget;
data.graph.settings.width = outputRT.width;
data.graph.settings.height = outputRT.height;

CommandBuffer cmd = wrappedCmd.GetValue(context.cmd) as CommandBuffer;
data.processor.Run(cmd);

Expand Down Expand Up @@ -161,7 +165,7 @@ public override void Create()
pass = new CustomRenderPass(settings);

// Configures where the render pass should be injected.
pass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
pass.renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
runningFeatures.Add(this);
}

Expand Down

0 comments on commit a0b2bc1

Please sign in to comment.