12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544 |
- //======= Copyright (c) Stereolabs Corporation, All rights reserved. ===============
- using UnityEngine;
- using UnityEditor;
- /// <summary>
- /// Custom editor used by ZEDManager to extend the default panel shown in the Inspector.
- /// Adds the camera status boxes, the button on the bottom to open camera settings, and a button to restart the camera when
- /// a settings has changed that requires it.
- /// </summary>
- [CustomEditor(typeof(ZEDManager)), CanEditMultipleObjects]
- public class ZEDCameraEditor : Editor
- {
- /// <summary>
- /// Reference to the ZEDManager instance we're editing.
- /// </summary>
- ZEDManager manager;
- //Store copies of ZEDManager's fields to detect changes later with CheckChange().
- //These do not need to be SerializedProperties because they're only used for checking recent changes.
- sl.RESOLUTION resolution;
- sl.DEPTH_MODE depthmode;
- bool usespatialmemory;
- //Input Prop
- private SerializedProperty cameraIDProperty;
- private SerializedProperty inputTypeProperty;
- private SerializedProperty depthModeProperty;
- private SerializedProperty usbResolutionProperty;
- private SerializedProperty usbFPSProperty;
- private SerializedProperty svoFileNameProperty;
- private SerializedProperty svoLoopProperty;
- private SerializedProperty svoRealTimeModeProperty;
- private SerializedProperty pauseSVOProperty;
- private SerializedProperty currentFrameSVOProperty;
- private SerializedProperty maxFrameSVOProperty;
- private SerializedProperty streamIPProperty;
- private SerializedProperty streamPortProperty;
- #if ZED_HDRP
- //SRP Lighting Prop
- private SerializedProperty srpShaderTypeProperty;
- private SerializedProperty selfIlluminationProperty;
- private SerializedProperty applyZEDNormalsProperty;
- #endif
- //Tracking Prop
- private SerializedProperty enableTrackingProperty;
- private SerializedProperty enableSMProperty;
- private SerializedProperty pathSMProperty;
- private SerializedProperty estimateIPProperty;
- private SerializedProperty trackingIsStaticProperty;
- //Rendering Prop
- private SerializedProperty depthOcclusionProperty;
- private SerializedProperty arpostProcessingPropery;
- private SerializedProperty camBrightnessProperty;
- //Recording Prop
- private SerializedProperty svoOutputFileNameProperty;
- private SerializedProperty svoOutputCompressionModeProperty;
- private SerializedProperty svoOutputBitrateProperty;
- private SerializedProperty svoOutputTargetFPSProperty;
- private SerializedProperty svoOutputTranscodeProperty;
- //Streaming Prop
- private SerializedProperty streamingOutProperty;
- private SerializedProperty streamingOutCodecProperty;
- private SerializedProperty streamingOutPortProperty;
- private SerializedProperty streamingOutBitrateProperty;
- private SerializedProperty streamingOutGopSizeProperty;
- private SerializedProperty streamingOutAdaptBitrateProperty;
- private SerializedProperty streamingOutChunkSizeProperty;
- private SerializedProperty streamingOutTargetFPSProperty;
- //Spatial mapping prop
- private string displayText = "Hide Mesh";
- /// <summary>
- /// Serialized version of ZEDSpatialMappingManager's range_preset property.
- /// </summary>
- private SerializedProperty range;
- /// <summary>
- /// Serialized version of ZEDSpatialMappingManager's resolution_preset property.
- /// </summary>
- private SerializedProperty mappingResolution;
- /// <summary>
- /// Serialized version of ZEDSpatialMappingManager's isFilteringEnable property.
- /// </summary>
- private SerializedProperty isFilteringEnable;
- /// <summary>
- /// Serialized version of ZEDSpatialMappingManager's filterParameters property.
- /// </summary>
- private SerializedProperty filterParameters;
- /// <summary>
- /// Serialized version of ZEDSpatialMappingManager's isTextured property.
- /// </summary>
- private SerializedProperty saveWhenOver;
- /// <summary>
- /// Serialized version of ZEDSpatialMappingManager's saveWhenOver property.
- /// </summary>
- private SerializedProperty isTextured;
- /// <summary>
- /// Layout option used to draw the '...' button for opening a File Explorer window to find a mesh file.
- /// </summary>
- private SerializedProperty meshPath;
- //Object Detection Prop
- private SerializedProperty OD_ImageSyncMode;
- private SerializedProperty OD_ObjectTracking;
- private SerializedProperty OD_BodyFitting;
- private SerializedProperty OD_2DMask;
- private SerializedProperty OD_DetectionModel;
- private SerializedProperty OD_MaxRange;
- private SerializedProperty OD_FilteringMode;
- //Object Detection Runtime Prop
- private SerializedProperty OD_VehicleDetectionConfidence;
- private SerializedProperty OD_PersonDetectionConfidence;
- private SerializedProperty SK_PersonDetectionConfidence;
- private SerializedProperty OD_BagDetectionConfidence;
- private SerializedProperty OD_AnimalDetectionConfidence;
- private SerializedProperty OD_ElectronicsDetectionConfidence;
- private SerializedProperty OD_FruitVegetableDetectionConfidence;
- private SerializedProperty OD_SportDetectionConfidence;
- private SerializedProperty OD_PersonFilter;
- private SerializedProperty OD_VehicleFilter;
- private SerializedProperty OD_BagFilter;
- private SerializedProperty OD_AnimalFilter;
- private SerializedProperty OD_ElectronicsFilter;
- private SerializedProperty OD_FruitVegetableFilter;
- private SerializedProperty OD_SportFilter;
- /// <summary>
- /// Layout option used to draw the '...' button for opening a File Explorer window to find a mesh file.
- /// </summary>
- private GUILayoutOption[] optionsButtonBrowse = { GUILayout.MaxWidth(30) };
- private GUILayoutOption[] optionsButtonStandard = { /*GUILayout.(EditorGUIUtility.labelWidth)*/};
- SerializedProperty sensingModeProperty;
- SerializedProperty rightDepthProperty;
- SerializedProperty maxDepthProperty;
- SerializedProperty confidenceThresholdProperty;
- SerializedProperty textureConfidenceThresholdProperty;
- SerializedProperty enableSelfCalibrationProperty;
- SerializedProperty enableIMUFusionProperty;
- SerializedProperty opencvCalibFilePath;
- // Rendering Prop
- private int arlayer;
- private SerializedProperty showarrig;
- private SerializedProperty fadeinonstart;
- private SerializedProperty dontdestroyonload;
- private SerializedProperty enableImageEnhancementProperty;
- SerializedProperty setIMUPrior;
- SerializedProperty allowPassThroughProperty;
- SerializedProperty greyskybox;
- SerializedProperty showadvanced; //Show advanced settings or not.
- SerializedProperty showSpatialMapping; //Show spatial mapping or not.
- SerializedProperty showObjectDetection; //show object detection settings or not
- SerializedProperty showRecording; //Show recording settings or not.
- SerializedProperty showStreamingOut; //Show streaming out settings or not
- SerializedProperty showcamcontrol; //Show cam control settings or not.
- // Current value for camera controls
- SerializedProperty videoSettingsInitModeProperty;
- SerializedProperty brightnessProperty;
- SerializedProperty contrastProperty;
- SerializedProperty hueProperty;
- SerializedProperty saturationProperty;
- SerializedProperty autoGainExposureProperty;
- SerializedProperty exposureProperty;
- SerializedProperty gainProperty;
- SerializedProperty autoWhiteBalanceProperty;
- SerializedProperty whitebalanceProperty;
- SerializedProperty sharpnessProperty;
- SerializedProperty gammaProperty;
- SerializedProperty ledStatus;
- //private bool hasLoadedSettings = false;
- /// <summary>
- /// Whether we've set a manual value to gain and exposure or if they're in auto mode.
- /// </summary>
- //private bool setManualValue = true;
- /// <summary>
- /// Whether we've set a manual value to white balance or if it's in auto mode.
- /// </summary>
- //private bool setManualWhiteBalance = true;
- private string[] toolbarStrings = new string[] { "USB", "SVO", "Stream" };
- private string pauseText = "Pause";
- private string pauseTooltip = " SVO playback or recording."; //Appended to the pause Text to make tooltip text.
- private string[] filters = { "Svo files", "svo" }; //Filters used for browsing for an SVO.
- private void OnEnable()
- {
- manager = (ZEDManager)target;
- ////////////////////////////////////////////////// FoldOut
- showadvanced = serializedObject.FindProperty("advancedPanelOpen");
- showSpatialMapping = serializedObject.FindProperty("spatialMappingFoldoutOpen");
- showcamcontrol = serializedObject.FindProperty("camControlFoldoutOpen");
- showRecording = serializedObject.FindProperty("recordingFoldoutOpen");
- showStreamingOut = serializedObject.FindProperty("streamingOutFoldoutOpen");
- showObjectDetection = serializedObject.FindProperty("objectDetectionFoldoutOpen");
- resolution = manager.resolution;
- depthmode = manager.depthMode;
- usespatialmemory = manager.enableSpatialMemory;
- //Input Serialized Properties
- cameraIDProperty = serializedObject.FindProperty("cameraID");
- depthModeProperty = serializedObject.FindProperty("depthMode");
- inputTypeProperty = serializedObject.FindProperty("inputType");
- usbResolutionProperty = serializedObject.FindProperty("resolution");
- usbFPSProperty = serializedObject.FindProperty("FPS");
- svoFileNameProperty = serializedObject.FindProperty("svoInputFileName");
- svoLoopProperty = serializedObject.FindProperty("svoLoopBack");
- svoRealTimeModeProperty = serializedObject.FindProperty("svoRealTimeMode");
- streamIPProperty = serializedObject.FindProperty("streamInputIP");
- streamPortProperty = serializedObject.FindProperty("streamInputPort");
- pauseSVOProperty = serializedObject.FindProperty("pauseSVOReading");
- currentFrameSVOProperty = serializedObject.FindProperty("currentFrame");
- maxFrameSVOProperty = serializedObject.FindProperty("numberFrameMax");
- #if ZED_HDRP
- //SRP Lighting Serialized Property
- srpShaderTypeProperty = serializedObject.FindProperty("srpShaderType");
- selfIlluminationProperty = serializedObject.FindProperty("selfIllumination");
- applyZEDNormalsProperty = serializedObject.FindProperty("applyZEDNormals");
- #endif
- //Tracking Serialized Properties
- enableTrackingProperty = serializedObject.FindProperty("enableTracking");
- enableSMProperty = serializedObject.FindProperty("enableSpatialMemory");
- pathSMProperty = serializedObject.FindProperty("pathSpatialMemory");
- estimateIPProperty = serializedObject.FindProperty("estimateInitialPosition");
- trackingIsStaticProperty = serializedObject.FindProperty("trackingIsStatic");
- ///Rendering Serialized Properties
- depthOcclusionProperty = serializedObject.FindProperty("depthOcclusion");
- arpostProcessingPropery = serializedObject.FindProperty("postProcessing");
- camBrightnessProperty = serializedObject.FindProperty("m_cameraBrightness");
- ///Spatial Mapping Serialized Properties
- range = serializedObject.FindProperty("mappingRangePreset");
- mappingResolution = serializedObject.FindProperty("mappingResolutionPreset");
- isFilteringEnable = serializedObject.FindProperty("isMappingFilteringEnable");
- filterParameters = serializedObject.FindProperty("meshFilterParameters");
- isTextured = serializedObject.FindProperty("isMappingTextured");
- saveWhenOver = serializedObject.FindProperty("saveMeshWhenOver");
- meshPath = serializedObject.FindProperty("meshPath");
- ///Object Detection Serialized Properties
- OD_ImageSyncMode = serializedObject.FindProperty("objectDetectionImageSyncMode");
- OD_ObjectTracking = serializedObject.FindProperty("objectDetectionTracking");
- OD_BodyFitting = serializedObject.FindProperty("objectDetectionBodyFitting");
- OD_2DMask = serializedObject.FindProperty("objectDetection2DMask");
- OD_DetectionModel = serializedObject.FindProperty("objectDetectionModel");
- OD_MaxRange = serializedObject.FindProperty("objectDetectionMaxRange");
- OD_FilteringMode = serializedObject.FindProperty("objectDetectionFilteringMode");
- OD_PersonDetectionConfidence = serializedObject.FindProperty("OD_personDetectionConfidenceThreshold");
- SK_PersonDetectionConfidence = serializedObject.FindProperty("SK_personDetectionConfidenceThreshold");
- OD_VehicleDetectionConfidence = serializedObject.FindProperty("vehicleDetectionConfidenceThreshold");
- OD_BagDetectionConfidence = serializedObject.FindProperty("bagDetectionConfidenceThreshold");
- OD_AnimalDetectionConfidence = serializedObject.FindProperty("animalDetectionConfidenceThreshold");
- OD_ElectronicsDetectionConfidence = serializedObject.FindProperty("electronicsDetectionConfidenceThreshold");
- OD_FruitVegetableDetectionConfidence = serializedObject.FindProperty("fruitVegetableDetectionConfidenceThreshold");
- OD_SportDetectionConfidence = serializedObject.FindProperty("sportDetectionConfidenceThreshold");
- OD_PersonFilter = serializedObject.FindProperty("objectClassPersonFilter");
- OD_VehicleFilter = serializedObject.FindProperty("objectClassVehicleFilter");
- OD_BagFilter = serializedObject.FindProperty("objectClassBagFilter");
- OD_AnimalFilter = serializedObject.FindProperty("objectClassAnimalFilter");
- OD_ElectronicsFilter = serializedObject.FindProperty("objectClassElectronicsFilter");
- OD_FruitVegetableFilter = serializedObject.FindProperty("objectClassFruitVegetableFilter");
- OD_SportFilter = serializedObject.FindProperty("objectClassSportFilter");
- //Recording Serialized Properties
- svoOutputFileNameProperty = serializedObject.FindProperty("svoOutputFileName");
- svoOutputCompressionModeProperty = serializedObject.FindProperty("svoOutputCompressionMode");
- svoOutputBitrateProperty = serializedObject.FindProperty("svoOutputBitrate");
- svoOutputTargetFPSProperty = serializedObject.FindProperty("svoOutputTargetFPS");
- svoOutputTranscodeProperty = serializedObject.FindProperty("svoOutputTranscodeStreaming");
- streamingOutProperty = serializedObject.FindProperty("enableStreaming");
- streamingOutCodecProperty = serializedObject.FindProperty("streamingCodec");
- streamingOutPortProperty = serializedObject.FindProperty("streamingPort");
- streamingOutBitrateProperty = serializedObject.FindProperty("bitrate");
- streamingOutGopSizeProperty = serializedObject.FindProperty("gopSize");
- streamingOutAdaptBitrateProperty = serializedObject.FindProperty("adaptativeBitrate");
- streamingOutChunkSizeProperty = serializedObject.FindProperty("chunkSize");
- streamingOutTargetFPSProperty = serializedObject.FindProperty("streamingTargetFramerate");
- ///Advanced Settings Serialized Properties
- arlayer = ZEDLayers.arlayer;
- showarrig = serializedObject.FindProperty("showarrig");
- fadeinonstart = serializedObject.FindProperty("fadeInOnStart");
- greyskybox = serializedObject.FindProperty("greySkybox");
- dontdestroyonload = serializedObject.FindProperty("dontDestroyOnLoad");
- showarrig = serializedObject.FindProperty("showarrig");
- sensingModeProperty = serializedObject.FindProperty("sensingMode");
- rightDepthProperty = serializedObject.FindProperty("enableRightDepthMeasure");
- maxDepthProperty = serializedObject.FindProperty("m_maxDepthRange");
- confidenceThresholdProperty = serializedObject.FindProperty("m_confidenceThreshold");
- textureConfidenceThresholdProperty = serializedObject.FindProperty("m_textureConfidenceThreshold");
- enableSelfCalibrationProperty = serializedObject.FindProperty("enableSelfCalibration");
- enableIMUFusionProperty = serializedObject.FindProperty("enableIMUFusion");
- allowPassThroughProperty = serializedObject.FindProperty("allowARPassThrough");
- setIMUPrior = serializedObject.FindProperty("setIMUPriorInAR");
- enableImageEnhancementProperty = serializedObject.FindProperty("enableImageEnhancement");
- opencvCalibFilePath = serializedObject.FindProperty("opencvCalibFile");
- //Video Settings Serialized Properties
- videoSettingsInitModeProperty = serializedObject.FindProperty("videoSettingsInitMode");
- brightnessProperty = serializedObject.FindProperty("videoBrightness"); ;
- contrastProperty = serializedObject.FindProperty("videoContrast"); ;
- hueProperty = serializedObject.FindProperty("videoHue"); ;
- saturationProperty = serializedObject.FindProperty("videoSaturation"); ;
- autoGainExposureProperty = serializedObject.FindProperty("videoAutoGainExposure"); ;
- gainProperty = serializedObject.FindProperty("videoGain"); ;
- exposureProperty = serializedObject.FindProperty("videoExposure"); ;
- autoWhiteBalanceProperty = serializedObject.FindProperty("videoAutoWhiteBalance"); ;
- whitebalanceProperty = serializedObject.FindProperty("videoWhiteBalance"); ;
- sharpnessProperty = serializedObject.FindProperty("videoSharpness");
- gammaProperty = serializedObject.FindProperty("videoGamma");
- ledStatus = serializedObject.FindProperty("videoLEDStatus"); ;
- }
- public override void OnInspectorGUI()
- {
- GUIStyle boldfoldout = new GUIStyle(EditorStyles.foldout);
- boldfoldout.fontStyle = FontStyle.Bold;
- //DrawDefaultInspector(); //Draws what you'd normally see in the inspector in absence of a custom inspector.
- EditorGUIUtility.labelWidth = EditorGUIUtility.currentViewWidth * 0.4f;
- ///////////////////////////////////////////////////////////////
- /// Inputlayout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- EditorGUILayout.LabelField("Input", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent cameraIDLabel = new GUIContent("Camera ID", "Which ZED camera to connect to. Used when multiple ZED cameras are connected to this device.");
- cameraIDProperty.enumValueIndex = (int)(sl.ZED_CAMERA_ID)EditorGUILayout.EnumPopup(cameraIDLabel, (sl.ZED_CAMERA_ID)cameraIDProperty.enumValueIndex);
- GUIContent cameraDepthModeLabel = new GUIContent("Depth Mode", "Camera depth mode. Higher values increase quality at the cost of performance.");
- depthModeProperty.enumValueIndex = (int)(sl.DEPTH_MODE)EditorGUILayout.EnumPopup(cameraDepthModeLabel, (sl.DEPTH_MODE)depthModeProperty.enumValueIndex);
- GUILayout.Space(15);
- EditorGUILayout.BeginHorizontal();
- GUIContent inputTypeLabel = new GUIContent("Input Type", "Where the ZED video feed comes from.\r\n\n" +
- "- USB: A live ZED camera connected to this device.\r\n\n- SVO: A video file recorded from a ZED previously.\r\n\n" +
- "- Stream: A live ZED camera connected to a device elsewhere on the network.");
- EditorGUILayout.LabelField(inputTypeLabel, GUILayout.Width(EditorGUIUtility.labelWidth));
- GUI.enabled = !Application.isPlaying;
- inputTypeProperty.intValue = GUILayout.Toolbar(inputTypeProperty.intValue, toolbarStrings, GUILayout.ExpandWidth(true));
- GUI.enabled = true;
- EditorGUILayout.EndHorizontal();
- GUILayout.Space(5);
- switch (inputTypeProperty.intValue)
- {
- case 0:
- GUIContent cameraResolutionLabel = new GUIContent("Resolution", "Camera resolution.");
- //GUI.enabled = !Application.isPlaying;
- usbResolutionProperty.enumValueIndex = (int)(sl.RESOLUTION)EditorGUILayout.EnumPopup(cameraResolutionLabel, (sl.RESOLUTION)usbResolutionProperty.enumValueIndex);
- //GUI.enabled = true;
- GUIContent cameraFPSLabel = new GUIContent("FPS", "Desired camera FPS. Maximum FPS depends on your resolution setting:\r\n\n" +
- "- HD2k: 15FPS\r\n\n- HD1080: 30FPS\r\n\n- HD720p: 60FPS\r\n\n- VGA: 100FPS");
- GUI.enabled = !Application.isPlaying;
- usbFPSProperty.intValue = EditorGUILayout.IntField(cameraFPSLabel, usbFPSProperty.intValue);
- GUI.enabled = true;
- serializedObject.ApplyModifiedProperties();
- //Check if we need to restart the camera, and create a button for the user to do so.
- if (Application.isPlaying && manager.IsZEDReady && CheckChange())
- {
- GUILayout.Space(10);
- GUIStyle orangetext = new GUIStyle(EditorStyles.label);
- orangetext.normal.textColor = Color.red;
- orangetext.wordWrap = true;
- string labeltext = "Settings have changed that require restarting the camera to apply.";
- Rect labelrect = GUILayoutUtility.GetRect(new GUIContent(labeltext, ""), orangetext);
- EditorGUI.LabelField(labelrect, labeltext, orangetext);
- if (GUILayout.Button("Restart Camera"))
- {
- manager.Reset(); //Reset the ZED.
- //Reset the fields now that they're synced.
- resolution = manager.resolution;
- depthmode = manager.depthMode;
- }
- }
- break;
- case 1:
- EditorGUILayout.BeginHorizontal();
- GUIContent svoFileNameLabel = new GUIContent("SVO File", "SVO file name");
- GUI.enabled = !Application.isPlaying;
- svoFileNameProperty.stringValue = EditorGUILayout.TextField(svoFileNameLabel, svoFileNameProperty.stringValue);
- GUIContent loadSVOlabel = new GUIContent("...", "Browse for existing SVO file.");
- if (GUILayout.Button(loadSVOlabel, optionsButtonBrowse))
- {
- svoFileNameProperty.stringValue = EditorUtility.OpenFilePanelWithFilters("Load SVO", "", filters);
- }
- GUI.enabled = true;
- EditorGUILayout.EndHorizontal();
- GUIContent svoLoopLabel = new GUIContent("Loop SVO", "Loop SVO when it reaches the end.");
- svoLoopProperty.boolValue = EditorGUILayout.Toggle(svoLoopLabel, svoLoopProperty.boolValue);
- GUIContent svoRealTimeModelabel = new GUIContent("Real-Time Mode", "When enabled, the time between frames comes from the actual timestamps of each frame. Otherwise, " +
- "each frame is read based on the maximum FPS of the recorded resolution (ex. 30FPS for HD1080). Real-Time mode makes playback speed more true, but dropped frames result in pauses.");
- svoRealTimeModeProperty.boolValue = EditorGUILayout.Toggle(svoRealTimeModelabel, svoRealTimeModeProperty.boolValue);
- EditorGUI.BeginChangeCheck();
- GUI.enabled = (manager.NumberFrameMax > 0);
- GUIContent sliderlabel = new GUIContent("Frame ", "SVO playback position");
- currentFrameSVOProperty.intValue = EditorGUILayout.IntSlider(sliderlabel, currentFrameSVOProperty.intValue, 0, maxFrameSVOProperty.intValue);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null)
- {
- //If the slider of frame from the SVO has moved, manually grab the frame and update the textures.
- manager.zedCamera.SetSVOPosition(currentFrameSVOProperty.intValue);
- if (pauseSVOProperty.boolValue)
- {
- manager.NeedNewFrameGrab = true;
- }
- }
- }
- GUI.enabled = false;
- if (manager.zedCamera != null)
- GUI.enabled = manager.zedCamera.IsCameraReady;
- EditorGUILayout.BeginHorizontal();
- GUILayout.Space(EditorGUIUtility.labelWidth);
- pauseText = pauseSVOProperty.boolValue ? "Resume" : "Pause";
- GUIContent pauselabel = new GUIContent(pauseText, pauseText + pauseTooltip);
- if (GUILayout.Button(pauselabel))
- {
- pauseSVOProperty.boolValue = !pauseSVOProperty.boolValue;
- }
- EditorGUILayout.EndHorizontal();
- GUI.enabled = true;
- serializedObject.ApplyModifiedProperties();
- break;
- case 2:
- GUIContent streamIPLabel = new GUIContent("IP", "IP of the host device with the ZED attached.");
- GUI.enabled = !Application.isPlaying;
- streamIPProperty.stringValue = EditorGUILayout.TextField(streamIPLabel, streamIPProperty.stringValue);
- GUI.enabled = true;
- GUIContent streamPortLabel = new GUIContent("Port", "Port where the ZED stream is sent to.");
- GUI.enabled = !Application.isPlaying;
- streamPortProperty.intValue = EditorGUILayout.IntField(streamPortLabel, streamPortProperty.intValue);
- GUI.enabled = true;
- serializedObject.ApplyModifiedProperties();
- break;
- }
- EditorGUI.indentLevel--;
- #if ZED_HDRP
- ///////////////////////////////////////////////////////////////
- /// HDRP Lighting layout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- EditorGUILayout.LabelField("SRP Lighting", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent shaderTypeLabel = new GUIContent("Lighting Type", "Defines the type of shader (lit or unlit) that's applied to the canvas object(s) used to display the ZED image. " +
- "Lit takes into account scene lighting - it is the most realistic but harder to configure. Unlit makes the ZED image evenly lit, but lacks lighting/shadow effects.");
- string[] shaderoptions = new string[5] { "Lit", "Unlit", "Lit Greenscreen", "Unlit Greenscreen", "Don't Change"};
- GUI.enabled = !Application.isPlaying;
- srpShaderTypeProperty.enumValueIndex = EditorGUILayout.Popup(shaderTypeLabel, srpShaderTypeProperty.enumValueIndex, shaderoptions);
- GUI.enabled = true;
- if (srpShaderTypeProperty.enumValueIndex == 2 || srpShaderTypeProperty.enumValueIndex == 3)
- {
- GUIStyle greenscreennotestyle = new GUIStyle();
- greenscreennotestyle.normal.textColor = new Color(.7f, .7f, .7f);
- greenscreennotestyle.wordWrap = true;
- greenscreennotestyle.fontSize = 10;
- greenscreennotestyle.fixedWidth = 0;
- greenscreennotestyle.stretchWidth = false;
- greenscreennotestyle.alignment = TextAnchor.MiddleLeft;
- greenscreennotestyle.fontStyle = FontStyle.Italic;
- GUILayout.Space(2);
- EditorGUI.indentLevel++;
- string greenscreennote = "Requires GreenScreenManager component on the ZED rig's Camera objects.";
- Rect gsrect = GUILayoutUtility.GetRect(new GUIContent(greenscreennote, ""), greenscreennotestyle);
- EditorGUI.LabelField(gsrect, greenscreennote, greenscreennotestyle);
- GUILayout.Space(8);
- EditorGUI.indentLevel--;
- }
- if (srpShaderTypeProperty.enumValueIndex == 0 || srpShaderTypeProperty.enumValueIndex == 2)
- {
- GUIContent selfIlluminationLabel = new GUIContent("Self-Illumination", "How much the ZED image should light itself via emission. " +
- "Setting to zero is most realistic, but requires you to emulate the real-world lighting conditions within Unity. Higher settings cause the image " +
- "to be uniformly lit, but light and shadow effects are less visible.");
- selfIlluminationProperty.floatValue = EditorGUILayout.Slider(selfIlluminationLabel, selfIlluminationProperty.floatValue, 0, 1);
- GUIContent applyZEDNormalsLabel = new GUIContent("ZED Normals", "Apply normals map from the ZED SDK. Causes lighting to be calculated based "
- + "on the real-world angle of the geometry, instead of treating the ZED image like a plane. However, the normals map is imperfect and can lead to noise.");
- applyZEDNormalsProperty.boolValue = EditorGUILayout.Toggle(applyZEDNormalsLabel, applyZEDNormalsProperty.boolValue);
- }
- EditorGUI.indentLevel--;
- #endif
- ///////////////////////////////////////////////////////////////
- /// Motion Tracking layout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- EditorGUILayout.LabelField("Motion Tracking", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent enableTrackingLabel = new GUIContent("Enable Tracking", "If enabled, the ZED will move/rotate itself using its own inside-out tracking. " +
- "If false, the camera tracking will move with the VR HMD if connected and available.");
- enableTrackingProperty.boolValue = EditorGUILayout.Toggle(enableTrackingLabel, enableTrackingProperty.boolValue);
- GUIContent enableSMPropertyLabel = new GUIContent("Enable Spatial Memory", "Enables the spatial memory. Will detect and correct tracking drift by remembering features and anchors in the environment, "
- + "but may cause visible jumps when it happens");
- enableSMProperty.boolValue = EditorGUILayout.Toggle(enableSMPropertyLabel, enableSMProperty.boolValue);
- GUIContent pathSMlabel = new GUIContent("Path Spatial Memory", "If using Spatial Memory, you can specify a path to an existing .area file to start with some memory already loaded. " +
- ".area files are created by scanning a scene with ZEDSpatialMappingManager and saving the scan.");
- pathSMProperty.stringValue = EditorGUILayout.TextField(pathSMlabel, pathSMProperty.stringValue);
- GUIContent estimateIPPropertyLabel = new GUIContent("Estimate Initial Position", "Estimate initial position by detecting the floor. Leave it false if using VR Headset");
- estimateIPProperty.boolValue = EditorGUILayout.Toggle(estimateIPPropertyLabel, estimateIPProperty.boolValue);
- GUIContent trackingIsStaticPropertyLabel = new GUIContent("Tracking Is Static", "If true, tracking is enabled but doesn't move after initializing. " +
- "Can be useful for stationary cameras where you still need tracking enabled, such as in Object Detection.");
- trackingIsStaticProperty.boolValue = EditorGUILayout.Toggle(trackingIsStaticPropertyLabel, trackingIsStaticProperty.boolValue);
- EditorGUI.indentLevel--;
- ///////////////////////////////////////////////////////////////
- /// Rendering layout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- EditorGUILayout.LabelField("Rendering", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent depthOcclusionPropertyLabel = new GUIContent("Depth Occlusion", "When enabled, the real world can occlude (cover up) virtual objects that are behind it. " +
- "Otherwise, virtual objects will appear in front.");
- depthOcclusionProperty.boolValue = EditorGUILayout.Toggle(depthOcclusionPropertyLabel, depthOcclusionProperty.boolValue);
- GUIContent arpostProcessingProperyLabel = new GUIContent("AR Post-Processing", "Enables post-processing effects on virtual objects that blends them in with the real world.");
- arpostProcessingPropery.boolValue = EditorGUILayout.Toggle(arpostProcessingProperyLabel, arpostProcessingPropery.boolValue);
- GUIContent camBrightnessPropertyLabel = new GUIContent("Camera Brightness", "Brightness of the final real-world image. Default is 100. Lower to darken the environment in a realistic-looking way. " +
- "This is a rendering setting that doesn't affect the raw input from the camera.");
- camBrightnessProperty.intValue = EditorGUILayout.IntSlider(camBrightnessPropertyLabel, camBrightnessProperty.intValue, 0, 100);
- EditorGUI.indentLevel--;
- ///////////////////////////////////////////////////////////////
- /// Spatial Mapping layout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- showSpatialMapping.boolValue = EditorGUILayout.Foldout(showSpatialMapping.boolValue, "Spatial Mapping", boldfoldout);
- if (showSpatialMapping.boolValue)
- {
- EditorGUI.indentLevel++;
- bool cameraIsReady = false;
- if (manager)
- cameraIsReady = manager.zedCamera != null ? manager.zedCamera.IsCameraReady : false;
- displayText = manager.IsSpatialMappingDisplay ? "Hide Mesh" : "Display Mesh";
- EditorGUILayout.BeginHorizontal();
- GUILayout.Space(5);
- EditorGUILayout.EndHorizontal();
- GUIContent resolutionlabel = new GUIContent("Resolution", "Resolution setting for the scan. " +
- "A higher resolution creates more submeshes and uses more memory, but is more accurate.");
- ZEDSpatialMapping.RESOLUTION newResolution = (ZEDSpatialMapping.RESOLUTION)EditorGUILayout.EnumPopup(resolutionlabel, manager.mappingResolutionPreset);
- if (newResolution != manager.mappingResolutionPreset)
- {
- mappingResolution.enumValueIndex = (int)newResolution;
- serializedObject.ApplyModifiedProperties();
- }
- GUIContent rangelabel = new GUIContent("Range", "Maximum distance geometry can be from the camera to be scanned. " +
- "Geometry scanned from farther away will be less accurate.");
- ZEDSpatialMapping.RANGE newRange = (ZEDSpatialMapping.RANGE)EditorGUILayout.EnumPopup(rangelabel, manager.mappingRangePreset);
- if (newRange != manager.mappingRangePreset)
- {
- range.enumValueIndex = (int)newRange;
- serializedObject.ApplyModifiedProperties();
- }
- EditorGUILayout.BeginHorizontal();
- GUIContent filteringlabel = new GUIContent("Mesh Filtering", "Whether mesh filtering is needed.");
- filterParameters.enumValueIndex = (int)(sl.FILTER)EditorGUILayout.EnumPopup(filteringlabel, (sl.FILTER)filterParameters.enumValueIndex);
- isFilteringEnable.boolValue = true;
- EditorGUILayout.EndHorizontal();
- GUI.enabled = !manager.IsMappingRunning; //Don't allow changing the texturing setting while the scan is running.
- GUIContent texturedlabel = new GUIContent("Texturing", "Whether surface textures will be scanned and applied. " +
- "Note that texturing will add further delay to the post-scan finalizing period.");
- isTextured.boolValue = EditorGUILayout.Toggle(texturedlabel, isTextured.boolValue);
- GUI.enabled = cameraIsReady; //Gray out below elements if the ZED hasn't been initialized as you can't yet start a scan.
- EditorGUILayout.BeginHorizontal();
- GUILayout.Space(EditorGUIUtility.labelWidth);
- if (!manager.IsMappingRunning)
- {
- GUIContent startmappinglabel = new GUIContent("Start Spatial Mapping", "Begin the spatial mapping process.");
- if (GUILayout.Button(startmappinglabel))
- {
- if (!manager.IsSpatialMappingDisplay)
- {
- manager.SwitchDisplayMeshState(true);
- }
- manager.StartSpatialMapping();
- }
- }
- else
- {
- if (manager.IsMappingRunning && !manager.IsMappingUpdateThreadRunning || manager.IsMappingRunning && manager.IsMappingTexturingRunning)
- {
- GUILayout.FlexibleSpace();
- GUIContent finishinglabel = new GUIContent("Spatial mapping is finishing", "Please wait - the mesh is being processed.");
- GUILayout.Label(finishinglabel);
- Repaint();
- GUILayout.FlexibleSpace();
- }
- else
- {
- GUIContent stopmappinglabel = new GUIContent("Stop Spatial Mapping", "Ends spatial mapping and begins processing the final mesh.");
- if (GUILayout.Button(stopmappinglabel))
- {
- manager.StopSpatialMapping();
- }
- }
- }
- EditorGUILayout.EndHorizontal();
- EditorGUILayout.BeginHorizontal();
- GUI.enabled = cameraIsReady;
- string displaytooltip = manager.IsSpatialMappingDisplay ? "Hide the mesh from view." : "Display the hidden mesh.";
- GUILayout.Space(EditorGUIUtility.labelWidth);
- GUIContent displaylabel = new GUIContent(displayText, displaytooltip);
- if (GUILayout.Button(displayText))
- {
- manager.SwitchDisplayMeshState(!manager.IsSpatialMappingDisplay);
- }
- EditorGUILayout.EndHorizontal();
- EditorGUILayout.BeginHorizontal();
- GUIContent clearMesheslabel = new GUIContent("Clear All Meshes", "Clear all meshes created with the ZED");
- GUILayout.Space(EditorGUIUtility.labelWidth);
- if (GUILayout.Button(clearMesheslabel))
- {
- manager.ClearAllMeshes();
- }
- EditorGUILayout.EndHorizontal();
- GUI.enabled = true;
- GUILayout.Space(5);
- EditorGUILayout.LabelField("Storage", EditorStyles.boldLabel);
- GUIContent savelabel = new GUIContent("Save Mesh (when finished)", "Whether to save the mesh and .area file when finished scanning.");
- saveWhenOver.boolValue = EditorGUILayout.Toggle(savelabel, saveWhenOver.boolValue);
- EditorGUILayout.BeginHorizontal();
- GUIContent pathlabel = new GUIContent("Mesh Path", "Path where the mesh is saved/loaded from. Valid file types are .obj, .ply and .bin.");
- meshPath.stringValue = EditorGUILayout.TextField(pathlabel, meshPath.stringValue);
- GUIContent findfilelabel = new GUIContent("...", "Browse for an existing .obj, .ply or .bin file.");
- if (GUILayout.Button(findfilelabel, optionsButtonBrowse))
- {
- meshPath.stringValue = EditorUtility.OpenFilePanel("Mesh file", "", "ply,obj,bin");
- serializedObject.ApplyModifiedProperties();
- }
- EditorGUILayout.EndHorizontal();
- EditorGUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
- GUI.enabled = System.IO.File.Exists(meshPath.stringValue) && cameraIsReady;
- GUIContent loadlabel = new GUIContent("Load", "Load an existing mesh and .area file into the scene.");
- if (GUILayout.Button(loadlabel))
- {
- manager.LoadMesh(meshPath.stringValue);
- }
- EditorGUILayout.EndHorizontal();
- GUI.enabled = true;
- EditorGUI.indentLevel--;
- }
- serializedObject.ApplyModifiedProperties();
- ///////////////////////////////////////////////////////////////
- /// Object Detection layout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- showObjectDetection.boolValue = EditorGUILayout.Foldout(showObjectDetection.boolValue, "Object Detection / Body Tracking", boldfoldout);
- if (showObjectDetection.boolValue)
- {
- bool cameraIsReady = false;
- if (manager)
- cameraIsReady = manager.zedCamera != null ? manager.zedCamera.IsCameraReady : false;
- GUILayout.Space(10);
- EditorGUILayout.LabelField("Detection Mode", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent ObjectDetectionModelLabel = new GUIContent("Object Detection Model", "Select the available object detection model. HUMAN_XXX for skeleton tracking");
- OD_DetectionModel.enumValueIndex = (int)(sl.DETECTION_MODEL)EditorGUILayout.EnumPopup(ObjectDetectionModelLabel, (sl.DETECTION_MODEL)OD_DetectionModel.enumValueIndex);
- EditorGUI.indentLevel--;
- GUILayout.Space(10);
- EditorGUILayout.LabelField("Init Parameters", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUI.enabled = !cameraIsReady || !manager.IsObjectDetectionRunning;
- GUIContent ImageSyncModeLabel = new GUIContent("Image Sync", "If enabled, object detection will be computed for each image before the next frame is available, " +
- "locking the main thread if necessary.\r\n\nRecommended setting is false for real-time applications.");
- OD_ImageSyncMode.boolValue = EditorGUILayout.Toggle(ImageSyncModeLabel, OD_ImageSyncMode.boolValue);
- GUIContent ObjectTrackingLabel = new GUIContent("Enable Object Tracking", "Whether to track objects across multiple frames using the ZED's position relative to the floor.\r\n\n" +
- "Requires tracking to be on. It's also recommended to enable Estimate Initial Position to find the floor.");
- OD_ObjectTracking.boolValue = EditorGUILayout.Toggle(ObjectTrackingLabel, OD_ObjectTracking.boolValue);
- if (OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.MULTI_CLASS_BOX || OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.MULTI_CLASS_BOX_MEDIUM || OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.MULTI_CLASS_BOX_ACCURATE ||
- OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.CUSTOM_BOX_OBJECTS || OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.PERSON_HEAD_BOX)
- {
- GUIContent Object2DMaskLabel = new GUIContent("Enable 2D Mask", "Whether to calculate 2D masks for each object, showing exactly which pixels within the 2D bounding box are the object.\r\n\n" +
- "Must be on when Object Detection starts. Requires more performance, so do not enable unless needed.");
- OD_2DMask.boolValue = EditorGUILayout.Toggle(Object2DMaskLabel, OD_2DMask.boolValue);
- }
- else
- {
- GUIContent BodyFittingLabel = new GUIContent("Enable Body Fitting", "Defines if the body fitting will be applied.\r\n\n" +
- "Requires tracking to be on. It's also recommended to enable Estimate Initial Position to find the floor.");
- OD_BodyFitting.boolValue = EditorGUILayout.Toggle(BodyFittingLabel, OD_BodyFitting.boolValue);
- }
- GUIContent MaxRangeLabel = new GUIContent("Max Range", "Defines a upper depth range for detections.");
- OD_MaxRange.floatValue = EditorGUILayout.Slider(MaxRangeLabel, OD_MaxRange.floatValue, 0, 40.0f);
- GUIContent FilteringModeLabel = new GUIContent("Filtering Mode", "Defines the bounding box preprocessor used.");
- OD_FilteringMode.enumValueIndex = (int)(sl.OBJECT_FILTERING_MODE)EditorGUILayout.EnumPopup(FilteringModeLabel, (sl.OBJECT_FILTERING_MODE)OD_FilteringMode.enumValueIndex);
- GUI.enabled = true;
- EditorGUI.indentLevel--;
- GUILayout.Space(10);
- if (OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.MULTI_CLASS_BOX || OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.MULTI_CLASS_BOX_MEDIUM || OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.MULTI_CLASS_BOX_ACCURATE)
- {
- EditorGUILayout.LabelField("Runtime Parameters", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent OD_personDetectionConfidenceThresholdLabel = new GUIContent("Person Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_PersonDetectionConfidence.intValue = EditorGUILayout.IntSlider(OD_personDetectionConfidenceThresholdLabel, OD_PersonDetectionConfidence.intValue, 1, 99);
- GUIContent vehicleDetectionConfidenceThresholdLabel = new GUIContent("Vehicle Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_VehicleDetectionConfidence.intValue = EditorGUILayout.IntSlider(vehicleDetectionConfidenceThresholdLabel, OD_VehicleDetectionConfidence.intValue, 1, 99);
- GUIContent bagDetectionConfidenceThresholdLabel = new GUIContent("Bag Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_BagDetectionConfidence.intValue = EditorGUILayout.IntSlider(bagDetectionConfidenceThresholdLabel, OD_BagDetectionConfidence.intValue, 1, 99);
- GUIContent animalDetectionConfidenceThresholdLabel = new GUIContent("Animal Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_AnimalDetectionConfidence.intValue = EditorGUILayout.IntSlider(animalDetectionConfidenceThresholdLabel, OD_AnimalDetectionConfidence.intValue, 1, 99);
- GUIContent electronicsDetectionConfidenceThresholdLabel = new GUIContent("Electronics Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_ElectronicsDetectionConfidence.intValue = EditorGUILayout.IntSlider(electronicsDetectionConfidenceThresholdLabel, OD_ElectronicsDetectionConfidence.intValue, 1, 99);
- GUIContent fruitVegetableDetectionConfidenceThresholdLabel = new GUIContent("Fruit and Vegetable Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_FruitVegetableDetectionConfidence.intValue = EditorGUILayout.IntSlider(fruitVegetableDetectionConfidenceThresholdLabel, OD_FruitVegetableDetectionConfidence.intValue, 1, 99);
- GUIContent sportDetectionConfidenceThresholdLabel = new GUIContent("Sport Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_SportDetectionConfidence.intValue = EditorGUILayout.IntSlider(sportDetectionConfidenceThresholdLabel, OD_SportDetectionConfidence.intValue, 1, 99);
- GUILayout.Space(5);
- GUIContent PersonFilterLabel = new GUIContent("Person Filter", "Whether to detect people during object detection.");
- OD_PersonFilter.boolValue = EditorGUILayout.Toggle(PersonFilterLabel, OD_PersonFilter.boolValue);
- GUIContent VehicleFilterLabel = new GUIContent("Vehicle Filter", "Whether to detect vehicles during object detection.");
- OD_VehicleFilter.boolValue = EditorGUILayout.Toggle(VehicleFilterLabel, OD_VehicleFilter.boolValue);
- GUIContent BagFilterLabel = new GUIContent("Bag Filter", "Whether to detect bags during object detection.");
- OD_BagFilter.boolValue = EditorGUILayout.Toggle(BagFilterLabel, OD_BagFilter.boolValue);
- GUIContent AnimalFilterLabel = new GUIContent("Animal Filter", "Whether to detect animals during object detection.");
- OD_AnimalFilter.boolValue = EditorGUILayout.Toggle(AnimalFilterLabel, OD_AnimalFilter.boolValue);
- GUIContent ElectronicsFilterLabel = new GUIContent("Electronics Filter", "Whether to detect electronics devices during object detection.");
- OD_ElectronicsFilter.boolValue = EditorGUILayout.Toggle(ElectronicsFilterLabel, OD_ElectronicsFilter.boolValue);
- GUIContent FruitVegetableFilterLabel = new GUIContent("Fruit and Vegetable Filter", "Whether to detect fruits and vegetablesduring object detection.");
- OD_FruitVegetableFilter.boolValue = EditorGUILayout.Toggle(FruitVegetableFilterLabel, OD_FruitVegetableFilter.boolValue);
- GUIContent SportFilterLabel = new GUIContent("Sport Filter", "Whether to detect sport related objects during object detection.");
- OD_SportFilter.boolValue = EditorGUILayout.Toggle(SportFilterLabel, OD_SportFilter.boolValue);
- EditorGUI.indentLevel--;
- }
- else if (OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.PERSON_HEAD_BOX)
- {
- EditorGUILayout.LabelField("Runtime Parameters", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent OD_personDetectionConfidenceThresholdLabel = new GUIContent("Person head Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- OD_PersonDetectionConfidence.intValue = EditorGUILayout.IntSlider(OD_personDetectionConfidenceThresholdLabel, OD_PersonDetectionConfidence.intValue, 1, 99);
- }
- else if (OD_DetectionModel.enumValueIndex == (int)sl.DETECTION_MODEL.CUSTOM_BOX_OBJECTS) {
- }
- else //SKELETON
- {
- EditorGUILayout.LabelField("Runtime Parameters", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- GUIContent SK_personDetectionConfidenceThresholdLabel = new GUIContent("Person Confidence Threshold", "Detection sensitivity.Represents how sure the SDK must be that " +
- "an object exists to report it.\r\n\nEx: If the threshold is 80, then only objects where the SDK is 80% sure or greater will appear in the list of detected objects.");
- SK_PersonDetectionConfidence.intValue = EditorGUILayout.IntSlider(SK_personDetectionConfidenceThresholdLabel, SK_PersonDetectionConfidence.intValue, 1, 99);
- }
- GUI.enabled = cameraIsReady;
- GUILayout.Space(10);
- if (!manager.IsObjectDetectionRunning)
- {
- GUIContent startODlabel = new GUIContent("Start Object Detection", "Begin the OD process.");
- if (GUILayout.Button(startODlabel))
- {
- manager.StartObjectDetection();
- }
- }
- else
- {
- GUIContent stopODlabel = new GUIContent("Stop Object Detection", "Stop the OD process.");
- if (GUILayout.Button(stopODlabel))
- {
- manager.StopObjectDetection();
- }
- }
- GUI.enabled = true;
- }
- ///////////////////////////////////////////////////////////////
- /// Recording layout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- showRecording.boolValue = EditorGUILayout.Foldout(showRecording.boolValue, "Recording", boldfoldout);
- if (showRecording.boolValue)
- {
- EditorGUI.indentLevel++;
- GUILayout.Space(5);
- bool cameraIsReady = false;
- if (manager)
- cameraIsReady = manager.zedCamera != null ? manager.zedCamera.IsCameraReady : false;
- GUIContent svoOutFileNameLabel = new GUIContent("SVO File", "SVO file name");
- svoOutputFileNameProperty.stringValue = EditorGUILayout.TextField(svoOutFileNameLabel, svoOutputFileNameProperty.stringValue, GUILayout.ExpandWidth(true));
- GUIContent svoCompressionModeLabel = new GUIContent("SVO Compression", "SVO Compression mode for the recorded SVO file");
- svoOutputCompressionModeProperty.enumValueIndex = (int)(sl.SVO_COMPRESSION_MODE)EditorGUILayout.EnumPopup(svoCompressionModeLabel, (sl.SVO_COMPRESSION_MODE)svoOutputCompressionModeProperty.enumValueIndex, GUILayout.ExpandWidth(true));
- GUIContent svoOutBitrateLabel = new GUIContent("Bitrate", "Bitrate for H264/5 recording");
- svoOutputBitrateProperty.intValue = EditorGUILayout.IntField(svoOutBitrateLabel, svoOutputBitrateProperty.intValue);
- GUIContent svoOutTargetFPSLabel = new GUIContent("Target FPS", "Target FPS for SVO recording");
- svoOutputTargetFPSProperty.intValue = EditorGUILayout.IntField(svoOutTargetFPSLabel, svoOutputTargetFPSProperty.intValue);
- GUIContent svoOutputTranscodeLabel = new GUIContent("Transcode", "If streaming input, set to false to avoid transcoding (decoding+ re-encoding for SVO). Recommended to leave at false.");
- svoOutputTranscodeProperty.boolValue = EditorGUILayout.Toggle(svoOutputTranscodeLabel, svoOutputTranscodeProperty.boolValue);
- EditorGUILayout.BeginHorizontal();
- GUI.enabled = cameraIsReady;
- string recordLabel = manager.needRecordFrame ? "Stop Recording" : "Start Recording";
- string recordtooltip = manager.needRecordFrame ? "Stop Recording" : "Start Recording";
- GUIContent displaylabel = new GUIContent(recordLabel, recordtooltip);
- GUILayout.Space(EditorGUIUtility.labelWidth);
- if (GUILayout.Button(recordLabel))
- {
- if (manager.needRecordFrame)
- {
- manager.zedCamera.DisableRecording();
- manager.needRecordFrame = false;
- }
- else
- {
- if (manager.zedCamera.EnableRecording(svoOutputFileNameProperty.stringValue, (sl.SVO_COMPRESSION_MODE)svoOutputCompressionModeProperty.enumValueIndex,(int)svoOutputBitrateProperty.intValue,(int)svoOutputTargetFPSProperty.intValue,svoOutputTranscodeProperty.boolValue) == sl.ERROR_CODE.SUCCESS)
- manager.needRecordFrame = true;
- else
- {
- Debug.LogError("Failed to start SVO Recording");
- manager.needRecordFrame = false;
- }
- }
- }
- EditorGUI.indentLevel--;
- GUI.enabled = true;
- EditorGUILayout.EndHorizontal();
- }
- ///////////////////////////////////////////////////////////////
- /// Streaming Out layout /////////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- showStreamingOut.boolValue = EditorGUILayout.Foldout(showStreamingOut.boolValue, "Streaming", boldfoldout);
- if (showStreamingOut.boolValue)
- {
- EditorGUI.indentLevel++;
- GUILayout.Space(5);
- GUIContent streamingOutPropertyLabel = new GUIContent("Enable Streaming Output", "Enable Streaming Output with below settings");
- streamingOutProperty.boolValue = EditorGUILayout.Toggle(streamingOutPropertyLabel, streamingOutProperty.boolValue);
- GUIContent streamingOutCodecPropertyLabel = new GUIContent("Codec", "Codec used for images compression");
- streamingOutCodecProperty.enumValueIndex = (int)(sl.STREAMING_CODEC)EditorGUILayout.EnumPopup(streamingOutCodecPropertyLabel, (sl.STREAMING_CODEC)streamingOutCodecProperty.enumValueIndex);
- GUIContent streamingOutPortPropertyLabel = new GUIContent("Port", "Port where stream is sent to ");
- streamingOutPortProperty.intValue = EditorGUILayout.IntField(streamingOutPortPropertyLabel, streamingOutPortProperty.intValue);
- GUIContent streamingOutBitratePropertyLabel = new GUIContent("Bitrate", "Target Bitrate for the codec");
- streamingOutBitrateProperty.intValue = EditorGUILayout.IntField(streamingOutBitratePropertyLabel, streamingOutBitrateProperty.intValue);
- GUIContent streamingOutGopSizePropertyLabel = new GUIContent("Gop", "Maximum Gop size for the codec");
- streamingOutGopSizeProperty.intValue = EditorGUILayout.IntField(streamingOutGopSizePropertyLabel, streamingOutGopSizeProperty.intValue);
- GUIContent streamingOutAdaptBitratePropertyLabel = new GUIContent("Adaptative Bitrate", "Adaptative bitrate for the codec");
- streamingOutAdaptBitrateProperty.boolValue = EditorGUILayout.Toggle(streamingOutAdaptBitratePropertyLabel, streamingOutAdaptBitrateProperty.boolValue);
- GUIContent streamingOutChunkSizePropertyLabel = new GUIContent("Payload", "Chunk size for packet streaming");
- streamingOutChunkSizeProperty.intValue = EditorGUILayout.IntField(streamingOutChunkSizePropertyLabel, streamingOutChunkSizeProperty.intValue);
- GUIContent streamingOutTargetFPSPropertyLabel = new GUIContent("Target FPS", "Target FPS for streaming output");
- streamingOutTargetFPSProperty.intValue = EditorGUILayout.IntField(streamingOutTargetFPSPropertyLabel, streamingOutTargetFPSProperty.intValue);
- EditorGUI.indentLevel--;
- }
- ///////////////////////////////////////////////////////////////
- /// Advanced Settings layout ///////////////////////////////
- /////////////////////////////////////////////////////////////
- GUILayout.Space(10);
- showadvanced.boolValue = EditorGUILayout.Foldout(showadvanced.boolValue, "Advanced Settings", boldfoldout);
- if (showadvanced.boolValue)
- {
- EditorGUI.indentLevel++;
- GUILayout.Space(5);
- GUIContent sensingModeLabel = new GUIContent("Sensing Mode", "FILL approximates depth in areas where depth can't be measured. " +
- "FILL is almost always better for augmented/mixed reality applications.");
- sensingModeProperty.enumValueIndex = (int)(sl.SENSING_MODE)EditorGUILayout.EnumPopup(sensingModeLabel, (sl.SENSING_MODE)sensingModeProperty.enumValueIndex);
- GUIContent maxDepthPropertyLabel = new GUIContent("Max Depth Range", "Maximum depth at which the camera will display the real world, in meters. " +
- "Pixels further than this value will be invisible.");
- maxDepthProperty.floatValue = EditorGUILayout.Slider(maxDepthPropertyLabel, maxDepthProperty.floatValue, 0f, 40f);
- GUIContent confidenceThresholdPropertyLabel = new GUIContent("Confidence Threshold", "How tolerant the ZED SDK is to low confidence values. Lower values filter more pixels based on stereo matching score.");
- if (Application.isPlaying)
- {
- manager.confidenceThreshold = EditorGUILayout.IntSlider(confidenceThresholdPropertyLabel, manager.confidenceThreshold, 0, 100);
- }
- else
- {
- confidenceThresholdProperty.intValue = EditorGUILayout.IntSlider(confidenceThresholdPropertyLabel, confidenceThresholdProperty.intValue, 0, 100);
- }
- GUIContent textureConfidenceThresholdPropertyLabel = new GUIContent("Texture Confidence Threshold", "How tolerant the ZED SDK is to homogenous block. Lower values filter more pixels based on textureness.");
- if (Application.isPlaying)
- {
- manager.textureConfidenceThreshold = EditorGUILayout.IntSlider(textureConfidenceThresholdPropertyLabel, manager.textureConfidenceThreshold, 0, 100);
- }
- else
- {
- textureConfidenceThresholdProperty.intValue = EditorGUILayout.IntSlider(textureConfidenceThresholdPropertyLabel, textureConfidenceThresholdProperty.intValue, 0, 100);
- }
- GUILayout.Space(12);
- //Enable image enhancement toggle
- EditorGUI.BeginDisabledGroup(Application.isPlaying);
- GUIContent imageenhancementlabel = new GUIContent("Image Enhancement", "Whether to enable the new color/gamma curve added to the ZED SDK in v3.0.\r\n" +
- "Exposes more detail in darker regions and removes a slight red bias.");
- enableImageEnhancementProperty.boolValue = EditorGUILayout.Toggle(imageenhancementlabel, manager.enableImageEnhancement);
- EditorGUI.EndDisabledGroup();
- GUIContent enalbeIMUFusionLabel = new GUIContent("Visual-Inertial Tracking", "If true, and you are using a ZED2 or ZED Mini, IMU fusion uses data from the camera's IMU to improve tracking results. ");
- enableIMUFusionProperty.boolValue = EditorGUILayout.Toggle(enalbeIMUFusionLabel, enableIMUFusionProperty.boolValue);
- //Whether to enable the ZED SDK's self-calibration feature.
- GUIContent enableselfcaliblabel = new GUIContent("Self-Calibration", "If true, the ZED SDK will subtly adjust the ZED's calibration " +
- "during runtime to account for heat and other factors. Reasons to disable this are rare. ");
- enableSelfCalibrationProperty.boolValue = EditorGUILayout.Toggle(enableselfcaliblabel, enableSelfCalibrationProperty.boolValue);
- //Grey Skybox toggle.
- GUIContent greyskyboxlabel = new GUIContent("Grey Out Skybox on Start", "True to set the background to a neutral gray when the scene starts.\n\r" +
- "Recommended for AR so that lighting on virtual objects better matches the real world.");
- greyskybox.boolValue = EditorGUILayout.Toggle(greyskyboxlabel, manager.greySkybox);
- //Don't Destroy On Load toggle.
- GUIContent dontdestroylabel = new GUIContent("Don't Destroy on Load", "When enabled, applies DontDestroyOnLoad() on the ZED rig in Awake(), " +
- "preserving it between scene transitions.");
- dontdestroyonload.boolValue = EditorGUILayout.Toggle(dontdestroylabel, manager.dontDestroyOnLoad);
- GUIContent openCalibPathlabel = new GUIContent("Opencv Calibration File ", "Optional, Set an optional file path where the SDK can find a file containing the calibration information of the camera computed by OpenCV. ");
- opencvCalibFilePath.stringValue = EditorGUILayout.TextField(openCalibPathlabel, opencvCalibFilePath.stringValue);
- GUILayout.Space(12);
- EditorGUI.indentLevel--;
- EditorGUILayout.LabelField("AR Passthrough Settings", EditorStyles.boldLabel);
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- //Style for the AR layer box.
- GUIStyle layerboxstyle = new GUIStyle(EditorStyles.numberField);
- layerboxstyle.fixedWidth = 30;
- layerboxstyle.stretchWidth = false;
- layerboxstyle.alignment = TextAnchor.MiddleCenter;
- GUIStyle layerboxstylewarning = new GUIStyle(layerboxstyle);
- layerboxstylewarning.normal.textColor = new Color(.9f, .9f, 0); //Red color if layer number is invalid.
- GUIStyle layerboxstyleerror = new GUIStyle(layerboxstyle);
- layerboxstyleerror.normal.textColor = new Color(.8f, 0, 0); //Red color if layer number is invalid.
- GUIContent arlayerlabel = new GUIContent("AR Layer", "Layer that a final, normally-hidden AR rig sees. Used to confine it from the rest of the scene.\r\n " +
- "You can assign this to any empty layer, and multiple ZEDs can share the same layer.");
- arlayer = EditorGUILayout.IntField(arlayerlabel, ZEDLayers.arlayer, arlayer < 32 ? layerboxstyle : layerboxstyleerror);
- //Show an error message if the set layer is invalid.
- GUIStyle errormessagestyle = new GUIStyle(EditorStyles.label);
- errormessagestyle.normal.textColor = layerboxstyleerror.normal.textColor;
- errormessagestyle.wordWrap = true;
- errormessagestyle.fontSize = 10;
- //Show small error message if user set layer to below zero.
- if (arlayer < 0)
- {
- string errortext = "Unity layers must be above zero to be visible.";
- Rect labelrect = GUILayoutUtility.GetRect(new GUIContent(errortext, ""), errormessagestyle);
- EditorGUI.LabelField(labelrect, errortext, errormessagestyle);
- }
- //Show small error message if user set layer higher than 31, which is invalid because Unity layers only go up to 31.
- if (arlayer > 31)
- {
- string errortext = "Unity doesn't support layers above 31.";
- Rect labelrect = GUILayoutUtility.GetRect(new GUIContent(errortext, ""), errormessagestyle);
- EditorGUI.LabelField(labelrect, errortext, errormessagestyle);
- }
- //Show warnings if the layer is valid but not recommended.
- GUIStyle warningmessagestyle = new GUIStyle(EditorStyles.label);
- warningmessagestyle.normal.textColor = layerboxstylewarning.normal.textColor;
- warningmessagestyle.wordWrap = true;
- warningmessagestyle.fontSize = 10;
- //Show small warning message if user set layer to 31, which is technically valid but Unity reserves it for other uses.
- if (arlayer == 31)
- {
- string warningext = "Warning: Unity reserves layer 31 for previews in the editor. Assigning to layer 31 can cause conflicts.";
- Rect labelrect = GUILayoutUtility.GetRect(new GUIContent(warningext, ""), warningmessagestyle);
- EditorGUI.LabelField(labelrect, warningext, warningmessagestyle);
- }
- //Show small warning message if user set layer to 0
- if (arlayer == 0)
- {
- string warningext = "Warning: Setting the AR rig to see the Default layer means other objects will be drawn in the background, " +
- "and in unexpected positions as the AR rig position is not synced with the ZED_Rig_Stereo object.";
- Rect labelrect = GUILayoutUtility.GetRect(new GUIContent(warningext, ""), warningmessagestyle);
- EditorGUI.LabelField(labelrect, warningext, warningmessagestyle);
- }
- ZEDLayersManager.ClearLayer(ZEDLayers.ID_arlayer);
- ZEDLayersManager.CreateLayer(ZEDLayers.ID_arlayer, arlayer);
- //Show AR Rig toggle.
- GUIContent showarlabel = new GUIContent("Show Final AR Rig", "Whether to show the hidden camera rig used in stereo AR mode to " +
- "prepare images for HMD output. You normally shouldn't tamper with this rig, but seeing it can be useful for " +
- "understanding how the ZED output works.");
- bool lastshowar = manager.showARRig;
- showarrig.boolValue = EditorGUILayout.Toggle(showarlabel, manager.showARRig);
- if (showarrig.boolValue != lastshowar)
- {
- LayerMask arlayers = (1 << manager.arLayer);
- if (showarrig.boolValue == true)
- {
- Tools.visibleLayers |= arlayers;
- }
- else
- {
- Tools.visibleLayers &= ~(arlayers);
- }
- if (manager.zedRigDisplayer != null && Application.isPlaying)
- {
- manager.zedRigDisplayer.hideFlags = showarrig.boolValue ? HideFlags.None : HideFlags.HideInHierarchy;
- }
- }
- //GUILayout.Space(12);
- EditorGUI.BeginDisabledGroup(Application.isPlaying);
- GUIContent rightDepthLabel = new GUIContent("Enable Right Depth", "Whether to enable depth measurements from the right camera. Required for depth effects in AR pass-through, " +
- "but requires performance even if not used.\r\n\n'AUTO' enables it only if a ZEDRenderingPlane component set to the right eye is detected as a child of ZEDManager's " +
- "GameObject (as in the ZED rig prefabs.)");
- rightDepthProperty.enumValueIndex = (int)(ZEDManager.RightDepthEnabledMode)EditorGUILayout.EnumPopup(rightDepthLabel, (ZEDManager.RightDepthEnabledMode)rightDepthProperty.enumValueIndex);
- GUIContent allowPassThroughLabel = new GUIContent("Allow AR Pass-Through", "If true, the ZED rig will enter 'pass-through' mode if it detects a stereo rig - at least " +
- "two cameras as children with ZEDRenderingPlane components, each with a different eye) - and a VR headset is connected. If false, it will never enter pass-through mode.");
- allowPassThroughProperty.boolValue = EditorGUILayout.Toggle(allowPassThroughLabel, allowPassThroughProperty.boolValue);
- //Whether to set the IMU prior in AR passthrough mode.
- GUIContent setimupriorlabel = new GUIContent("Set IMU Prior in AR", "In AR pass-through mode, whether to compare the " +
- "ZED's IMU data against the reported position of the VR headset. This helps compensate for drift and should " +
- "usually be left on. However, in some setups, like when using a custom mount, this can cause tracking errors.");
- setIMUPrior.boolValue = EditorGUILayout.Toggle(setimupriorlabel, manager.setIMUPriorInAR);
- //Fade In At Start toggle.
- GUIContent fadeinlabel = new GUIContent("Fade In at Start", "When enabled, makes the ZED image fade in from black when the application starts.");
- fadeinonstart.boolValue = EditorGUILayout.Toggle(fadeinlabel, manager.fadeInOnStart);
- GUILayout.Space(12);
- GUI.enabled = true;
- GUIContent camRebootButton = new GUIContent("Reboot Camera", "Reboot the camera.");
- if (GUILayout.Button(camRebootButton))
- {
- if (Application.isPlaying && manager.zedCamera.IsCameraReady)
- {
- manager.Reboot();
- }
- }
- EditorGUI.EndDisabledGroup();
- EditorGUI.indentLevel--;
- }
- serializedObject.ApplyModifiedProperties();
- ///////////////////////////////////////////////////////////////
- /// Camera control layout ///////////////////////////////////
- /////////////////////////////////////////////////////////////
- /*//TEST: Try loading starting settings.
- if (Application.isPlaying && manager.zedCamera.IsCameraReady)
- {
- if (!hasLoadedSettings)
- {
- Debug.Log("Loaded settings.");
- LoadCurrentVideoSettings();
- hasLoadedSettings = true;
- }
- }
- else hasLoadedSettings = false;*/
- GUILayout.Space(10);
- showcamcontrol.boolValue = EditorGUILayout.Foldout(showcamcontrol.boolValue, "Camera Controls", boldfoldout);
- if (showcamcontrol.boolValue)
- {
- GUILayout.Space(5);
- EditorGUI.indentLevel++;
- //usbResolutionProperty.enumValueIndex = (int)(sl.RESOLUTION)EditorGUILayout.EnumPopup(cameraResolutionLabel, (sl.RESOLUTION)usbResolutionProperty.enumValueIndex);
- //(ZEDManager.VideoSettingsInitMode)
- GUIContent videoInitModeLabel = new GUIContent("Load From: ", "Where the ZED's settings come from when you start the scene.\r\n\n" +
- "- Custom: Applies settings as set below before runtime.\r\n\n- Load From SDK: Camera will load settings last applied to the ZED. " +
- "May have been from a source outside Unity.\r\n\n- Default: Camera will load default video settings.");
- videoSettingsInitModeProperty.enumValueIndex = (int)(ZEDManager.VideoSettingsInitMode)EditorGUILayout.EnumPopup(videoInitModeLabel,
- (ZEDManager.VideoSettingsInitMode)videoSettingsInitModeProperty.enumValueIndex);
- if (manager.zedCamera == null && videoSettingsInitModeProperty.enumValueIndex != (int)ZEDManager.VideoSettingsInitMode.Custom)
- GUI.enabled = false;
- else
- GUI.enabled = true;
- EditorGUI.BeginChangeCheck();
- brightnessProperty.intValue = EditorGUILayout.IntSlider("Brightness", brightnessProperty.intValue, 0, 8);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.BRIGHTNESS, brightnessProperty.intValue);
- }
- EditorGUI.BeginChangeCheck();
- contrastProperty.intValue = EditorGUILayout.IntSlider("Contrast", contrastProperty.intValue, 0, 8);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.CONTRAST, contrastProperty.intValue);
- }
- EditorGUI.BeginChangeCheck();
- hueProperty.intValue = EditorGUILayout.IntSlider("Hue", hueProperty.intValue, 0, 11);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.HUE, hueProperty.intValue);
- }
- EditorGUI.BeginChangeCheck();
- saturationProperty.intValue = EditorGUILayout.IntSlider("Saturation", saturationProperty.intValue, 0, 8);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.SATURATION, saturationProperty.intValue);
- }
- EditorGUI.BeginChangeCheck();
- sharpnessProperty.intValue = EditorGUILayout.IntSlider("Sharpness", sharpnessProperty.intValue, 0, 8);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.SHARPNESS, sharpnessProperty.intValue);
- }
- EditorGUI.BeginChangeCheck();
- gammaProperty.intValue = EditorGUILayout.IntSlider("Gamma", gammaProperty.intValue, 1, 9);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.GAMMA, gammaProperty.intValue);
- }
- EditorGUI.BeginChangeCheck();
- ledStatus.boolValue = EditorGUILayout.Toggle("LED Status", ledStatus.boolValue, EditorStyles.toggle);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- {
- int lst = ledStatus.boolValue ? 1 : 0;
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.LED_STATUS, lst);
- }
- }
- EditorGUI.BeginChangeCheck();
- autoGainExposureProperty.boolValue = EditorGUILayout.Toggle("AEC / AGC ", autoGainExposureProperty.boolValue, EditorStyles.toggle);
- if (Application.isPlaying && manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- {
- if (EditorGUI.EndChangeCheck())
- {
- if (autoGainExposureProperty.boolValue)
- {
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.AEC_AGC, 1);
- }
- else
- {
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.AEC_AGC, 0);
- gainProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.GAIN);
- exposureProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.EXPOSURE);
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.GAIN, gainProperty.intValue); //Apply last settings immediately.
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.EXPOSURE, exposureProperty.intValue);
- }
- }
- }
- GUI.enabled = !autoGainExposureProperty.boolValue;
- EditorGUI.BeginChangeCheck();
- EditorGUI.indentLevel++;
- gainProperty.intValue = EditorGUILayout.IntSlider("Gain", gainProperty.intValue, 0, 100);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && !autoGainExposureProperty.boolValue)
- {
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.GAIN, gainProperty.intValue);
- }
- }
- EditorGUI.BeginChangeCheck();
- exposureProperty.intValue = EditorGUILayout.IntSlider("Exposure", exposureProperty.intValue, 0, 100);
- if (EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady && !autoGainExposureProperty.boolValue)
- {
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.EXPOSURE, exposureProperty.intValue);
- }
- }
- if (manager.zedCamera == null && videoSettingsInitModeProperty.enumValueIndex != (int)ZEDManager.VideoSettingsInitMode.Custom)
- GUI.enabled = false;
- else
- GUI.enabled = true;
- EditorGUI.indentLevel--;
- EditorGUI.BeginChangeCheck();
- autoWhiteBalanceProperty.boolValue = EditorGUILayout.Toggle(" AWB ", autoWhiteBalanceProperty.boolValue, EditorStyles.toggle);
- if (Application.isPlaying && manager.zedCamera.IsCameraReady)
- {
- if (EditorGUI.EndChangeCheck())
- {
- if (autoWhiteBalanceProperty.boolValue)
- {
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.AUTO_WHITEBALANCE, 1);
- }
- else
- {
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.AUTO_WHITEBALANCE, 0);
- whitebalanceProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.WHITEBALANCE) * 100;
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.WHITEBALANCE, whitebalanceProperty.intValue / 100);
- }
- }
- }
- EditorGUI.indentLevel++;
- GUI.enabled = !autoWhiteBalanceProperty.boolValue;
- EditorGUI.BeginChangeCheck();
- whitebalanceProperty.intValue = 100 * EditorGUILayout.IntSlider("White balance", whitebalanceProperty.intValue / 100, 26, 65);
- if (!autoWhiteBalanceProperty.boolValue && EditorGUI.EndChangeCheck())
- {
- if (manager.zedCamera != null && manager.zedCamera.IsCameraReady)
- manager.zedCamera.SetCameraSettings(sl.CAMERA_SETTINGS.WHITEBALANCE, whitebalanceProperty.intValue);
- }
- EditorGUI.indentLevel--;
- EditorGUI.indentLevel--;
- GUILayout.Space(7);
- if (manager.zedCamera == null && videoSettingsInitModeProperty.enumValueIndex != (int)ZEDManager.VideoSettingsInitMode.Custom)
- GUI.enabled = false;
- else
- GUI.enabled = true;
- EditorGUILayout.BeginHorizontal();
- GUILayout.Space(EditorGUIUtility.labelWidth);
- GUIContent camcontrolbuttonreset = new GUIContent("Reset to Default", "Reset camera controls to default.");
- if (GUILayout.Button(camcontrolbuttonreset))
- {
- if (Application.isPlaying && manager.zedCamera.IsCameraReady)
- {
- manager.zedCamera.ResetCameraSettings();
- LoadCurrentVideoSettings();
- }
- else
- {
- brightnessProperty.intValue = sl.ZEDCamera.brightnessDefault;
- contrastProperty.intValue = sl.ZEDCamera.contrastDefault;
- hueProperty.intValue = sl.ZEDCamera.hueDefault;
- saturationProperty.intValue = sl.ZEDCamera.saturationDefault;
- autoGainExposureProperty.boolValue = true;
- autoWhiteBalanceProperty.boolValue = true;
- sharpnessProperty.intValue = sl.ZEDCamera.sharpnessDefault;
- gammaProperty.intValue = sl.ZEDCamera.gammaDefault;
- ledStatus.boolValue = true;
- }
- }
- EditorGUILayout.EndHorizontal();
- GUI.enabled = true;
- }
- serializedObject.ApplyModifiedProperties();
- ///////////////////////////////////////////////////////////////
- /// Status layout //////////////////////////////////////////
- /////////////////////////////////////////////////////////////
- serializedObject.ApplyModifiedProperties();
- GUIStyle standardStyle = new GUIStyle(EditorStyles.textField);
- GUIStyle errorStyle = new GUIStyle(EditorStyles.textField);
- errorStyle.normal.textColor = Color.red;
- GUILayout.Space(10);
- EditorGUILayout.LabelField("Status", EditorStyles.boldLabel);
- EditorGUI.BeginDisabledGroup(true);
- EditorGUI.indentLevel++;
- GUILayout.Space(5);
- GUIContent cameraModellabel = new GUIContent("Camera Model:", "Model of the targeted camera.");
- EditorGUILayout.TextField(cameraModellabel, manager.cameraModel);
- GUIContent cameraSerialNumberlabel = new GUIContent("Camera S/N:", "Serial number of the targeted camera.");
- EditorGUILayout.TextField(cameraSerialNumberlabel, manager.cameraSerialNumber);
- GUIContent cameraFWlabel = new GUIContent("Camera Firmware:", "Firmware of the targeted camera.");
- EditorGUILayout.TextField(cameraFWlabel, manager.cameraFirmware);
- GUIContent sdkversionlabel = new GUIContent("SDK Version:", "Version of the installed ZED SDK.");
- EditorGUILayout.TextField(sdkversionlabel, manager.versionZED);
- GUIContent enginefpslabel = new GUIContent("Engine FPS:", "How many frames per second the engine is rendering.");
- EditorGUILayout.TextField(enginefpslabel, manager.engineFPS);
- GUIContent camerafpslabel = new GUIContent("Camera FPS:", "How many images per second are received from the ZED.");
- EditorGUILayout.TextField(camerafpslabel, manager.cameraFPS);
- GUIContent trackingstatelabel = new GUIContent("Tracking State:", "Whether the ZED's tracking is on, off, or searching (lost position, trying to recover).");
- if (manager.IsCameraTracked || !manager.IsZEDReady)
- EditorGUILayout.TextField(trackingstatelabel, manager.trackingState, standardStyle);
- else
- EditorGUILayout.TextField(trackingstatelabel, manager.trackingState, errorStyle);
- GUIContent odfpslabel = new GUIContent("Obj Detection FPS:", "How many images per second are used for OD");
- EditorGUILayout.TextField(odfpslabel, manager.objectDetectionFPS);
- EditorGUI.indentLevel--;
- EditorGUI.EndDisabledGroup();
- }
- /// <summary>
- /// Check if something has changed that requires restarting the camera.
- /// Used to know if the Restart Camera button and a prompt to press it should be visible.
- /// </summary>
- /// <returns>True if a setting was changed that won't go into effect until a restart. </returns>
- private bool CheckChange()
- {
- if (resolution != manager.resolution ||
- depthmode != manager.depthMode)
- {
- return true;
- }
- else return false;
- }
- /// <summary>
- /// If the given layer name is equal to the provided string, it clears it.
- /// Used when a ZED layer is moved to a different layer.
- /// </summary>
- /// <param name="layer"></param>
- /// <param name="constname"></param>
- private void ClearLayerNameIfNeeded(int layer, string constname)
- {
- if (layer < 0 || layer > 31) return; //Invalid ID.
- SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
- SerializedProperty layerNames = tagManager.FindProperty("layers");
- if (layerNames.GetArrayElementAtIndex(layer).stringValue == constname)
- {
- layerNames.GetArrayElementAtIndex(layer).stringValue = "";
- tagManager.ApplyModifiedProperties();
- }
- }
- /// <summary>
- /// Loads all current camera video settings from the ZED SDK into the buffer values (brightness, contrast, etc.)
- /// </summary>
- private void LoadCurrentVideoSettings()
- {
- brightnessProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.BRIGHTNESS);
- contrastProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.CONTRAST);
- hueProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.HUE);
- saturationProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.SATURATION);
- sharpnessProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.SHARPNESS);
- gammaProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.GAMMA);
- gainProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.GAIN);
- exposureProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.EXPOSURE);
- whitebalanceProperty.intValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.WHITEBALANCE);
- autoGainExposureProperty.boolValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.AEC_AGC) == 1 ? true : false;
- autoWhiteBalanceProperty.boolValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.AUTO_WHITEBALANCE) == 1 ? true : false;
- ledStatus.boolValue = manager.zedCamera.GetCameraSettings(sl.CAMERA_SETTINGS.LED_STATUS) == 1 ? true : false;
- }
- }
|