EnviroCloudsModuleEditor.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. namespace Enviro
  6. {
  7. [CustomEditor(typeof(EnviroVolumetricCloudsModule))]
  8. public class EnviroCloudsModuleEditor : EnviroModuleEditor
  9. {
  10. private EnviroVolumetricCloudsModule myTarget;
  11. private SerializedProperty dualLayer,depthBlending,sunLightColorGradient,moonLightColorGradient, ambientColorGradient,ambientLighIntensity, windIntensity,cloudsWindDirectionX,cloudsWindDirectionY,cloudShadows, cloudShadowsIntensity,
  12. noise, detailNoise, curlTex, blueNoise, cloudsWorldScale, atmosphereColorSaturateDistance;
  13. //Properties Layer 1
  14. private SerializedProperty bottomCloudsHeightLayer1,topCloudsHeightLayer1,densityLayer1, coverageLayer1,worleyFreq1Layer1, worleyFreq2Layer1, dilateCoverageLayer1, dilateTypeLayer1,cloudsTypeModifierLayer1, locationOffsetLayer1,
  15. scatteringIntensityLayer1, silverLiningSpreadLayer1, powderIntensityLayer1,
  16. curlIntensityLayer1, lightStepModifierLayer1, lightAbsorbtionLayer1,baseNoiseUVLayer1, detailNoiseUVLayer1,
  17. baseErosionIntensityLayer1, detailErosionIntensityLayer1, multiScatteringALayer1, multiScatteringBLayer1,multiScatteringCLayer1,anvilBiasLayer1;
  18. //Properties Layer 2
  19. private SerializedProperty bottomCloudsHeightLayer2,topCloudsHeightLayer2,densityLayer2,coverageLayer2,worleyFreq1Layer2, worleyFreq2Layer2, dilateCoverageLayer2, dilateTypeLayer2,cloudsTypeModifierLayer2, locationOffsetLayer2,
  20. scatteringIntensityLayer2, silverLiningSpreadLayer2, powderIntensityLayer2,
  21. curlIntensityLayer2, lightStepModifierLayer2, lightAbsorbtionLayer2, baseNoiseUVLayer2, detailNoiseUVLayer2,
  22. baseErosionIntensityLayer2, detailErosionIntensityLayer2, multiScatteringALayer2, multiScatteringBLayer2,multiScatteringCLayer2, anvilBiasLayer2;
  23. //Properties Quality
  24. private SerializedProperty volumetricClouds, downsampling, stepsLayer1, stepsLayer2, blueNoiseIntensity, reprojectionBlendTime, lodDistance;
  25. //On Enable
  26. public override void OnEnable()
  27. {
  28. if(!target)
  29. return;
  30. myTarget = (EnviroVolumetricCloudsModule)target;
  31. serializedObj = new SerializedObject(myTarget);
  32. preset = serializedObj.FindProperty("preset");
  33. windIntensity = serializedObj.FindProperty("settingsLayer1.windIntensity");
  34. cloudsWindDirectionX = serializedObj.FindProperty("settingsLayer1.cloudsWindDirectionX");
  35. cloudsWindDirectionY = serializedObj.FindProperty("settingsLayer1.cloudsWindDirectionY");
  36. ambientColorGradient = serializedObj.FindProperty("settingsGlobal.ambientColorGradient");
  37. ambientLighIntensity = serializedObj.FindProperty("settingsGlobal.ambientLighIntensity");
  38. sunLightColorGradient = serializedObj.FindProperty("settingsGlobal.sunLightColorGradient");
  39. moonLightColorGradient = serializedObj.FindProperty("settingsGlobal.moonLightColorGradient");
  40. depthBlending = serializedObj.FindProperty("settingsGlobal.depthBlending");
  41. dualLayer = serializedObj.FindProperty("settingsGlobal.dualLayer");
  42. cloudShadows = serializedObj.FindProperty("settingsGlobal.cloudShadows");
  43. cloudShadowsIntensity = serializedObj.FindProperty("settingsGlobal.cloudShadowsIntensity");
  44. noise = serializedObj.FindProperty("settingsGlobal.noise");
  45. detailNoise = serializedObj.FindProperty("settingsGlobal.detailNoise");
  46. curlTex = serializedObj.FindProperty("settingsGlobal.curlTex");
  47. blueNoise = serializedObj.FindProperty("settingsGlobal.blueNoise");
  48. cloudsWorldScale = serializedObj.FindProperty("settingsGlobal.cloudsWorldScale");
  49. atmosphereColorSaturateDistance = serializedObj.FindProperty("settingsGlobal.atmosphereColorSaturateDistance");
  50. //Quality
  51. volumetricClouds = serializedObj.FindProperty("settingsQuality.volumetricClouds");
  52. downsampling = serializedObj.FindProperty("settingsQuality.downsampling");
  53. stepsLayer1 = serializedObj.FindProperty("settingsQuality.stepsLayer1");
  54. stepsLayer2 = serializedObj.FindProperty("settingsQuality.stepsLayer2");
  55. blueNoiseIntensity = serializedObj.FindProperty("settingsQuality.blueNoiseIntensity");
  56. reprojectionBlendTime = serializedObj.FindProperty("settingsQuality.reprojectionBlendTime");
  57. lodDistance = serializedObj.FindProperty("settingsQuality.lodDistance");
  58. //Layer 1
  59. bottomCloudsHeightLayer1 = serializedObj.FindProperty("settingsLayer1.bottomCloudsHeight");
  60. topCloudsHeightLayer1 = serializedObj.FindProperty("settingsLayer1.topCloudsHeight");
  61. coverageLayer1 = serializedObj.FindProperty("settingsLayer1.coverage");
  62. worleyFreq1Layer1 = serializedObj.FindProperty("settingsLayer1.worleyFreq1");
  63. worleyFreq2Layer1 = serializedObj.FindProperty("settingsLayer1.worleyFreq2");
  64. dilateCoverageLayer1 = serializedObj.FindProperty("settingsLayer1.dilateCoverage");
  65. dilateTypeLayer1 = serializedObj.FindProperty("settingsLayer1.dilateType");
  66. cloudsTypeModifierLayer1 = serializedObj.FindProperty("settingsLayer1.cloudsTypeModifier");
  67. locationOffsetLayer1 = serializedObj.FindProperty("settingsLayer1.locationOffset");
  68. densityLayer1 = serializedObj.FindProperty("settingsLayer1.density");
  69. scatteringIntensityLayer1 = serializedObj.FindProperty("settingsLayer1.scatteringIntensity");
  70. silverLiningSpreadLayer1 = serializedObj.FindProperty("settingsLayer1.silverLiningSpread");
  71. powderIntensityLayer1 = serializedObj.FindProperty("settingsLayer1.powderIntensity");
  72. curlIntensityLayer1 = serializedObj.FindProperty("settingsLayer1.curlIntensity");
  73. lightStepModifierLayer1 = serializedObj.FindProperty("settingsLayer1.lightStepModifier");
  74. lightAbsorbtionLayer1 = serializedObj.FindProperty("settingsLayer1.lightAbsorbtion");
  75. baseNoiseUVLayer1 = serializedObj.FindProperty("settingsLayer1.baseNoiseUV");
  76. detailNoiseUVLayer1 = serializedObj.FindProperty("settingsLayer1.detailNoiseUV");
  77. baseErosionIntensityLayer1 = serializedObj.FindProperty("settingsLayer1.baseErosionIntensity");
  78. detailErosionIntensityLayer1 = serializedObj.FindProperty("settingsLayer1.detailErosionIntensity");
  79. multiScatteringALayer1 = serializedObj.FindProperty("settingsLayer1.multiScatteringA");
  80. multiScatteringBLayer1 = serializedObj.FindProperty("settingsLayer1.multiScatteringB");
  81. multiScatteringCLayer1 = serializedObj.FindProperty("settingsLayer1.multiScatteringC");
  82. anvilBiasLayer1 = serializedObj.FindProperty("settingsLayer1.anvilBias");
  83. //Layer 2
  84. bottomCloudsHeightLayer2= serializedObj.FindProperty("settingsLayer2.bottomCloudsHeight");
  85. topCloudsHeightLayer2= serializedObj.FindProperty("settingsLayer2.topCloudsHeight");
  86. coverageLayer2 = serializedObj.FindProperty("settingsLayer2.coverage");
  87. worleyFreq1Layer2 = serializedObj.FindProperty("settingsLayer2.worleyFreq1");
  88. worleyFreq2Layer2 = serializedObj.FindProperty("settingsLayer2.worleyFreq2");
  89. dilateCoverageLayer2 = serializedObj.FindProperty("settingsLayer2.dilateCoverage");
  90. dilateTypeLayer2 = serializedObj.FindProperty("settingsLayer2.dilateType");
  91. cloudsTypeModifierLayer2 = serializedObj.FindProperty("settingsLayer2.cloudsTypeModifier");
  92. locationOffsetLayer2 = serializedObj.FindProperty("settingsLayer2.locationOffset");
  93. densityLayer2 = serializedObj.FindProperty("settingsLayer2.density");
  94. scatteringIntensityLayer2 = serializedObj.FindProperty("settingsLayer2.scatteringIntensity");
  95. silverLiningSpreadLayer2 = serializedObj.FindProperty("settingsLayer2.silverLiningSpread");
  96. powderIntensityLayer2 = serializedObj.FindProperty("settingsLayer2.powderIntensity");
  97. curlIntensityLayer2 = serializedObj.FindProperty("settingsLayer2.curlIntensity");
  98. lightStepModifierLayer2 = serializedObj.FindProperty("settingsLayer2.lightStepModifier");
  99. lightAbsorbtionLayer2 = serializedObj.FindProperty("settingsLayer2.lightAbsorbtion");
  100. baseNoiseUVLayer2 = serializedObj.FindProperty("settingsLayer2.baseNoiseUV");
  101. detailNoiseUVLayer2 = serializedObj.FindProperty("settingsLayer2.detailNoiseUV");
  102. baseErosionIntensityLayer2 = serializedObj.FindProperty("settingsLayer2.baseErosionIntensity");
  103. detailErosionIntensityLayer2 = serializedObj.FindProperty("settingsLayer2.detailErosionIntensity");
  104. multiScatteringALayer2 = serializedObj.FindProperty("settingsLayer2.multiScatteringA");
  105. multiScatteringBLayer2 = serializedObj.FindProperty("settingsLayer2.multiScatteringB");
  106. multiScatteringCLayer2 = serializedObj.FindProperty("settingsLayer2.multiScatteringC");
  107. anvilBiasLayer2 = serializedObj.FindProperty("settingsLayer2.anvilBias");
  108. }
  109. public override void OnInspectorGUI()
  110. {
  111. if(!target)
  112. return;
  113. base.OnInspectorGUI();
  114. GUI.backgroundColor = baseModuleColor;
  115. GUILayout.BeginVertical("",boxStyleModified);
  116. GUI.backgroundColor = Color.white;
  117. EditorGUILayout.BeginHorizontal();
  118. myTarget.showModuleInspector = GUILayout.Toggle(myTarget.showModuleInspector, "Volumetric Clouds", headerFoldout);
  119. GUILayout.FlexibleSpace();
  120. if(GUILayout.Button("x", EditorStyles.miniButtonRight,GUILayout.Width(18), GUILayout.Height(18)))
  121. {
  122. EnviroManager.instance.RemoveModule(EnviroManager.ModuleType.VolumetricClouds);
  123. DestroyImmediate(this);
  124. return;
  125. }
  126. EditorGUILayout.EndHorizontal();
  127. if(myTarget.showModuleInspector)
  128. {
  129. RenderDisableInputBox();
  130. serializedObj.UpdateIfRequiredOrScript ();
  131. EditorGUI.BeginChangeCheck();
  132. GUILayout.Space(10);
  133. GUI.backgroundColor = categoryModuleColor;
  134. GUILayout.BeginVertical("",boxStyleModified);
  135. GUI.backgroundColor = Color.white;
  136. myTarget.showGlobalControls = GUILayout.Toggle(myTarget.showGlobalControls, "Global Settings", headerFoldout);
  137. if(myTarget.showGlobalControls)
  138. {
  139. GUILayout.Space(5);
  140. GUILayout.Label("Quality", headerStyle);
  141. DisableInputStartQuality();
  142. EditorGUILayout.PropertyField(volumetricClouds);
  143. DisableInputEndQuality();
  144. EditorGUILayout.PropertyField(depthBlending);
  145. DisableInputStartQuality();
  146. GUILayout.Space(5);
  147. EditorGUILayout.PropertyField(downsampling);
  148. EditorGUILayout.PropertyField(dualLayer);
  149. GUILayout.Space(5);
  150. EditorGUILayout.PropertyField(stepsLayer1);
  151. EditorGUILayout.PropertyField(stepsLayer2);
  152. GUILayout.Space(5);
  153. EditorGUILayout.PropertyField(blueNoiseIntensity);
  154. EditorGUILayout.PropertyField(reprojectionBlendTime);
  155. GUILayout.Space(5);
  156. EditorGUILayout.PropertyField(lodDistance);
  157. DisableInputEndQuality();
  158. EditorGUILayout.PropertyField(cloudsWorldScale);
  159. GUILayout.Space(10);
  160. GUILayout.Label("Textures", headerStyle);
  161. EditorGUILayout.PropertyField(noise);
  162. EditorGUILayout.PropertyField(detailNoise);
  163. EditorGUILayout.PropertyField(curlTex);
  164. EditorGUILayout.PropertyField(blueNoise);
  165. GUILayout.Space(10);
  166. GUILayout.Label("Lighting", headerStyle);
  167. EditorGUILayout.PropertyField(sunLightColorGradient);
  168. EditorGUILayout.PropertyField(moonLightColorGradient);
  169. EditorGUILayout.PropertyField(ambientColorGradient);
  170. EditorGUILayout.PropertyField(ambientLighIntensity);
  171. EditorGUILayout.PropertyField(atmosphereColorSaturateDistance);
  172. GUILayout.Space(10);
  173. GUILayout.Label("Shadows", headerStyle);
  174. EditorGUILayout.PropertyField(cloudShadows);
  175. EditorGUILayout.PropertyField(cloudShadowsIntensity);
  176. }
  177. GUILayout.EndVertical();
  178. //Layer 1
  179. GUI.backgroundColor = categoryModuleColor;
  180. GUILayout.BeginVertical("",boxStyleModified);
  181. GUI.backgroundColor = Color.white;
  182. myTarget.showLayer1Controls = GUILayout.Toggle(myTarget.showLayer1Controls, "Settings: Layer 1", headerFoldout);
  183. if(myTarget.showLayer1Controls)
  184. {
  185. //Coverage
  186. GUILayout.BeginVertical("",boxStyleModified);
  187. myTarget.showCoverageControls = GUILayout.Toggle(myTarget.showCoverageControls, "Coverage", headerFoldout);
  188. if(myTarget.showCoverageControls)
  189. {
  190. EditorGUILayout.PropertyField(bottomCloudsHeightLayer1);
  191. EditorGUILayout.PropertyField(topCloudsHeightLayer1);
  192. GUILayout.Space(10);
  193. DisableInputStart();
  194. EditorGUILayout.PropertyField(coverageLayer1);
  195. DisableInputEnd();
  196. EditorGUILayout.PropertyField(worleyFreq1Layer1);
  197. EditorGUILayout.PropertyField(worleyFreq2Layer1);
  198. DisableInputStart();
  199. EditorGUILayout.PropertyField(dilateCoverageLayer1);
  200. EditorGUILayout.PropertyField(dilateTypeLayer1);
  201. EditorGUILayout.PropertyField(cloudsTypeModifierLayer1);
  202. EditorGUILayout.PropertyField(anvilBiasLayer1);
  203. DisableInputEnd();
  204. EditorGUILayout.PropertyField(locationOffsetLayer1);
  205. }
  206. GUILayout.EndVertical();
  207. //Lighting
  208. GUILayout.BeginVertical("",boxStyleModified);
  209. myTarget.showLightingControls = GUILayout.Toggle(myTarget.showLightingControls, "Lighting", headerFoldout);
  210. if(myTarget.showLightingControls)
  211. {
  212. DisableInputStart();
  213. EditorGUILayout.PropertyField(scatteringIntensityLayer1);
  214. EditorGUILayout.PropertyField(multiScatteringALayer1);
  215. EditorGUILayout.PropertyField(multiScatteringBLayer1);
  216. EditorGUILayout.PropertyField(multiScatteringCLayer1);
  217. GUILayout.Space(10);
  218. EditorGUILayout.PropertyField(silverLiningSpreadLayer1);
  219. EditorGUILayout.PropertyField(powderIntensityLayer1);
  220. GUILayout.Space(10);
  221. EditorGUILayout.PropertyField(lightAbsorbtionLayer1);
  222. DisableInputEnd();
  223. EditorGUILayout.PropertyField(lightStepModifierLayer1);
  224. }
  225. GUILayout.EndVertical();
  226. //Density
  227. GUILayout.BeginVertical("",boxStyleModified);
  228. myTarget.showDensityControls = GUILayout.Toggle(myTarget.showDensityControls, "Density", headerFoldout);
  229. if(myTarget.showDensityControls)
  230. {
  231. DisableInputStart();
  232. EditorGUILayout.PropertyField(densityLayer1);
  233. DisableInputEnd();
  234. EditorGUILayout.PropertyField(baseNoiseUVLayer1);
  235. EditorGUILayout.PropertyField(detailNoiseUVLayer1);
  236. DisableInputStart();
  237. EditorGUILayout.PropertyField(baseErosionIntensityLayer1);
  238. EditorGUILayout.PropertyField(detailErosionIntensityLayer1);
  239. EditorGUILayout.PropertyField(curlIntensityLayer1);
  240. DisableInputEnd();
  241. }
  242. GUILayout.EndVertical();
  243. //Wind
  244. GUILayout.BeginVertical("",boxStyleModified);
  245. myTarget.showWindControls = GUILayout.Toggle(myTarget.showWindControls, "Wind", headerFoldout);
  246. if(myTarget.showWindControls)
  247. {
  248. EditorGUILayout.PropertyField(windIntensity);
  249. EditorGUILayout.PropertyField(cloudsWindDirectionX);
  250. EditorGUILayout.PropertyField(cloudsWindDirectionY);
  251. }
  252. GUILayout.EndVertical();
  253. }
  254. GUILayout.EndVertical();
  255. //Layer 1 End
  256. if(myTarget.settingsGlobal.dualLayer) {
  257. //Layer 2
  258. GUI.backgroundColor = categoryModuleColor;
  259. GUILayout.BeginVertical("",boxStyleModified);
  260. GUI.backgroundColor = Color.white;
  261. myTarget.showLayer2Controls = GUILayout.Toggle(myTarget.showLayer2Controls, "Settings: Layer 2", headerFoldout);
  262. if(myTarget.showLayer2Controls)
  263. {
  264. //Coverage
  265. GUILayout.BeginVertical("",boxStyleModified);
  266. myTarget.showCoverageControls = GUILayout.Toggle(myTarget.showCoverageControls, "Coverage", headerFoldout);
  267. if(myTarget.showCoverageControls)
  268. {
  269. EditorGUILayout.PropertyField(bottomCloudsHeightLayer2);
  270. EditorGUILayout.PropertyField(topCloudsHeightLayer2);
  271. GUILayout.Space(10);
  272. DisableInputStart();
  273. EditorGUILayout.PropertyField(coverageLayer2);
  274. DisableInputEnd();
  275. EditorGUILayout.PropertyField(worleyFreq1Layer2);
  276. EditorGUILayout.PropertyField(worleyFreq2Layer2);
  277. DisableInputStart();
  278. EditorGUILayout.PropertyField(dilateCoverageLayer2);
  279. EditorGUILayout.PropertyField(dilateTypeLayer2);
  280. EditorGUILayout.PropertyField(cloudsTypeModifierLayer2);
  281. EditorGUILayout.PropertyField(anvilBiasLayer2);
  282. DisableInputEnd();
  283. EditorGUILayout.PropertyField(locationOffsetLayer2);
  284. }
  285. GUILayout.EndVertical();
  286. //Lighting
  287. GUILayout.BeginVertical("",boxStyleModified);
  288. myTarget.showLightingControls = GUILayout.Toggle(myTarget.showLightingControls, "Lighting", headerFoldout);
  289. if(myTarget.showLightingControls)
  290. {
  291. DisableInputStart();
  292. EditorGUILayout.PropertyField(scatteringIntensityLayer2);
  293. EditorGUILayout.PropertyField(multiScatteringALayer2);
  294. EditorGUILayout.PropertyField(multiScatteringBLayer2);
  295. EditorGUILayout.PropertyField(multiScatteringCLayer2);
  296. GUILayout.Space(10);
  297. EditorGUILayout.PropertyField(silverLiningSpreadLayer2);
  298. EditorGUILayout.PropertyField(powderIntensityLayer2);
  299. GUILayout.Space(10);
  300. EditorGUILayout.PropertyField(lightAbsorbtionLayer2);
  301. DisableInputEnd();
  302. EditorGUILayout.PropertyField(lightStepModifierLayer2);
  303. }
  304. GUILayout.EndVertical();
  305. //Density
  306. GUILayout.BeginVertical("",boxStyleModified);
  307. myTarget.showDensityControls = GUILayout.Toggle(myTarget.showDensityControls, "Density", headerFoldout);
  308. if(myTarget.showDensityControls)
  309. {
  310. DisableInputStart();
  311. EditorGUILayout.PropertyField(densityLayer2);
  312. DisableInputEnd();
  313. EditorGUILayout.PropertyField(baseNoiseUVLayer2);
  314. EditorGUILayout.PropertyField(detailNoiseUVLayer2);
  315. DisableInputStart();
  316. EditorGUILayout.PropertyField(baseErosionIntensityLayer2);
  317. EditorGUILayout.PropertyField(detailErosionIntensityLayer2);
  318. EditorGUILayout.PropertyField(curlIntensityLayer2);
  319. DisableInputEnd();
  320. }
  321. GUILayout.EndVertical();
  322. //Wind
  323. GUILayout.BeginVertical("",boxStyleModified);
  324. myTarget.showWindControls = GUILayout.Toggle(myTarget.showWindControls, "Wind", headerFoldout);
  325. if(myTarget.showWindControls)
  326. {
  327. EditorGUILayout.PropertyField(windIntensity);
  328. EditorGUILayout.PropertyField(cloudsWindDirectionX);
  329. EditorGUILayout.PropertyField(cloudsWindDirectionY);
  330. }
  331. GUILayout.EndVertical();
  332. }
  333. GUILayout.EndVertical();
  334. //Layer 2 End
  335. }
  336. /// Save Load
  337. GUI.backgroundColor = categoryModuleColor;
  338. GUILayout.BeginVertical("",boxStyleModified);
  339. GUI.backgroundColor = Color.white;
  340. myTarget.showSaveLoad = GUILayout.Toggle(myTarget.showSaveLoad, "Save/Load", headerFoldout);
  341. if(myTarget.showSaveLoad)
  342. {
  343. EditorGUILayout.PropertyField(preset);
  344. GUILayout.BeginHorizontal("",wrapStyle);
  345. if(myTarget.preset != null)
  346. {
  347. if(GUILayout.Button("Load"))
  348. {
  349. myTarget.LoadModuleValues();
  350. }
  351. if(GUILayout.Button("Save"))
  352. {
  353. myTarget.SaveModuleValues(myTarget.preset);
  354. }
  355. }
  356. if(GUILayout.Button("Save As New"))
  357. {
  358. myTarget.SaveModuleValues();
  359. }
  360. GUILayout.EndHorizontal();
  361. }
  362. GUILayout.EndVertical();
  363. /// Save Load End
  364. //Apply
  365. ApplyChanges ();
  366. }
  367. GUILayout.EndVertical();
  368. if(myTarget.showModuleInspector)
  369. GUILayout.Space(20);
  370. }
  371. }
  372. }