123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #if UNITY_EDITOR
- #if UNITY_2018_1_OR_NEWER
- // Unity 2018.1 introduces stereo cubemap render methods
- #define AVPRO_MOVIECAPTURE_UNITY_STEREOCUBEMAP_RENDER
- #endif
- using UnityEngine;
- using UnityEditor;
- //-----------------------------------------------------------------------------
- // Copyright 2012-2022 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProMovieCapture.Editor
- {
- [CanEditMultipleObjects]
- [CustomEditor(typeof(CaptureFromCamera360))]
- public class CaptureFromCamera360Editor : CaptureBaseEditor
- {
- //private CaptureFromCamera360 _capture;
- private SerializedProperty _propCameraSelector;
- private SerializedProperty _propCamera;
- private SerializedProperty _propRenderResolution;
- private SerializedProperty _propRenderSize;
- private SerializedProperty _propAntiAliasing;
- private SerializedProperty _propCubemapResolution;
- private SerializedProperty _propCubemapDepth;
- private SerializedProperty _propSupportGUI;
- private SerializedProperty _propSupporCameraRotation;
- private SerializedProperty _propOnlyLeftRightRotation;
- private SerializedProperty _propStereoRendering;
- private SerializedProperty _propRender180Degrees;
- private SerializedProperty _propIPD;
- private SerializedProperty _propBlendOverlapPercent;
- protected override void OnEnable()
- {
- base.OnEnable();
- //_capture = (this.target) as CaptureFromCamera360;
- _propCameraSelector = serializedObject.AssertFindProperty("_cameraSelector");
- _propCamera = serializedObject.AssertFindProperty("_camera");
- _propRenderResolution = serializedObject.AssertFindProperty("_renderResolution");
- _propRenderSize = serializedObject.AssertFindProperty("_renderSize");
- _propAntiAliasing = serializedObject.AssertFindProperty("_renderAntiAliasing");
- _propCubemapResolution = serializedObject.AssertFindProperty("_cubemapResolution");
- _propCubemapDepth = serializedObject.AssertFindProperty("_cubemapDepth");
- _propSupportGUI = serializedObject.AssertFindProperty("_supportGUI");
- _propSupporCameraRotation = serializedObject.AssertFindProperty("_supportCameraRotation");
- _propOnlyLeftRightRotation = serializedObject.AssertFindProperty("_onlyLeftRightRotation");
- _propRender180Degrees = serializedObject.AssertFindProperty("_render180Degrees");
- _propStereoRendering = serializedObject.AssertFindProperty("_stereoRendering");
- _propIPD = serializedObject.AssertFindProperty("_ipd");
- _propBlendOverlapPercent = serializedObject.AssertFindProperty("_blendOverlapPercent");
- }
- protected void GUI_Camera()
- {
- EditorGUILayout.PropertyField(_propCameraSelector);
- if (null == _propCameraSelector.objectReferenceValue)
- {
- EditorGUILayout.PropertyField(_propCamera);
- }
- EditorUtils.EnumAsDropdown("Resolution", _propRenderResolution, CaptureBaseEditor.ResolutionStrings);
- if (_propRenderResolution.enumValueIndex == (int)CaptureBase.Resolution.Custom)
- {
- EditorGUILayout.PropertyField(_propRenderSize, new GUIContent("Size"));
- _propRenderSize.vector2Value = new Vector2(Mathf.Clamp((int)_propRenderSize.vector2Value.x, 1, NativePlugin.MaxRenderWidth), Mathf.Clamp((int)_propRenderSize.vector2Value.y, 1, NativePlugin.MaxRenderHeight));
- }
- {
- string currentAA = "None";
- if (QualitySettings.antiAliasing > 1)
- {
- currentAA = QualitySettings.antiAliasing.ToString() + "x";
- }
- EditorUtils.IntAsDropdown("Anti-aliasing", _propAntiAliasing, new string[] { "Current (" + currentAA + ")", "None", "2x", "4x", "8x" }, new int[] { -1, 1, 2, 4, 8 });
- }
- EditorUtils.IntAsDropdown("Cubemap Resolution", _propCubemapResolution, new string[] { "256", "512", "1024", "2048", "4096", "8192" }, new int[] { 256, 512, 1024, 2048, 4096, 8192 });
- EditorUtils.IntAsDropdown("Cubemap Depth", _propCubemapDepth, new string[] { "0", "16", "24" }, new int[] { 0, 16, 24 });
- EditorGUILayout.PropertyField(_propSupportGUI, new GUIContent("Capture GUI"));
- EditorGUILayout.PropertyField(_propSupporCameraRotation, new GUIContent("Camera Rotation"));
- if (_propSupporCameraRotation.boolValue)
- {
- EditorGUILayout.PropertyField(_propOnlyLeftRightRotation);
- }
- EditorGUILayout.PropertyField(_propRender180Degrees);
- EditorGUILayout.PropertyField(_propStereoRendering);
- if (_propStereoRendering.enumValueIndex != (int)StereoPacking.None)
- {
- #if AVPRO_MOVIECAPTURE_UNITY_STEREOCUBEMAP_RENDER
- if (!PlayerSettings.enable360StereoCapture)
- {
- ShowNoticeBox(MessageType.Warning, "360 Stereo Capture needs to be enabled in PlayerSettings");
- if (GUILayout.Button("Enable 360 Stereo Capture"))
- {
- PlayerSettings.enable360StereoCapture = true;
- }
- }
- #endif
- // TODO: detect HDRP and warn that stereo capture is not supported
- EditorGUILayout.PropertyField(_propIPD, new GUIContent("Interpupillary distance"));
- }
- // RJT TODO: Supports stereo via 'CubemapRenderMethod.Manual' but I gather its results are not correct so either:
- // - 1. Fix up 'Manual' stereo if possible
- // - 2. Disable/warn here if stereo is selected
- // if (_propStereoRendering.enumValueIndex == (int)StereoPacking.None)
- {
- // RJT TODO: Could technically allow more than 100% as camera perspective visually means 100% != a complete face, but
- // definitely approaches a point of massively diminishing (but increasingly costly) returns so probably not worthwhile
- EditorGUILayout.Slider(_propBlendOverlapPercent, 0.0f, 100.0f, new GUIContent("Blend Overlap %"));
- }
- }
- protected override void GUI_User()
- {
- if (_baseCapture != null && !_baseCapture.IsCapturing())
- {
- serializedObject.Update();
- bool boolTrue = true;
- EditorUtils.DrawSection("Capture From Camera 360+Stereo", ref boolTrue, GUI_Camera);
- if (serializedObject.ApplyModifiedProperties())
- {
- EditorUtility.SetDirty(target);
- }
- }
- }
- }
- }
- #endif
|