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.
107 lines
4.2 KiB
107 lines
4.2 KiB
using UnityEngine; |
|
using UnityEngine.Rendering.Universal; |
|
|
|
namespace UnityEditor.Rendering.Universal |
|
{ |
|
using CED = CoreEditorDrawer<UniversalRenderPipelineSerializedCamera>; |
|
|
|
static partial class UniversalRenderPipelineCameraUI |
|
{ |
|
[URPHelpURL("camera-component-reference")] |
|
public enum Expandable |
|
{ |
|
/// <summary> Projection</summary> |
|
Projection = 1 << 0, |
|
/// <summary> Physical</summary> |
|
Physical = 1 << 1, |
|
/// <summary> Output</summary> |
|
Output = 1 << 2, |
|
/// <summary> Orthographic</summary> |
|
Orthographic = 1 << 3, |
|
/// <summary> RenderLoop</summary> |
|
RenderLoop = 1 << 4, |
|
/// <summary> Rendering</summary> |
|
Rendering = 1 << 5, |
|
/// <summary> Environment</summary> |
|
Environment = 1 << 6, |
|
/// <summary> Stack</summary> |
|
Stack = 1 << 7, |
|
} |
|
|
|
static readonly ExpandedState<Expandable, Camera> k_ExpandedState = new(Expandable.Projection, "URP"); |
|
|
|
public static readonly CED.IDrawer SectionProjectionSettings = CED.FoldoutGroup( |
|
CameraUI.Styles.projectionSettingsHeaderContent, |
|
Expandable.Projection, |
|
k_ExpandedState, |
|
FoldoutOption.Indent, |
|
CED.Group( |
|
DrawerProjection |
|
), |
|
PhysicalCamera.Drawer |
|
); |
|
|
|
public static readonly CED.IDrawer SectionStackSettings = |
|
CED.Conditional( |
|
(serialized, editor) => (CameraRenderType)serialized.cameraType.intValue == CameraRenderType.Base, |
|
CED.FoldoutGroup(Styles.stackSettingsText, Expandable.Stack, k_ExpandedState, FoldoutOption.Indent, CED.Group(DrawerStackCameras))); |
|
|
|
public static readonly CED.IDrawer[] Inspector = |
|
{ |
|
CED.Group( |
|
DrawerCameraType |
|
), |
|
SectionProjectionSettings, |
|
Rendering.Drawer, |
|
SectionStackSettings, |
|
Environment.Drawer, |
|
Output.Drawer |
|
}; |
|
|
|
static void DrawerProjection(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
var camera = p.serializedObject.targetObject as Camera; |
|
bool pixelPerfectEnabled = camera.TryGetComponent<UnityEngine.Experimental.Rendering.Universal.PixelPerfectCamera>(out var pixelPerfectCamera) && pixelPerfectCamera.enabled; |
|
if (pixelPerfectEnabled) |
|
EditorGUILayout.HelpBox(Styles.pixelPerfectInfo, MessageType.Info); |
|
|
|
using (new EditorGUI.DisabledGroupScope(pixelPerfectEnabled)) |
|
CameraUI.Drawer_Projection(p, owner); |
|
} |
|
|
|
static void DrawerCameraType(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
int selectedRenderer = p.renderer.intValue; |
|
ScriptableRenderer scriptableRenderer = UniversalRenderPipeline.asset.GetRenderer(selectedRenderer); |
|
bool isDeferred = scriptableRenderer is UniversalRenderer { renderingMode: RenderingMode.Deferred }; |
|
|
|
EditorGUI.BeginChangeCheck(); |
|
|
|
CameraRenderType originalCamType = (CameraRenderType)p.cameraType.intValue; |
|
CameraRenderType camType = scriptableRenderer.SupportsCameraStackingType(CameraRenderType.Overlay) ? originalCamType : CameraRenderType.Base; |
|
EditorGUI.BeginDisabledGroup(scriptableRenderer.SupportedCameraStackingTypes() == 0); |
|
camType = (CameraRenderType)EditorGUILayout.EnumPopup( |
|
Styles.cameraType, |
|
camType, |
|
e => scriptableRenderer.SupportsCameraStackingType((CameraRenderType)e), |
|
false |
|
); |
|
EditorGUI.EndDisabledGroup(); |
|
|
|
if (EditorGUI.EndChangeCheck() || camType != originalCamType) |
|
{ |
|
p.cameraType.intValue = (int)camType; |
|
} |
|
|
|
EditorGUILayout.Space(); |
|
} |
|
|
|
static void DrawerStackCameras(UniversalRenderPipelineSerializedCamera p, Editor owner) |
|
{ |
|
if (owner is UniversalRenderPipelineCameraEditor cameraEditor) |
|
{ |
|
cameraEditor.DrawStackSettings(); |
|
} |
|
} |
|
} |
|
}
|
|
|