123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- 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;
-
- 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 DisabledPostProcessingAAWarningDrawer = CED.Conditional(
- (serialized, owner) => !serialized.renderPostProcessing.boolValue && (AntialiasingMode)serialized.antialiasing.intValue != AntialiasingMode.None,
- (serialized, owner) => EditorGUILayout.HelpBox(Styles.disabledPostprocessingAntiAliasWarning, MessageType.Warning));
-
- private static readonly CED.IDrawer MSAAWarningDrawer = CED.Conditional(
- (serialized, owner) => (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset asset && asset.msaaSampleCount > 1) && serialized.baseCameraSettings.allowMSAA.boolValue == true && (AntialiasingMode)serialized.antialiasing.intValue == AntialiasingMode.TemporalAntiAliasing,
- (serialized, owner) => EditorGUILayout.HelpBox(Styles.MSAAWarning, MessageType.Warning));
-
- 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,
- DisabledPostProcessingAAWarningDrawer,
- MSAAWarningDrawer,
- CED.Conditional(
- (serialized, owner) => !serialized.antialiasing.hasMultipleDifferentValues,
- CED.Group(
- GroupOption.Indent,
- new[]{
- CED.Conditional(
- (serialized, owner) => (AntialiasingMode)serialized.antialiasing.intValue ==
- AntialiasingMode.SubpixelMorphologicalAntiAliasing,
- CED.Group(
- DrawerRenderingSMAAQuality
- )),
- CED.Conditional(
- (serialized, owner) => (AntialiasingMode)serialized.antialiasing.intValue ==
- AntialiasingMode.TemporalAntiAliasing,
- CED.Group(
- DrawerRenderingTAAQuality
- ))
- }
- )
- ),
- CED.Group(
- CameraUI.Rendering.Drawer_Rendering_StopNaNs
- ),
- PostProcessingStopNaNsWarningDrawer,
- 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;
-
- public static readonly CED.IDrawer DrawerPreset;
-
- static Rendering()
- {
- Drawer = CED.AdditionalPropertiesFoldoutGroup(
- CameraUI.Rendering.Styles.header,
- Expandable.Rendering,
- k_ExpandedState,
- ExpandableAdditional.Rendering,
- k_ExpandedAdditionalState,
- CED.Group(
- CED.Group(
- DrawerRenderingRenderer
- ),
- BaseCameraRenderTypeDrawer,
- OverlayCameraRenderTypeDrawer,
- CED.Group(
- CameraUI.Rendering.Drawer_Rendering_CullingMask,
- CameraUI.Rendering.Drawer_Rendering_OcclusionCulling
- )
- ),
- CED.noop,
- FoldoutOption.Indent,
- (serialized, owner) => s_PostProcessingWarningShown = false
- );
-
- 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);
- }
-
- static void DrawerRenderingTAAQuality(UniversalRenderPipelineSerializedCamera p, Editor owner)
- {
- EditorGUILayout.PropertyField(p.taaQuality, Styles.antialiasingQuality);
-
- {
- // FSR overrides TAA CAS settings. Disable this setting when FSR is enabled.
- bool disableSharpnessControl = UniversalRenderPipeline.asset != null ?
- (UniversalRenderPipeline.asset.upscalingFilter == UpscalingFilterSelection.FSR) : false;
- using var disable = new EditorGUI.DisabledScope(disableSharpnessControl);
-
- EditorGUILayout.Slider(p.taaContrastAdaptiveSharpening, 0.0f, 1.0f, Styles.taaContrastAdaptiveSharpening);
- }
-
- bool additionalPropertiesVisible = k_ExpandedState[Expandable.Rendering] && k_ExpandedAdditionalState[ExpandableAdditional.Rendering];
- if (additionalPropertiesVisible)
- {
- p.taaFrameInfluence.floatValue = 1.0f - EditorGUILayout.Slider(Styles.taaBaseBlendFactor, 1.0f - p.taaFrameInfluence.floatValue, 0.6f, 0.98f);
- EditorGUILayout.Slider(p.taaJitterScale, 0.0f, 1.0f, Styles.taaJitterScale);
- EditorGUILayout.Slider(p.taaMipBias, -1.0f, 0.0f, Styles.taaMipBias);
-
- if(p.taaQuality.intValue >= (int)TemporalAAQuality.Medium)
- EditorGUILayout.Slider(p.taaVarianceClampScale, 0.6f, 1.2f, Styles.taaVarianceClampScale);
-
- bool isEditorInDeveloperMode = EditorPrefs.GetBool("DeveloperMode");
- if (isEditorInDeveloperMode)
- {
- UniversalRenderPipelineCameraEditor urpCamEditor = owner as UniversalRenderPipelineCameraEditor;
- if (urpCamEditor != null && urpCamEditor.camera != null &&
- urpCamEditor.camera.TryGetComponent<UniversalAdditionalCameraData>(out var urpAddCamData))
- {
- ref var taa = ref urpAddCamData.taaSettings;
- var rect = GUILayoutUtility.GetRect(Styles.taaResetHistory, GUIStyle.none);
- rect.x = rect.x + 32;
- rect.width = rect.width - 32;
- rect.height += 4; // avoid clipping the label.
- if (GUI.Button(rect, Styles.taaResetHistory))
- taa.resetHistoryFrames += 2; // XR both eyes
- }
- }
- }
- }
-
- 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);
- }
- }
- }
- }
|