No Description
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.

UniversalRenderPipelineSerializedCamera.cs 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.Rendering.Universal;
  4. namespace UnityEditor.Rendering.Universal
  5. {
  6. class UniversalRenderPipelineSerializedCamera : ISerializedCamera
  7. {
  8. public SerializedObject serializedObject { get; }
  9. public SerializedObject serializedAdditionalDataObject { get; }
  10. public CameraEditor.Settings baseCameraSettings { get; }
  11. // This one is internal in UnityEditor for whatever reason...
  12. public SerializedProperty projectionMatrixMode { get; }
  13. // Common properties
  14. public SerializedProperty dithering { get; }
  15. public SerializedProperty stopNaNs { get; }
  16. public SerializedProperty allowDynamicResolution { get; }
  17. public SerializedProperty volumeLayerMask { get; }
  18. public SerializedProperty clearDepth { get; }
  19. public SerializedProperty antialiasing { get; }
  20. // URP specific properties
  21. public SerializedProperty renderShadows { get; }
  22. public SerializedProperty renderDepth { get; }
  23. public SerializedProperty renderOpaque { get; }
  24. public SerializedProperty renderer { get; }
  25. public SerializedProperty cameraType { get; }
  26. public SerializedProperty cameras { get; set; }
  27. public SerializedProperty volumeTrigger { get; }
  28. public SerializedProperty volumeFrameworkUpdateMode { get; }
  29. public SerializedProperty renderPostProcessing { get; }
  30. public SerializedProperty antialiasingQuality { get; }
  31. #if ENABLE_VR && ENABLE_XR_MODULE
  32. public SerializedProperty allowXRRendering { get; }
  33. #endif
  34. public SerializedProperty taaQuality { get; }
  35. public SerializedProperty taaFrameInfluence { get; }
  36. public SerializedProperty taaJitterScale { get; }
  37. public SerializedProperty taaMipBias { get; }
  38. public SerializedProperty taaVarianceClampScale { get; }
  39. public SerializedProperty taaContrastAdaptiveSharpening { get; }
  40. public SerializedProperty allowHDROutput { get; }
  41. public (Camera camera, UniversalRenderPipelineSerializedCamera serializedCamera) this[int index]
  42. {
  43. get
  44. {
  45. if (index < 0 || index >= numCameras)
  46. throw new ArgumentOutOfRangeException($"{index} is out of bounds [0 - {numCameras}]");
  47. // Return the camera on that index
  48. return (cameras.GetArrayElementAtIndex(index).objectReferenceValue as Camera, cameraSerializedObjects[index]);
  49. }
  50. }
  51. public int numCameras => cameras?.arraySize ?? 0;
  52. UniversalRenderPipelineSerializedCamera[] cameraSerializedObjects { get; set; }
  53. public UniversalAdditionalCameraData[] camerasAdditionalData { get; }
  54. public UniversalRenderPipelineSerializedCamera(SerializedObject serializedObject, CameraEditor.Settings settings = null)
  55. {
  56. this.serializedObject = serializedObject;
  57. projectionMatrixMode = serializedObject.FindProperty("m_projectionMatrixMode");
  58. allowDynamicResolution = serializedObject.FindProperty("m_AllowDynamicResolution");
  59. if (settings == null)
  60. {
  61. baseCameraSettings = new CameraEditor.Settings(serializedObject);
  62. baseCameraSettings.OnEnable();
  63. }
  64. else
  65. {
  66. baseCameraSettings = settings;
  67. }
  68. camerasAdditionalData = CoreEditorUtils
  69. .GetAdditionalData<UniversalAdditionalCameraData>(serializedObject.targetObjects);
  70. serializedAdditionalDataObject = new SerializedObject(camerasAdditionalData);
  71. // Common properties
  72. stopNaNs = serializedAdditionalDataObject.FindProperty("m_StopNaN");
  73. dithering = serializedAdditionalDataObject.FindProperty("m_Dithering");
  74. antialiasing = serializedAdditionalDataObject.FindProperty("m_Antialiasing");
  75. volumeLayerMask = serializedAdditionalDataObject.FindProperty("m_VolumeLayerMask");
  76. clearDepth = serializedAdditionalDataObject.FindProperty("m_ClearDepth");
  77. // URP specific properties
  78. renderShadows = serializedAdditionalDataObject.FindProperty("m_RenderShadows");
  79. renderDepth = serializedAdditionalDataObject.FindProperty("m_RequiresDepthTextureOption");
  80. renderOpaque = serializedAdditionalDataObject.FindProperty("m_RequiresOpaqueTextureOption");
  81. renderer = serializedAdditionalDataObject.FindProperty("m_RendererIndex");
  82. volumeLayerMask = serializedAdditionalDataObject.FindProperty("m_VolumeLayerMask");
  83. volumeTrigger = serializedAdditionalDataObject.FindProperty("m_VolumeTrigger");
  84. volumeFrameworkUpdateMode = serializedAdditionalDataObject.FindProperty("m_VolumeFrameworkUpdateModeOption");
  85. renderPostProcessing = serializedAdditionalDataObject.FindProperty("m_RenderPostProcessing");
  86. antialiasingQuality = serializedAdditionalDataObject.FindProperty("m_AntialiasingQuality");
  87. cameraType = serializedAdditionalDataObject.FindProperty("m_CameraType");
  88. #if ENABLE_VR && ENABLE_XR_MODULE
  89. allowXRRendering = serializedAdditionalDataObject.FindProperty("m_AllowXRRendering");
  90. #endif
  91. var taaSettings = serializedAdditionalDataObject.FindProperty(nameof(UniversalAdditionalCameraData.m_TaaSettings));
  92. taaQuality = taaSettings.FindPropertyRelative(nameof(TemporalAA.Settings.m_Quality));
  93. taaFrameInfluence = taaSettings.FindPropertyRelative(nameof(TemporalAA.Settings.m_FrameInfluence));
  94. taaJitterScale = taaSettings.FindPropertyRelative(nameof(TemporalAA.Settings.m_JitterScale));
  95. taaMipBias = taaSettings.FindPropertyRelative(nameof(TemporalAA.Settings.m_MipBias));
  96. taaVarianceClampScale = taaSettings.FindPropertyRelative(nameof(TemporalAA.Settings.m_VarianceClampScale));
  97. taaContrastAdaptiveSharpening = taaSettings.FindPropertyRelative(nameof(TemporalAA.Settings.m_ContrastAdaptiveSharpening));
  98. allowHDROutput = serializedAdditionalDataObject.FindProperty("m_AllowHDROutput");
  99. }
  100. /// <summary>
  101. /// Updates the internal serialized objects
  102. /// </summary>
  103. public void Update()
  104. {
  105. UpdateInternal();
  106. if (cameraSerializedObjects == null || cameraSerializedObjects.Length != numCameras)
  107. Refresh();
  108. for (int i = 0; i < numCameras; ++i)
  109. cameraSerializedObjects[i]?.UpdateInternal();
  110. }
  111. private void UpdateInternal()
  112. {
  113. baseCameraSettings.Update();
  114. serializedObject.Update();
  115. serializedAdditionalDataObject.Update();
  116. }
  117. /// <summary>
  118. /// Applies the modified properties to the serialized objects
  119. /// </summary>
  120. public void Apply()
  121. {
  122. ApplyInternal();
  123. if (cameraSerializedObjects == null || cameraSerializedObjects.Length != numCameras)
  124. Refresh();
  125. for (int i = 0; i < numCameras; ++i)
  126. cameraSerializedObjects[i]?.ApplyInternal();
  127. }
  128. private void ApplyInternal()
  129. {
  130. baseCameraSettings.ApplyModifiedProperties();
  131. serializedObject.ApplyModifiedProperties();
  132. serializedAdditionalDataObject.ApplyModifiedProperties();
  133. }
  134. /// <summary>
  135. /// Refreshes the serialized properties from the serialized objects
  136. /// </summary>
  137. public void Refresh()
  138. {
  139. var o = new PropertyFetcher<UniversalAdditionalCameraData>(serializedAdditionalDataObject);
  140. cameras = o.Find("m_Cameras");
  141. cameraSerializedObjects = new UniversalRenderPipelineSerializedCamera[numCameras];
  142. for (int i = 0; i < numCameras; ++i)
  143. {
  144. Camera cam = cameras.GetArrayElementAtIndex(i).objectReferenceValue as Camera;
  145. if (cam != null)
  146. cameraSerializedObjects[i] = new UniversalRenderPipelineSerializedCamera(new SerializedObject(cam));
  147. }
  148. }
  149. }
  150. }