123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System;
- namespace Enviro
- {
- [Serializable]
- public class EnviroSky
- {
- public enum MoonMode
- {
- Realistic,
- Simple,
- Off
- }
- public MoonMode moonMode;
- //Front Colors
- [GradientUsage(true)]
- public Gradient frontColorGradient0,frontColorGradient1,frontColorGradient2,frontColorGradient3,frontColorGradient4,frontColorGradient5;
-
- //Back Colors
- [GradientUsage(true)]
- public Gradient backColorGradient0,backColorGradient1,backColorGradient2,backColorGradient3,backColorGradient4,backColorGradient5;
-
- //Other Colors
- [GradientUsage(true)]
- public Gradient sunDiscColorGradient, moonColorGradient, moonGlowColorGradient;
- //Textures
- public Cubemap starsTex;
- public Cubemap galaxyTex;
- public Texture2D sunTex;
- public Texture2D moonTex;
- public Texture2D moonGlowTex;
- //Distribution
- [Range(-0.1f,1f)]
- public float distribution0,distribution1,distribution2,distribution3;
-
- public AnimationCurve mieScatteringIntensityCurve ,moonGlowIntensityCurve, starIntensityCurve,galaxyIntensityCurve;
- public float intensity, sunScale, moonScale;
-
- [Range(-2f,2f)]
- public float moonPhase;
- public AnimationCurve skyExposureHDRP;
- }
-
- [Serializable]
- [ExecuteInEditMode]
- public class EnviroSkyModule : EnviroModule
- {
- public Enviro.EnviroSky Settings;
- public EnviroSkyModule preset;
- public bool showSkyControls;
- public bool showSkySunControls;
- public bool showSkyMoonControls;
- public bool showSkyStarsControls;
- #if ENVIRO_HDRP
- UnityEngine.Rendering.HighDefinition.VisualEnvironment visualEnvironment;
- UnityEngine.Rendering.HighDefinition.EnviroHDRPSky enviroHDRPSky;
- #endif
- public Material mySkyboxMat;
- public override void Enable()
- {
- #if !ENVIRO_HDRP
- SetupSkybox ();
- #endif
- }
- public override void Disable()
- {
- #if !ENVIRO_HDRP
- DestroyImmediate(mySkyboxMat);
- #endif
- }
- // Update Method
- public override void UpdateModule ()
- {
- #if !ENVIRO_HDRP
- if(mySkyboxMat == null)
- SetupSkybox ();
- UpdateSkybox (mySkyboxMat);
- #else
- UpdateHDRPSky ();
- #endif
- if(EnviroManager.instance.Time != null && Settings.moonMode == EnviroSky.MoonMode.Realistic)
- UpdateMoonPhase ();
- }
- public void SetupSkybox ()
- {
- if(mySkyboxMat == null)
- {
- mySkyboxMat = new Material (Shader.Find("Enviro/Skybox"));
- RenderSettings.skybox = mySkyboxMat;
- }
- else
- {
- RenderSettings.skybox = mySkyboxMat;
- }
- }
- public void UpdateSkybox (Material mat)
- {
- float solarTime = EnviroManager.instance.solarTime;
-
- Shader.SetGlobalColor("_FrontColor0",Settings.frontColorGradient0.Evaluate(solarTime));
- Shader.SetGlobalColor("_FrontColor1",Settings.frontColorGradient1.Evaluate(solarTime));
- Shader.SetGlobalColor("_FrontColor2",Settings.frontColorGradient2.Evaluate(solarTime));
- Shader.SetGlobalColor("_FrontColor3",Settings.frontColorGradient3.Evaluate(solarTime));
- Shader.SetGlobalColor("_FrontColor4",Settings.frontColorGradient4.Evaluate(solarTime));
- Shader.SetGlobalColor("_FrontColor5",Settings.frontColorGradient5.Evaluate(solarTime));
-
- Shader.SetGlobalColor("_BackColor0",Settings.backColorGradient0.Evaluate(solarTime));
- Shader.SetGlobalColor("_BackColor1",Settings.backColorGradient1.Evaluate(solarTime));
- Shader.SetGlobalColor("_BackColor2",Settings.backColorGradient2.Evaluate(solarTime));
- Shader.SetGlobalColor("_BackColor3",Settings.backColorGradient3.Evaluate(solarTime));
- Shader.SetGlobalColor("_BackColor4",Settings.backColorGradient4.Evaluate(solarTime));
- Shader.SetGlobalColor("_BackColor5",Settings.backColorGradient5.Evaluate(solarTime));
- Shader.SetGlobalColor("_SunColor",Settings.sunDiscColorGradient.Evaluate(solarTime));
- mat.SetColor("_MoonColor",Settings.moonColorGradient.Evaluate(solarTime));
- mat.SetColor("_MoonGlowColor",Settings.moonGlowColorGradient.Evaluate(solarTime));
- Shader.SetGlobalFloat("_Intensity", Settings.intensity);
- Shader.SetGlobalFloat("_MieScatteringIntensity", Settings.mieScatteringIntensityCurve.Evaluate(solarTime));
- mat.SetFloat("_MoonGlowIntensity", Settings.moonGlowIntensityCurve.Evaluate(solarTime));
- mat.SetFloat("_StarIntensity", Settings.starIntensityCurve.Evaluate(solarTime));
- mat.SetFloat("_GalaxyIntensity", Settings.galaxyIntensityCurve.Evaluate(solarTime));
-
- Shader.SetGlobalFloat("_frontBackDistribution0",Settings.distribution0);
- Shader.SetGlobalFloat("_frontBackDistribution1",Settings.distribution1);
- Shader.SetGlobalFloat("_frontBackDistribution2",Settings.distribution2);
- Shader.SetGlobalFloat("_frontBackDistribution3",Settings.distribution3);
- if(Settings.moonMode == EnviroSky.MoonMode.Off)
- mat.SetVector("_SkyMoonParameters", new Vector4(Settings.moonPhase,Settings.moonScale,Settings.moonScale,0f));
- else
- mat.SetVector("_SkyMoonParameters", new Vector4(Settings.moonPhase,Settings.moonScale,Settings.moonScale,1f));
- mat.SetVector("_SkySunParameters", new Vector4(Settings.sunScale,Settings.sunScale,Settings.sunScale,Settings.sunScale));
- if(Settings.starsTex != null)
- mat.SetTexture("_StarsTex",Settings.starsTex);
- if(Settings.galaxyTex != null)
- mat.SetTexture("_GalaxyTex",Settings.galaxyTex);
- if(Settings.sunTex != null)
- mat.SetTexture("_SunTex",Settings.sunTex);
- if(Settings.moonTex != null)
- mat.SetTexture("_MoonTex",Settings.moonTex);
- if(Settings.moonGlowTex != null)
- mat.SetTexture("_MoonGlowTex",Settings.moonGlowTex);
- Shader.SetGlobalVector("_SunDir",-EnviroManager.instance.Objects.sun.transform.forward);
- Shader.SetGlobalVector("_MoonDir",EnviroManager.instance.Objects.moon.transform.forward);
-
- //Deactivate flat and cirrus clouds when no flat clouds module found.
- if(EnviroManager.instance.FlatClouds == null)
- {
- Shader.SetGlobalFloat("_CirrusClouds",0f);
- Shader.SetGlobalFloat("_FlatClouds",0f);
- }
- //Deactivate auroira when no flat clouds module found.
- if(EnviroManager.instance.Aurora == null)
- {
- Shader.SetGlobalFloat("_Aurora",0f);
- }
- }
- private void UpdateMoonPhase ()
- {
- float angle = Vector3.SignedAngle(EnviroManager.instance.Objects.moon.transform.forward, EnviroManager.instance.Objects.sun.transform.forward, -EnviroManager.instance.transform.forward);
-
- if (EnviroManager.instance.Time.Settings.latitude >= 0)
- {
- if (angle < 0)
- {
- Settings.moonPhase = EnviroHelper.Remap(angle, 0f, -180f, -2f, 0f);
- }
- else
- {
- Settings.moonPhase = EnviroHelper.Remap(angle, 0f, 180f, 2f, 0f);
- }
- }
- else
- {
- if (angle < 0)
- {
- Settings.moonPhase = EnviroHelper.Remap(angle, 0f, -180f, 2f, 0f);
- }
- else
- {
- Settings.moonPhase = EnviroHelper.Remap(angle, 0f, 180f, -2f, 0f);
- }
- }
- }
- #if ENVIRO_HDRP
- public void UpdateHDRPSky ()
- {
- if(EnviroManager.instance.volumeHDRP != null)
- {
- if(visualEnvironment == null)
- {
- UnityEngine.Rendering.HighDefinition.VisualEnvironment TempEnv;
- if (EnviroManager.instance.volumeHDRP.sharedProfile != null && EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.VisualEnvironment>(out TempEnv))
- {
- visualEnvironment = TempEnv;
- }
- else
- {
- EnviroManager.instance.volumeHDRP.sharedProfile.Add<UnityEngine.Rendering.HighDefinition.VisualEnvironment>();
- if (EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.VisualEnvironment>(out TempEnv))
- {
- visualEnvironment = TempEnv;
- }
- }
- }
- else
- {
- visualEnvironment.skyType.value = 990;
- visualEnvironment.skyType.overrideState = true;
- visualEnvironment.skyAmbientMode.value = UnityEngine.Rendering.HighDefinition.SkyAmbientMode.Dynamic;
- visualEnvironment.skyAmbientMode.overrideState = true;
- }
- if(enviroHDRPSky == null)
- {
- UnityEngine.Rendering.HighDefinition.EnviroHDRPSky TempSky;
- if (EnviroManager.instance.volumeHDRP.sharedProfile != null && EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.EnviroHDRPSky>(out TempSky))
- {
- enviroHDRPSky = TempSky;
- }
- else
- {
- EnviroManager.instance.volumeHDRP.sharedProfile.Add<UnityEngine.Rendering.HighDefinition.EnviroHDRPSky>();
- if (EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.EnviroHDRPSky>(out TempSky))
- {
- enviroHDRPSky = TempSky;
- }
- }
- }
- else
- {
- enviroHDRPSky.skyIntensityMode.overrideState = true;
- enviroHDRPSky.skyIntensityMode.value = UnityEngine.Rendering.HighDefinition.SkyIntensityMode.Exposure;
- enviroHDRPSky.exposure.overrideState = true;
- enviroHDRPSky.exposure.value = Settings.skyExposureHDRP.Evaluate(EnviroManager.instance.solarTime);
- }
- }
- }
- #endif
- //Save and Load
- public void LoadModuleValues ()
- {
- if(preset != null)
- {
- Settings = JsonUtility.FromJson<Enviro.EnviroSky>(JsonUtility.ToJson(preset.Settings));
- }
- else
- {
- Debug.Log("Please assign a saved module to load from!");
- }
- }
- public void SaveModuleValues ()
- {
- #if UNITY_EDITOR
- EnviroSkyModule t = ScriptableObject.CreateInstance<EnviroSkyModule>();
- t.name = "Sky Module";
- t.Settings = JsonUtility.FromJson<Enviro.EnviroSky>(JsonUtility.ToJson(Settings));
- string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/Enviro 3" + "/New " + t.name + ".asset");
- UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName);
- UnityEditor.AssetDatabase.SaveAssets();
- UnityEditor.AssetDatabase.Refresh();
- #endif
- }
- public void SaveModuleValues (EnviroSkyModule module)
- {
- module.Settings = JsonUtility.FromJson<Enviro.EnviroSky>(JsonUtility.ToJson(Settings));
- #if UNITY_EDITOR
- UnityEditor.EditorUtility.SetDirty(module);
- UnityEditor.AssetDatabase.SaveAssets();
- #endif
- }
- }
- }
|