PXR_ManagerEditor.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. /*******************************************************************************
  2. Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
  3. NOTICE:All information contained herein is, and remains the property of
  4. PICO Technology Co., Ltd. The intellectual and technical concepts
  5. contained herein are proprietary to PICO Technology Co., Ltd. and may be
  6. covered by patents, patents in process, and are protected by trade secret or
  7. copyright law. Dissemination of this information or reproduction of this
  8. material is strictly forbidden unless prior written permission is obtained from
  9. PICO Technology Co., Ltd.
  10. *******************************************************************************/
  11. using System;
  12. using System.Collections.Generic;
  13. using System.IO;
  14. using System.Linq;
  15. using System.Xml;
  16. using Unity.XR.PXR;
  17. using UnityEditor;
  18. using UnityEngine;
  19. using UnityEngine.Rendering;
  20. namespace Unity.XR.PXR.Editor
  21. {
  22. [CustomEditor(typeof(PXR_Manager))]
  23. public class PXR_ManagerEditor : UnityEditor.Editor
  24. {
  25. public override void OnInspectorGUI()
  26. {
  27. GUI.changed = false;
  28. DrawDefaultInspector();
  29. PXR_Manager manager = (PXR_Manager)target;
  30. PXR_ProjectSetting projectConfig = PXR_ProjectSetting.GetProjectConfig();
  31. //Screen Fade
  32. manager.screenFade = EditorGUILayout.Toggle("Open Screen Fade", manager.screenFade);
  33. if (Camera.main != null)
  34. {
  35. var head = Camera.main.transform;
  36. if (head)
  37. {
  38. var fade = head.GetComponent<PXR_ScreenFade>();
  39. if (manager.screenFade)
  40. {
  41. if (!fade)
  42. {
  43. head.gameObject.AddComponent<PXR_ScreenFade>();
  44. Selection.activeObject = head;
  45. }
  46. }
  47. else
  48. {
  49. if (fade) DestroyImmediate(fade);
  50. }
  51. }
  52. }
  53. //ffr
  54. manager.foveatedRenderingMode = (FoveatedRenderingMode)EditorGUILayout.EnumPopup("Foveated Rendering Mode", manager.foveatedRenderingMode);
  55. if (FoveatedRenderingMode.FixedFoveatedRendering == manager.foveatedRenderingMode)
  56. {
  57. projectConfig.enableETFR = false;
  58. manager.foveationLevel = (FoveationLevel)EditorGUILayout.EnumPopup("Foveated Rendering Level", manager.foveationLevel);
  59. if (FoveationLevel.None != manager.foveationLevel)
  60. {
  61. projectConfig.enableSubsampled = EditorGUILayout.Toggle(" Subsampling", projectConfig.enableSubsampled);
  62. }
  63. }
  64. else if (FoveatedRenderingMode.EyeTrackedFoveatedRendering == manager.foveatedRenderingMode) //etfr
  65. {
  66. projectConfig.enableETFR = true;
  67. manager.eyeFoveationLevel = (FoveationLevel)EditorGUILayout.EnumPopup("Foveated Rendering Level", manager.eyeFoveationLevel);
  68. if (FoveationLevel.None != manager.eyeFoveationLevel)
  69. {
  70. projectConfig.enableSubsampled = EditorGUILayout.Toggle(" Subsampling", projectConfig.enableSubsampled);
  71. }
  72. }
  73. //eye tracking
  74. GUIStyle firstLevelStyle = new GUIStyle(GUI.skin.label);
  75. firstLevelStyle.alignment = TextAnchor.UpperLeft;
  76. firstLevelStyle.fontStyle = FontStyle.Bold;
  77. firstLevelStyle.fontSize = 12;
  78. firstLevelStyle.wordWrap = true;
  79. var guiContent = new GUIContent();
  80. guiContent.text = "Eye Tracking";
  81. guiContent.tooltip = "Before calling EyeTracking API, enable this option first, only for Neo3 Pro Eye , PICO 4 Pro device.";
  82. projectConfig.eyeTracking = EditorGUILayout.Toggle(guiContent, projectConfig.eyeTracking);
  83. manager.eyeTracking = projectConfig.eyeTracking;
  84. if (manager.eyeTracking || FoveatedRenderingMode.EyeTrackedFoveatedRendering == manager.foveatedRenderingMode)
  85. {
  86. projectConfig.eyetrackingCalibration = EditorGUILayout.Toggle(new GUIContent("Eye Tracking Calibration"), projectConfig.eyetrackingCalibration);
  87. EditorGUILayout.BeginVertical("box");
  88. EditorGUILayout.LabelField("Note:", firstLevelStyle);
  89. EditorGUILayout.LabelField("Eye Tracking is supported only on Neo 3 Pro Eye , PICO 4 Pro");
  90. EditorGUILayout.EndVertical();
  91. }
  92. //face tracking
  93. var FaceContent = new GUIContent();
  94. FaceContent.text = "Face Tracking Mode";
  95. manager.trackingMode = (FaceTrackingMode)EditorGUILayout.EnumPopup(FaceContent, manager.trackingMode);
  96. if (manager.trackingMode == FaceTrackingMode.None)
  97. {
  98. projectConfig.faceTracking = false;
  99. projectConfig.lipsyncTracking = false;
  100. }
  101. else if (manager.trackingMode == FaceTrackingMode.Hybrid)
  102. {
  103. projectConfig.faceTracking = true;
  104. projectConfig.lipsyncTracking = true;
  105. }
  106. else if (manager.trackingMode == FaceTrackingMode.FaceOnly)
  107. {
  108. projectConfig.faceTracking = true;
  109. projectConfig.lipsyncTracking = false;
  110. }
  111. else if (manager.trackingMode == FaceTrackingMode.LipsyncOnly)
  112. {
  113. projectConfig.faceTracking = false;
  114. projectConfig.lipsyncTracking = true;
  115. }
  116. manager.faceTracking = projectConfig.faceTracking;
  117. manager.lipsyncTracking = projectConfig.lipsyncTracking;
  118. //hand tracking
  119. var handContent = new GUIContent();
  120. handContent.text = "Hand Tracking";
  121. projectConfig.handTracking = EditorGUILayout.Toggle(handContent, projectConfig.handTracking);
  122. //body tracking
  123. var bodyContent = new GUIContent();
  124. bodyContent.text = "Body Tracking";
  125. projectConfig.bodyTracking = EditorGUILayout.Toggle(bodyContent, projectConfig.bodyTracking);
  126. manager.bodyTracking = projectConfig.bodyTracking;
  127. // content protect
  128. projectConfig.useContentProtect = EditorGUILayout.Toggle("Use Content Protect", projectConfig.useContentProtect);
  129. //MRC
  130. var mrcContent = new GUIContent();
  131. mrcContent.text = "MRC";
  132. projectConfig.openMRC = EditorGUILayout.Toggle(mrcContent, projectConfig.openMRC);
  133. manager.openMRC = projectConfig.openMRC;
  134. if (manager.openMRC == true)
  135. {
  136. EditorGUILayout.BeginVertical("frameBox");
  137. string[] layerNames = new string[32];
  138. for (int i = 0; i < 32; i++)
  139. {
  140. layerNames[i] = LayerMask.LayerToName(i);
  141. if (layerNames[i].Length == 0)
  142. {
  143. layerNames[i] = "LayerName " + i.ToString();
  144. }
  145. }
  146. manager.foregroundLayerMask = EditorGUILayout.MaskField("foreground Layer Masks", manager.foregroundLayerMask, layerNames);
  147. manager.backLayerMask = EditorGUILayout.MaskField("back Layer Masks", manager.backLayerMask, layerNames);
  148. EditorGUILayout.EndVertical();
  149. }
  150. //Late Latching
  151. projectConfig.latelatching = EditorGUILayout.Toggle("Use Late Latching", projectConfig.latelatching);
  152. manager.lateLatching = projectConfig.latelatching;
  153. if (manager.lateLatching)
  154. {
  155. projectConfig.latelatchingDebug = EditorGUILayout.Toggle(" Late Latching Debug", projectConfig.latelatchingDebug);
  156. manager.latelatchingDebug = projectConfig.latelatchingDebug;
  157. }
  158. if (Camera.main != null)
  159. {
  160. var head = Camera.main.transform;
  161. if (head)
  162. {
  163. var fade = head.GetComponent<PXR_LateLatching>();
  164. if (manager.lateLatching)
  165. {
  166. if (!fade)
  167. {
  168. head.gameObject.AddComponent<PXR_LateLatching>();
  169. Selection.activeObject = head;
  170. }
  171. }
  172. else
  173. {
  174. if (fade) DestroyImmediate(fade);
  175. }
  176. }
  177. }
  178. // msaa
  179. if (QualitySettings.renderPipeline != null)
  180. {
  181. EditorGUI.BeginDisabledGroup(true);
  182. manager.useRecommendedAntiAliasingLevel = EditorGUILayout.Toggle("Use Recommended MSAA", manager.useRecommendedAntiAliasingLevel);
  183. EditorGUI.EndDisabledGroup();
  184. EditorGUILayout.HelpBox("A Scriptable Render Pipeline is in use,the 'Use Recommended MSAA' will not be used. ", MessageType.Info, true);
  185. }
  186. else
  187. {
  188. manager.useRecommendedAntiAliasingLevel = EditorGUILayout.Toggle("Use Recommended MSAA", manager.useRecommendedAntiAliasingLevel);
  189. }
  190. //Adaptive Resolution
  191. guiContent = new GUIContent();
  192. guiContent.text = "Adaptive Resolution";
  193. guiContent.tooltip = "Adaptively change resolution based on GPU performance using renderViewportScale. Render buffer will be allocated to max adaptive resolution scale size. Currently, FFR should be disabled with this feature.";
  194. projectConfig.adaptiveResolution = EditorGUILayout.Toggle(guiContent, projectConfig.adaptiveResolution);
  195. manager.adaptiveResolution = projectConfig.adaptiveResolution;
  196. if (manager.adaptiveResolution)
  197. {
  198. EditorGUILayout.LabelField("Min Adaptive Resolution Scale:");
  199. manager.minEyeTextureScale = EditorGUILayout.Slider(manager.minEyeTextureScale, 0.7f, 1.3f);
  200. EditorGUILayout.LabelField("Max Adaptive Resolution Scale:");
  201. manager.maxEyeTextureScale = EditorGUILayout.Slider(manager.maxEyeTextureScale, 0.7f, 1.3f);
  202. manager.adaptiveResolutionPowerSetting = (AdaptiveResolutionPowerSetting)EditorGUILayout.EnumPopup(" Power Setting", manager.adaptiveResolutionPowerSetting);
  203. }
  204. projectConfig.stageMode = EditorGUILayout.Toggle("Stage Mode", projectConfig.stageMode);
  205. //mr
  206. if (projectConfig.spatialAnchor)
  207. {
  208. using (new EditorGUI.DisabledGroupScope(true))
  209. {
  210. projectConfig.videoSeeThrough = true;
  211. EditorGUILayout.Toggle("Video Seethrough", projectConfig.videoSeeThrough);
  212. }
  213. }
  214. else
  215. {
  216. projectConfig.videoSeeThrough = EditorGUILayout.Toggle("Video Seethrough", projectConfig.videoSeeThrough);
  217. }
  218. projectConfig.spatialAnchor = EditorGUILayout.Toggle("Anchor", projectConfig.spatialAnchor);
  219. //Super Resolution
  220. var superresolutionContent = new GUIContent();
  221. superresolutionContent.text = "Super Resolution";
  222. superresolutionContent.tooltip = "Single pass spatial aware upscaling technique.\n\nThis can't be used with Sharpening. \nAlso can't be used along with subsample feature due to unsupported texture format. \n\nThis effect won't work properly under low resolutions when Adaptive Resolution is also enabled.";
  223. projectConfig.superResolution = EditorGUILayout.Toggle(superresolutionContent, projectConfig.superResolution);
  224. manager.enableSuperResolution = projectConfig.superResolution;
  225. //Sharpening
  226. var sharpeningContent = new GUIContent();
  227. sharpeningContent.text = "Sharpening Mode";
  228. sharpeningContent.tooltip = "Normal: Normal Quality \n\nQuality: Higher Quality, higher GPU usage\n\nThis effect won't work properly under low resolutions when Adaptive Resolution is also enabled.\n\nThis can't be used with Super Resolution. It will be automatically disabled when you enable Super Resolution. \nAlso can't be used along with subsample feature due to unsupported texture format";
  229. var sharpeningEnhanceContent = new GUIContent();
  230. sharpeningEnhanceContent.text = "Sharpening Enhance Mode";
  231. sharpeningEnhanceContent.tooltip = "None: Full screen will be sharpened\n\nFixed Foveated: Only the central fixation point will be sharpened\n\nSelf Adaptive: Only when contrast between the current pixel and the surrounding pixels exceeds a certain threshold will be sharpened.\n\nThis menu will be only enabled while Sharpening (either Normal or Quality) is enabled.";
  232. if (projectConfig.superResolution)
  233. {
  234. GUI.enabled = false;
  235. manager.sharpeningMode = SharpeningMode.None;
  236. manager.sharpeningEnhance = SharpeningEnhance.None;
  237. }
  238. else
  239. {
  240. GUI.enabled = true;
  241. }
  242. manager.sharpeningMode = (SharpeningMode)EditorGUILayout.EnumPopup(sharpeningContent, manager.sharpeningMode);
  243. if (manager.sharpeningMode == SharpeningMode.None)
  244. {
  245. manager.sharpeningEnhance = SharpeningEnhance.None;
  246. }
  247. else
  248. {
  249. manager.sharpeningEnhance = (SharpeningEnhance)EditorGUILayout.EnumPopup(sharpeningEnhanceContent, manager.sharpeningEnhance);
  250. }
  251. if (manager.sharpeningMode != SharpeningMode.None)
  252. {
  253. if (manager.sharpeningMode == SharpeningMode.Normal)
  254. {
  255. projectConfig.normalSharpening = true;
  256. projectConfig.qualitySharpening = false;
  257. }
  258. else
  259. {
  260. projectConfig.normalSharpening = false;
  261. projectConfig.qualitySharpening = true;
  262. }
  263. if (manager.sharpeningEnhance == SharpeningEnhance.Both)
  264. {
  265. projectConfig.fixedFoveatedSharpening = true;
  266. projectConfig.selfAdaptiveSharpening = true;
  267. }
  268. else if (manager.sharpeningEnhance == SharpeningEnhance.FixedFoveated)
  269. {
  270. projectConfig.fixedFoveatedSharpening = true;
  271. projectConfig.selfAdaptiveSharpening = false;
  272. }
  273. else if (manager.sharpeningEnhance == SharpeningEnhance.SelfAdaptive)
  274. {
  275. projectConfig.fixedFoveatedSharpening = false;
  276. projectConfig.selfAdaptiveSharpening = true;
  277. }
  278. else
  279. {
  280. projectConfig.fixedFoveatedSharpening = false;
  281. projectConfig.selfAdaptiveSharpening = false;
  282. }
  283. }
  284. else
  285. {
  286. projectConfig.normalSharpening = false;
  287. projectConfig.qualitySharpening = false;
  288. projectConfig.fixedFoveatedSharpening = false;
  289. projectConfig.selfAdaptiveSharpening = false;
  290. }
  291. if (GUI.changed)
  292. {
  293. EditorUtility.SetDirty(projectConfig);
  294. EditorUtility.SetDirty(manager);
  295. }
  296. serializedObject.ApplyModifiedProperties();
  297. }
  298. }
  299. }
粤ICP备19079148号