You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
11 KiB
237 lines
11 KiB
using System.Linq; |
|
using UnityEngine; |
|
using UnityEngine.Rendering; |
|
using UnityEngine.Rendering.Universal; |
|
|
|
namespace UnityEditor.Rendering.Universal |
|
{ |
|
using CED = CoreEditorDrawer<UniversalRenderPipelineSerializedCamera>; |
|
|
|
static partial class UniversalRenderPipelineCameraUI |
|
{ |
|
public partial class Rendering |
|
{ |
|
static bool s_PostProcessingWarningShown = false; |
|
|
|
static readonly CED.IDrawer PostProcessingWarningInit = CED.Group( |
|
(serialized, owner) => s_PostProcessingWarningShown = false |
|
); |
|
|
|
private static readonly CED.IDrawer PostProcessingWarningDrawer = CED.Conditional( |
|
(serialized, owner) => IsAnyRendererHasPostProcessingEnabled(serialized, UniversalRenderPipeline.asset) && serialized.renderPostProcessing.boolValue, |
|
(serialized, owner) => |
|
{ |
|
EditorGUILayout.HelpBox(Styles.disabledPostprocessing, MessageType.Warning); |
|
s_PostProcessingWarningShown = true; |
|
}); |
|
|
|
private static readonly CED.IDrawer PostProcessingAAWarningDrawer = CED.Conditional( |
|
(serialized, owner) => !s_PostProcessingWarningShown && IsAnyRendererHasPostProcessingEnabled(serialized, UniversalRenderPipeline.asset) && (AntialiasingMode)serialized.antialiasing.intValue != AntialiasingMode.None, |
|
(serialized, owner) => |
|
{ |
|
EditorGUILayout.HelpBox(Styles.disabledPostprocessing, MessageType.Warning); |
|
s_PostProcessingWarningShown = true; |
|
}); |
|
|
|
private static readonly CED.IDrawer PostProcessingStopNaNsWarningDrawer = CED.Conditional( |
|
(serialized, owner) => !s_PostProcessingWarningShown && IsAnyRendererHasPostProcessingEnabled(serialized, UniversalRenderPipeline.asset) && serialized.stopNaNs.boolValue, |
|
(serialized, owner) => |
|
{ |
|
EditorGUILayout.HelpBox(Styles.disabledPostprocessing, MessageType.Warning); |
|
s_PostProcessingWarningShown = true; |
|
}); |
|
|
|
private static readonly CED.IDrawer PostProcessingDitheringWarningDrawer = CED.Conditional( |
|
(serialized, owner) => !s_PostProcessingWarningShown && IsAnyRendererHasPostProcessingEnabled(serialized, UniversalRenderPipeline.asset) && serialized.dithering.boolValue, |
|
(serialized, owner) => |
|
{ |
|
EditorGUILayout.HelpBox(Styles.disabledPostprocessing, MessageType.Warning); |
|
s_PostProcessingWarningShown = true; |
|
}); |
|
|
|
static readonly CED.IDrawer BaseCameraRenderTypeDrawer = CED.Conditional( |
|
(serialized, owner) => (CameraRenderType)serialized.cameraType.intValue == CameraRenderType.Base, |
|
CED.Group( |
|
DrawerRenderingRenderPostProcessing |
|
), |
|
PostProcessingWarningDrawer, |
|
CED.Group( |
|
DrawerRenderingAntialiasing |
|
), |
|
PostProcessingAAWarningDrawer, |
|
CED.Conditional( |
|
(serialized, owner) => !serialized.antialiasing.hasMultipleDifferentValues, |
|
CED.Group( |
|
GroupOption.Indent, |
|
CED.Conditional( |
|
(serialized, owner) => (AntialiasingMode)serialized.antialiasing.intValue == |
|
AntialiasingMode.SubpixelMorphologicalAntiAliasing, |
|
CED.Group( |
|
DrawerRenderingSMAAQuality |
|
) |
|
) |
|
) |
|
), |
|
CED.Group( |
|
CameraUI.Rendering.Drawer_Rendering_StopNaNs |
|
), |
|
PostProcessingStopNaNsWarningDrawer, |
|
CED.Conditional( |
|
(serialized, owner) => serialized.stopNaNs.boolValue && CoreEditorUtils.buildTargets.Contains(GraphicsDeviceType.OpenGLES2), |
|
(serialized, owner) => EditorGUILayout.HelpBox(Styles.stopNaNsMessage, MessageType.Warning) |
|
), |
|
CED.Group( |
|
CameraUI.Rendering.Drawer_Rendering_Dithering |
|
), |
|
PostProcessingDitheringWarningDrawer, |
|
CED.Group( |
|
DrawerRenderingRenderShadows, |
|
DrawerRenderingPriority, |
|
DrawerRenderingOpaqueTexture, |
|
DrawerRenderingDepthTexture |
|
) |
|
); |
|
|
|
static readonly CED.IDrawer OverlayCameraRenderTypeDrawer = CED.Conditional( |
|
(serialized, owner) => (CameraRenderType)serialized.cameraType.intValue == CameraRenderType.Overlay, |
|
CED.Group( |
|
DrawerRenderingRenderPostProcessing |
|
), |
|
PostProcessingWarningDrawer, |
|
CED.Group( |
|
DrawerRenderingClearDepth, |
|
DrawerRenderingRenderShadows, |
|
DrawerRenderingDepthTexture |
|
) |
|
); |
|
|
|
public static readonly CED.IDrawer Drawer = CED.FoldoutGroup( |
|
CameraUI.Rendering.Styles.header, |
|
Expandable.Rendering, |
|
k_ExpandedState, |
|
FoldoutOption.Indent, |
|
PostProcessingWarningInit, |
|
CED.Group( |
|
DrawerRenderingRenderer |
|
), |
|
BaseCameraRenderTypeDrawer, |
|
OverlayCameraRenderTypeDrawer, |
|
CED.Group( |
|
CameraUI.Rendering.Drawer_Rendering_CullingMask, |
|
CameraUI.Rendering.Drawer_Rendering_OcclusionCulling |
|
) |
|
); |
|
|
|
public static readonly CED.IDrawer DrawerPreset = CED.FoldoutGroup( |
|
CameraUI.Rendering.Styles.header, |
|
Expandable.Rendering, |
|
k_ExpandedState, |
|
FoldoutOption.Indent, |
|
CED.Group( |
|
CameraUI.Rendering.Drawer_Rendering_CullingMask, |
|
CameraUI.Rendering.Drawer_Rendering_OcclusionCulling |
|
) |
|
); |
|
|
|
static void DrawerRenderingRenderer(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
var rpAsset = UniversalRenderPipeline.asset; |
|
|
|
int selectedRendererOption = p.renderer.intValue; |
|
EditorGUI.BeginChangeCheck(); |
|
|
|
Rect controlRect = EditorGUILayout.GetControlRect(true); |
|
EditorGUI.BeginProperty(controlRect, Styles.rendererType, p.renderer); |
|
|
|
EditorGUI.showMixedValue = p.renderer.hasMultipleDifferentValues; |
|
int selectedRenderer = EditorGUI.IntPopup(controlRect, Styles.rendererType, selectedRendererOption, rpAsset.rendererDisplayList, rpAsset.rendererIndexList); |
|
EditorGUI.EndProperty(); |
|
if (!rpAsset.ValidateRendererDataList()) |
|
{ |
|
EditorGUILayout.HelpBox(Styles.noRendererError, MessageType.Error); |
|
} |
|
else if (!rpAsset.ValidateRendererData(selectedRendererOption)) |
|
{ |
|
EditorGUILayout.HelpBox(Styles.missingRendererWarning, MessageType.Warning); |
|
var rect = EditorGUI.IndentedRect(EditorGUILayout.GetControlRect()); |
|
if (GUI.Button(rect, Styles.selectRenderPipelineAsset)) |
|
{ |
|
Selection.activeObject = AssetDatabase.LoadAssetAtPath<UniversalRenderPipelineAsset>(AssetDatabase.GetAssetPath(UniversalRenderPipeline.asset)); |
|
} |
|
GUILayout.Space(5); |
|
} |
|
|
|
if (EditorGUI.EndChangeCheck()) |
|
p.renderer.intValue = selectedRenderer; |
|
} |
|
|
|
static bool IsAnyRendererHasPostProcessingEnabled(UniversalRenderPipelineSerializedCamera p, UniversalRenderPipelineAsset rpAsset) |
|
{ |
|
int selectedRendererOption = p.renderer.intValue; |
|
|
|
if (selectedRendererOption < -1 || selectedRendererOption > rpAsset.m_RendererDataList.Length || p.renderer.hasMultipleDifferentValues) |
|
return false; |
|
|
|
var rendererData = selectedRendererOption == -1 ? rpAsset.scriptableRendererData : rpAsset.m_RendererDataList[selectedRendererOption]; |
|
|
|
var forwardRendererData = rendererData as UniversalRendererData; |
|
if (forwardRendererData != null && forwardRendererData.postProcessData == null) |
|
return true; |
|
|
|
var renderer2DData = rendererData as UnityEngine.Rendering.Universal.Renderer2DData; |
|
return renderer2DData != null && renderer2DData.postProcessData == null; |
|
} |
|
|
|
static void DrawerRenderingAntialiasing(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
Rect antiAliasingRect = EditorGUILayout.GetControlRect(); |
|
EditorGUI.BeginProperty(antiAliasingRect, Styles.antialiasing, p.antialiasing); |
|
{ |
|
EditorGUI.BeginChangeCheck(); |
|
int selectedValue = (int)(AntialiasingMode)EditorGUI.EnumPopup(antiAliasingRect, Styles.antialiasing, (AntialiasingMode)p.antialiasing.intValue); |
|
if (EditorGUI.EndChangeCheck()) |
|
p.antialiasing.intValue = selectedValue; |
|
} |
|
EditorGUI.EndProperty(); |
|
} |
|
|
|
static void DrawerRenderingClearDepth(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
EditorGUILayout.PropertyField(p.clearDepth, Styles.clearDepth); |
|
} |
|
|
|
static void DrawerRenderingRenderShadows(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
EditorGUILayout.PropertyField(p.renderShadows, Styles.renderingShadows); |
|
} |
|
|
|
static void DrawerRenderingSMAAQuality(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
EditorGUILayout.PropertyField(p.antialiasingQuality, Styles.antialiasingQuality); |
|
|
|
if (CoreEditorUtils.buildTargets.Contains(GraphicsDeviceType.OpenGLES2)) |
|
EditorGUILayout.HelpBox(Styles.SMAANotSupported, MessageType.Warning); |
|
} |
|
|
|
static void DrawerRenderingRenderPostProcessing(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
EditorGUILayout.PropertyField(p.renderPostProcessing, Styles.renderPostProcessing); |
|
} |
|
|
|
static void DrawerRenderingPriority(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
EditorGUILayout.PropertyField(p.baseCameraSettings.depth, Styles.priority); |
|
} |
|
|
|
static void DrawerRenderingDepthTexture(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
EditorGUILayout.PropertyField(p.renderDepth, Styles.requireDepthTexture); |
|
} |
|
|
|
static void DrawerRenderingOpaqueTexture(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
EditorGUILayout.PropertyField(p.renderOpaque, Styles.requireOpaqueTexture); |
|
} |
|
} |
|
} |
|
}
|
|
|