EnviroFlatCloudsModule.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. namespace Enviro
  6. {
  7. [Serializable]
  8. public class EnviroFlatClouds
  9. {
  10. // Cirrus
  11. public bool useCirrusClouds = true;
  12. public Texture2D cirrusCloudsTex;
  13. [Range(0f,1f)]
  14. public float cirrusCloudsAlpha;
  15. [Range(0f,2f)]
  16. public float cirrusCloudsColorPower;
  17. [Range(0f,1f)]
  18. public float cirrusCloudsCoverage;
  19. [GradientUsage(true)]
  20. public Gradient cirrusCloudsColor;
  21. // Flat Clouds
  22. public bool useFlatClouds = true;
  23. public Texture2D flatCloudsBaseTex;
  24. public Texture2D flatCloudsDetailTex;
  25. [GradientUsage(true)]
  26. public Gradient flatCloudsLightColor;
  27. [GradientUsage(true)]
  28. public Gradient flatCloudsAmbientColor;
  29. [Range(0f,2f)]
  30. public float flatCloudsLightIntensity = 1.0f;
  31. [Range(0f,2f)]
  32. public float flatCloudsAmbientIntensity = 1.0f;
  33. [Range(0f,2f)]
  34. public float flatCloudsAbsorbtion = 0.6f;
  35. [Range(0f,1f)]
  36. public float flatCloudsHGPhase = 0.6f;
  37. [Range(0f,2f)]
  38. public float flatCloudsCoverage = 1f;
  39. [Range(0f,2f)]
  40. public float flatCloudsDensity = 1f;
  41. public float flatCloudsAltitude = 10f;
  42. public bool flatCloudsTonemapping;
  43. public float flatCloudsBaseTiling = 4f;
  44. public float flatCloudsDetailTiling = 10f;
  45. }
  46. [Serializable]
  47. public class EnviroFlatCloudsModule : EnviroModule
  48. {
  49. public Enviro.EnviroFlatClouds settings;
  50. public EnviroFlatCloudsModule preset;
  51. public bool showCirrusCloudsControls;
  52. public bool show2DCloudsControls;
  53. // Update Method
  54. public override void UpdateModule ()
  55. {
  56. if(settings.useCirrusClouds)
  57. {
  58. Shader.SetGlobalFloat("_CirrusClouds",1f);
  59. if(settings.cirrusCloudsTex != null)
  60. Shader.SetGlobalTexture("_CirrusCloudMap",settings.cirrusCloudsTex);
  61. Shader.SetGlobalFloat("_CirrusCloudAlpha",settings.cirrusCloudsAlpha);
  62. Shader.SetGlobalFloat("_CirrusCloudCoverage",settings.cirrusCloudsCoverage);
  63. Shader.SetGlobalFloat("_CirrusCloudColorPower",settings.cirrusCloudsColorPower);
  64. Shader.SetGlobalColor("_CirrusCloudColor",settings.cirrusCloudsColor.Evaluate(EnviroManager.instance.solarTime));
  65. }
  66. else
  67. {
  68. Shader.SetGlobalFloat("_CirrusClouds",0f);
  69. }
  70. if(settings.useFlatClouds)
  71. {
  72. Shader.SetGlobalFloat("_FlatClouds",1f);
  73. if(settings.flatCloudsBaseTex != null)
  74. Shader.SetGlobalTexture("_FlatCloudsBaseTexture",settings.flatCloudsBaseTex);
  75. if(settings.flatCloudsDetailTex != null)
  76. Shader.SetGlobalTexture("_FlatCloudsDetailTexture",settings.flatCloudsDetailTex);
  77. //_FlatCloudsAnimation;
  78. Shader.SetGlobalColor("_FlatCloudsLightColor", settings.flatCloudsLightColor.Evaluate(EnviroManager.instance.solarTime));
  79. Shader.SetGlobalColor("_FlatCloudsAmbientColor", settings.flatCloudsAmbientColor.Evaluate(EnviroManager.instance.solarTime));
  80. Vector3 lightDirection = Vector3.forward;
  81. if(EnviroManager.instance.Objects.directionalLight != null)
  82. lightDirection = EnviroManager.instance.Objects.directionalLight.transform.forward;
  83. Shader.SetGlobalVector("_FlatCloudsLightDirection",lightDirection);
  84. Shader.SetGlobalVector("_FlatCloudsLightingParams",new Vector4(settings.flatCloudsLightIntensity * 10f, settings.flatCloudsAmbientIntensity, settings.flatCloudsAbsorbtion,settings.flatCloudsHGPhase));
  85. Shader.SetGlobalVector("_FlatCloudsParams",new Vector4(settings.flatCloudsCoverage, settings.flatCloudsDensity * 5f, settings.flatCloudsAltitude,0f));
  86. Shader.SetGlobalVector("_FlatCloudsTiling",new Vector4(settings.flatCloudsBaseTiling, settings.flatCloudsDetailTiling, 0f,0f));
  87. }
  88. else
  89. {
  90. Shader.SetGlobalFloat("_FlatClouds",0f);
  91. }
  92. }
  93. //Save and Load
  94. public void LoadModuleValues ()
  95. {
  96. if(preset != null)
  97. {
  98. settings = JsonUtility.FromJson<Enviro.EnviroFlatClouds>(JsonUtility.ToJson(preset.settings));
  99. }
  100. else
  101. {
  102. Debug.Log("Please assign a saved module to load from!");
  103. }
  104. }
  105. public void SaveModuleValues ()
  106. {
  107. #if UNITY_EDITOR
  108. EnviroFlatCloudsModule t = ScriptableObject.CreateInstance<EnviroFlatCloudsModule>();
  109. t.name = "Flat Clouds Preset";
  110. t.settings = JsonUtility.FromJson<Enviro.EnviroFlatClouds>(JsonUtility.ToJson(settings));
  111. string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/Enviro 3" + "/New " + t.name + ".asset");
  112. UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName);
  113. UnityEditor.AssetDatabase.SaveAssets();
  114. UnityEditor.AssetDatabase.Refresh();
  115. #endif
  116. }
  117. public void SaveModuleValues (EnviroFlatCloudsModule module)
  118. {
  119. module.settings = JsonUtility.FromJson<Enviro.EnviroFlatClouds>(JsonUtility.ToJson(settings));
  120. #if UNITY_EDITOR
  121. UnityEditor.EditorUtility.SetDirty(module);
  122. UnityEditor.AssetDatabase.SaveAssets();
  123. #endif
  124. }
  125. }
  126. }