using UnityEngine; using System; using System.IO; #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN public class OVRMixedRealityCaptureSettings : ScriptableObject { public bool enableMixedReality = false; public LayerMask extraHiddenLayers; public OVRManager.CompositionMethod compositionMethod = OVRManager.CompositionMethod.External; public OVRManager.CameraDevice capturingCameraDevice = OVRManager.CameraDevice.WebCamera0; public bool flipCameraFrameHorizontally = false; public bool flipCameraFrameVertically = false; public float handPoseStateLatency = 0.0f; public float sandwichCompositionRenderLatency = 0.0f; public int sandwichCompositionBufferedFrames = 8; public Color chromaKeyColor = Color.green; public float chromaKeySimilarity = 0.6f; public float chromaKeySmoothRange = 0.03f; public float chromaKeySpillRange = 0.04f; public bool useDynamicLighting = false; public OVRManager.DepthQuality depthQuality = OVRManager.DepthQuality.Medium; public float dynamicLightingSmoothFactor = 8.0f; public float dynamicLightingDepthVariationClampingValue = 0.001f; public OVRManager.VirtualGreenScreenType virtualGreenScreenType = OVRManager.VirtualGreenScreenType.Off; public float virtualGreenScreenTopY; public float virtualGreenScreenBottomY; public bool virtualGreenScreenApplyDepthCulling = false; public float virtualGreenScreenDepthTolerance = 0.2f; public void ReadFrom(OVRManager manager) { enableMixedReality = manager.enableMixedReality; compositionMethod = manager.compositionMethod; extraHiddenLayers = manager.extraHiddenLayers; capturingCameraDevice = manager.capturingCameraDevice; flipCameraFrameHorizontally = manager.flipCameraFrameHorizontally; flipCameraFrameVertically = manager.flipCameraFrameVertically; handPoseStateLatency = manager.handPoseStateLatency; sandwichCompositionRenderLatency = manager.sandwichCompositionRenderLatency; sandwichCompositionBufferedFrames = manager.sandwichCompositionBufferedFrames; chromaKeyColor = manager.chromaKeyColor; chromaKeySimilarity = manager.chromaKeySimilarity; chromaKeySmoothRange = manager.chromaKeySmoothRange; chromaKeySpillRange = manager.chromaKeySpillRange; useDynamicLighting = manager.useDynamicLighting; depthQuality = manager.depthQuality; dynamicLightingSmoothFactor = manager.dynamicLightingSmoothFactor; dynamicLightingDepthVariationClampingValue = manager.dynamicLightingDepthVariationClampingValue; virtualGreenScreenType = manager.virtualGreenScreenType; virtualGreenScreenTopY = manager.virtualGreenScreenTopY; virtualGreenScreenBottomY = manager.virtualGreenScreenBottomY; virtualGreenScreenApplyDepthCulling = manager.virtualGreenScreenApplyDepthCulling; virtualGreenScreenDepthTolerance = manager.virtualGreenScreenDepthTolerance; } public void ApplyTo(OVRManager manager) { manager.enableMixedReality = enableMixedReality; manager.compositionMethod = compositionMethod; manager.extraHiddenLayers = extraHiddenLayers; manager.capturingCameraDevice = capturingCameraDevice; manager.flipCameraFrameHorizontally = flipCameraFrameHorizontally; manager.flipCameraFrameVertically = flipCameraFrameVertically; manager.handPoseStateLatency = handPoseStateLatency; manager.sandwichCompositionRenderLatency = sandwichCompositionRenderLatency; manager.sandwichCompositionBufferedFrames = sandwichCompositionBufferedFrames; manager.chromaKeyColor = chromaKeyColor; manager.chromaKeySimilarity = chromaKeySimilarity; manager.chromaKeySmoothRange = chromaKeySmoothRange; manager.chromaKeySpillRange = chromaKeySpillRange; manager.useDynamicLighting = useDynamicLighting; manager.depthQuality = depthQuality; manager.dynamicLightingSmoothFactor = dynamicLightingSmoothFactor; manager.dynamicLightingDepthVariationClampingValue = dynamicLightingDepthVariationClampingValue; manager.virtualGreenScreenType = virtualGreenScreenType; manager.virtualGreenScreenTopY = virtualGreenScreenTopY; manager.virtualGreenScreenBottomY = virtualGreenScreenBottomY; manager.virtualGreenScreenApplyDepthCulling = virtualGreenScreenApplyDepthCulling; manager.virtualGreenScreenDepthTolerance = virtualGreenScreenDepthTolerance; } const string configFileName = "mrc.config"; public void WriteToConfigurationFile() { string text = JsonUtility.ToJson(this, true); try { string configPath = Path.Combine(Application.dataPath, configFileName); Debug.Log("Write OVRMixedRealityCaptureSettings to " + configPath); File.WriteAllText(configPath, text); } catch(Exception e) { Debug.LogWarning("Exception caught " + e.Message); } } public void CombineWithConfigurationFile() { try { string configPath = Path.Combine(Application.dataPath, configFileName); if (File.Exists(configPath)) { Debug.Log("MixedRealityCapture configuration file found at " + configPath); string text = File.ReadAllText(configPath); Debug.Log("Apply MixedRealityCapture configuration"); JsonUtility.FromJsonOverwrite(text, this); } else { Debug.Log("MixedRealityCapture configuration file doesn't exist at " + configPath); } } catch(Exception e) { Debug.LogWarning("Exception caught " + e.Message); } } } #endif