diff --git a/Assets/MRTK/Core/Definitions/CameraSystem/MixedRealityCameraProfile.cs b/Assets/MRTK/Core/Definitions/CameraSystem/MixedRealityCameraProfile.cs index e5dbb66e858..d1394737346 100644 --- a/Assets/MRTK/Core/Definitions/CameraSystem/MixedRealityCameraProfile.cs +++ b/Assets/MRTK/Core/Definitions/CameraSystem/MixedRealityCameraProfile.cs @@ -19,6 +19,12 @@ namespace Microsoft.MixedReality.Toolkit [HelpURL("https://docs.microsoft.com/windows/mixed-reality/mrtk-unity/configuration/mixed-reality-configuration-guide#camera")] public class MixedRealityCameraProfile : BaseMixedRealityProfile { + [SerializeField] + [Tooltip("The camera settings to apply at edit time, for ease of building a specific type of experience.")] + private DisplayType editTimeDisplayType = DisplayType.Transparent; + + internal DisplayType EditTimeDisplayType => editTimeDisplayType; + [SerializeField] [Tooltip("Configuration objects describing the registered settings providers.")] private MixedRealityCameraSettingsConfiguration[] settingsConfigurations = new MixedRealityCameraSettingsConfiguration[0]; diff --git a/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs b/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs index bfef929e665..7e4eab2a937 100644 --- a/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs +++ b/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs @@ -19,6 +19,8 @@ public class MixedRealityCameraProfileInspector : BaseDataProviderServiceInspect private bool showDisplaySettings = false; private const string showDisplaySettingsPreferenceKey = "ShowCameraSystem_DisplaySettings_PreferenceKey"; + private SerializedProperty editTimeDisplayType; + private SerializedProperty opaqueNearClip; private SerializedProperty opaqueFarClip; private SerializedProperty opaqueClearFlags; @@ -48,6 +50,8 @@ protected override void OnEnable() { base.OnEnable(); + editTimeDisplayType = serializedObject.FindProperty("editTimeDisplayType"); + opaqueNearClip = serializedObject.FindProperty("nearClipPlaneOpaqueDisplay"); opaqueFarClip = serializedObject.FindProperty("farClipPlaneOpaqueDisplay"); opaqueClearFlags = serializedObject.FindProperty("cameraClearFlagsOpaqueDisplay"); @@ -73,6 +77,8 @@ public override void OnInspectorGUI() { serializedObject.Update(); + EditorGUILayout.PropertyField(editTimeDisplayType); + RenderFoldout(ref showProviders, "Camera Settings Providers", () => { using (new EditorGUI.IndentLevelScope()) diff --git a/Assets/MRTK/Core/Providers/BaseCameraSettingsProvider.cs b/Assets/MRTK/Core/Providers/BaseCameraSettingsProvider.cs index 2ee2a3102ad..cfc31e8c67d 100644 --- a/Assets/MRTK/Core/Providers/BaseCameraSettingsProvider.cs +++ b/Assets/MRTK/Core/Providers/BaseCameraSettingsProvider.cs @@ -20,34 +20,41 @@ public abstract class BaseCameraSettingsProvider : BaseDataProvider - public virtual bool IsOpaque { get; } = false; + public virtual bool IsOpaque => + Application.isEditor + && !Application.isPlaying + && CameraProfile != null + && CameraProfile.EditTimeDisplayType == DisplayType.Opaque; /// public virtual void ApplyConfiguration() { // It is the responsibility of the camera settings provider to set the display settings (this allows overriding the // default values with per-camera provider values). - MixedRealityCameraProfile cameraProfile = Service?.CameraProfile; - if (cameraProfile == null) { return; } + if (CameraProfile == null || CameraCache.Main == null) { return; } if (IsOpaque) { - CameraCache.Main.clearFlags = cameraProfile.CameraClearFlagsOpaqueDisplay; - CameraCache.Main.nearClipPlane = cameraProfile.NearClipPlaneOpaqueDisplay; - CameraCache.Main.farClipPlane = cameraProfile.FarClipPlaneOpaqueDisplay; - CameraCache.Main.backgroundColor = cameraProfile.BackgroundColorOpaqueDisplay; - QualitySettings.SetQualityLevel(cameraProfile.OpaqueQualityLevel, false); + CameraCache.Main.clearFlags = CameraProfile.CameraClearFlagsOpaqueDisplay; + CameraCache.Main.nearClipPlane = CameraProfile.NearClipPlaneOpaqueDisplay; + CameraCache.Main.farClipPlane = CameraProfile.FarClipPlaneOpaqueDisplay; + CameraCache.Main.backgroundColor = CameraProfile.BackgroundColorOpaqueDisplay; + QualitySettings.SetQualityLevel(CameraProfile.OpaqueQualityLevel, false); } else { - CameraCache.Main.clearFlags = cameraProfile.CameraClearFlagsTransparentDisplay; - CameraCache.Main.backgroundColor = cameraProfile.BackgroundColorTransparentDisplay; - CameraCache.Main.nearClipPlane = cameraProfile.NearClipPlaneTransparentDisplay; - CameraCache.Main.farClipPlane = cameraProfile.FarClipPlaneTransparentDisplay; - QualitySettings.SetQualityLevel(cameraProfile.TransparentQualityLevel, false); + CameraCache.Main.clearFlags = CameraProfile.CameraClearFlagsTransparentDisplay; + CameraCache.Main.backgroundColor = CameraProfile.BackgroundColorTransparentDisplay; + CameraCache.Main.nearClipPlane = CameraProfile.NearClipPlaneTransparentDisplay; + CameraCache.Main.farClipPlane = CameraProfile.FarClipPlaneTransparentDisplay; + QualitySettings.SetQualityLevel(CameraProfile.TransparentQualityLevel, false); } } } diff --git a/Assets/MRTK/Examples/Demos/HandTracking/Scenes/HandInteractionExamples.unity b/Assets/MRTK/Examples/Demos/HandTracking/Scenes/HandInteractionExamples.unity index 003b0354f9c..3359ac1d726 100644 --- a/Assets/MRTK/Examples/Demos/HandTracking/Scenes/HandInteractionExamples.unity +++ b/Assets/MRTK/Examples/Demos/HandTracking/Scenes/HandInteractionExamples.unity @@ -26,7 +26,7 @@ RenderSettings: m_AmbientIntensity: 1 m_AmbientMode: 0 m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 0} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} m_HaloStrength: 0.5 m_FlareStrength: 1 m_FlareFadeSpeed: 3 diff --git a/Assets/MRTK/Providers/OpenXR/Scripts/OpenXRCameraSettings.cs b/Assets/MRTK/Providers/OpenXR/Scripts/OpenXRCameraSettings.cs index 2dad5127a23..3298dac25bb 100644 --- a/Assets/MRTK/Providers/OpenXR/Scripts/OpenXRCameraSettings.cs +++ b/Assets/MRTK/Providers/OpenXR/Scripts/OpenXRCameraSettings.cs @@ -88,6 +88,8 @@ public override void Disable() /// public override bool IsOpaque => + (Application.isEditor && !Application.isPlaying) ? + base.IsOpaque : XRSubsystemHelpers.DisplaySubsystem == null || !XRSubsystemHelpers.DisplaySubsystem.running || XRSubsystemHelpers.DisplaySubsystem.displayOpaque; diff --git a/Assets/MRTK/Providers/WindowsMixedReality/XR2018/WindowsMixedRealityCameraSettings.cs b/Assets/MRTK/Providers/WindowsMixedReality/XR2018/WindowsMixedRealityCameraSettings.cs index c77f5e7311d..bfefa63d9ff 100644 --- a/Assets/MRTK/Providers/WindowsMixedReality/XR2018/WindowsMixedRealityCameraSettings.cs +++ b/Assets/MRTK/Providers/WindowsMixedReality/XR2018/WindowsMixedRealityCameraSettings.cs @@ -3,6 +3,7 @@ using Microsoft.MixedReality.Toolkit.CameraSystem; using Microsoft.MixedReality.Toolkit.Utilities; +using UnityEngine; #if UNITY_WSA using UnityEngine.XR.WSA; @@ -40,6 +41,8 @@ public class WindowsMixedRealityCameraSettings : BaseWindowsMixedRealityCameraSe /// public override bool IsOpaque => + (Application.isEditor && !Application.isPlaying) ? + base.IsOpaque : #if UNITY_WSA HolographicSettings.IsDisplayOpaque; #else diff --git a/Assets/MRTK/Providers/WindowsMixedReality/XRSDK/WindowsMixedRealityCameraSettings.cs b/Assets/MRTK/Providers/WindowsMixedReality/XRSDK/WindowsMixedRealityCameraSettings.cs index 461c8707c36..9a1058645d5 100644 --- a/Assets/MRTK/Providers/WindowsMixedReality/XRSDK/WindowsMixedRealityCameraSettings.cs +++ b/Assets/MRTK/Providers/WindowsMixedReality/XRSDK/WindowsMixedRealityCameraSettings.cs @@ -72,6 +72,8 @@ private async void EnableIfLoaderBecomesActive() /// public override bool IsOpaque => + (Application.isEditor && !Application.isPlaying) ? + base.IsOpaque : XRSubsystemHelpers.DisplaySubsystem == null || !XRSubsystemHelpers.DisplaySubsystem.running || XRSubsystemHelpers.DisplaySubsystem.displayOpaque; diff --git a/Assets/MRTK/Providers/XRSDK/GenericXRSDKCameraSettings.cs b/Assets/MRTK/Providers/XRSDK/GenericXRSDKCameraSettings.cs index 245ac36aa4b..1433f814729 100644 --- a/Assets/MRTK/Providers/XRSDK/GenericXRSDKCameraSettings.cs +++ b/Assets/MRTK/Providers/XRSDK/GenericXRSDKCameraSettings.cs @@ -3,6 +3,7 @@ using Microsoft.MixedReality.Toolkit.CameraSystem; using Microsoft.MixedReality.Toolkit.Utilities; +using UnityEngine; #if SPATIALTRACKING_ENABLED using UnityEngine.SpatialTracking; @@ -42,6 +43,8 @@ public class GenericXRSDKCameraSettings : BaseCameraSettingsProvider /// public override bool IsOpaque => + (Application.isEditor && !Application.isPlaying) ? + base.IsOpaque : XRSubsystemHelpers.DisplaySubsystem == null || !XRSubsystemHelpers.DisplaySubsystem.running || XRSubsystemHelpers.DisplaySubsystem.displayOpaque; diff --git a/Assets/MRTK/SDK/Profiles/DefaultMixedRealityCameraProfile.asset b/Assets/MRTK/SDK/Profiles/DefaultMixedRealityCameraProfile.asset index ea59d08e252..6f3f25dcb61 100644 --- a/Assets/MRTK/SDK/Profiles/DefaultMixedRealityCameraProfile.asset +++ b/Assets/MRTK/SDK/Profiles/DefaultMixedRealityCameraProfile.asset @@ -13,6 +13,7 @@ MonoBehaviour: m_Name: DefaultMixedRealityCameraProfile m_EditorClassIdentifier: isCustomProfile: 0 + editTimeDisplayType: 1 settingsConfigurations: - componentType: reference: Microsoft.MixedReality.Toolkit.WindowsMixedReality.WindowsMixedRealityCameraSettings, diff --git a/Assets/MRTK/SDK/Profiles/HoloLens1/DefaultHoloLens1CameraProfile.asset b/Assets/MRTK/SDK/Profiles/HoloLens1/DefaultHoloLens1CameraProfile.asset index d0af01df8c4..26ca208c775 100644 --- a/Assets/MRTK/SDK/Profiles/HoloLens1/DefaultHoloLens1CameraProfile.asset +++ b/Assets/MRTK/SDK/Profiles/HoloLens1/DefaultHoloLens1CameraProfile.asset @@ -13,6 +13,7 @@ MonoBehaviour: m_Name: DefaultHoloLens1CameraProfile m_EditorClassIdentifier: isCustomProfile: 0 + editTimeDisplayType: 1 settingsConfigurations: - componentType: reference: Microsoft.MixedReality.Toolkit.WindowsMixedReality.WindowsMixedRealityCameraSettings, @@ -44,9 +45,9 @@ MonoBehaviour: settingsProfile: {fileID: 11400000, guid: 32349edfa9bacb94a9fe58923e9a2400, type: 2} nearClipPlaneOpaqueDisplay: 0.3 farClipPlaneOpaqueDisplay: 1000 - cameraClearFlagsOpaqueDisplay: 2 + cameraClearFlagsOpaqueDisplay: 1 backgroundColorOpaqueDisplay: {r: 0, g: 0, b: 0, a: 1} - opaqueQualityLevel: 0 + opaqueQualityLevel: 5 nearClipPlaneTransparentDisplay: 0.3 farClipPlaneTransparentDisplay: 50 cameraClearFlagsTransparentDisplay: 2 diff --git a/Assets/MRTK/SDK/Profiles/HoloLens2/DefaultHoloLens2CameraProfile.asset b/Assets/MRTK/SDK/Profiles/HoloLens2/DefaultHoloLens2CameraProfile.asset index b0743e293aa..25039c0f3cd 100644 --- a/Assets/MRTK/SDK/Profiles/HoloLens2/DefaultHoloLens2CameraProfile.asset +++ b/Assets/MRTK/SDK/Profiles/HoloLens2/DefaultHoloLens2CameraProfile.asset @@ -13,6 +13,7 @@ MonoBehaviour: m_Name: DefaultHoloLens2CameraProfile m_EditorClassIdentifier: isCustomProfile: 0 + editTimeDisplayType: 1 settingsConfigurations: - componentType: reference: Microsoft.MixedReality.Toolkit.WindowsMixedReality.WindowsMixedRealityCameraSettings, @@ -44,9 +45,9 @@ MonoBehaviour: settingsProfile: {fileID: 11400000, guid: 32349edfa9bacb94a9fe58923e9a2400, type: 2} nearClipPlaneOpaqueDisplay: 0.1 farClipPlaneOpaqueDisplay: 1000 - cameraClearFlagsOpaqueDisplay: 2 + cameraClearFlagsOpaqueDisplay: 1 backgroundColorOpaqueDisplay: {r: 0, g: 0, b: 0, a: 1} - opaqueQualityLevel: 0 + opaqueQualityLevel: 5 nearClipPlaneTransparentDisplay: 0.1 farClipPlaneTransparentDisplay: 50 cameraClearFlagsTransparentDisplay: 2