/* Sky based on paper of A. J. Preetham * https://www.cs.utah.edu/~shirley/papers/sunsky/sunsky.pdf * * and * * Ralf Stokholm Nielsen * http://etd.dtu.dk/thesis/58645/imm2554.pdf */ using UnityEngine; using System.Collections; using System.Collections.Generic; [AddComponentMenu("azure[Sky]/Sky Controller")] [ExecuteInEditMode] public class AzureSky_Controller : MonoBehaviour { ///////////////////////////////////////////////////////////////////////////////////////////////////////// //=========================================begins VARIABLES============================================== ///////////////////////////////////////////////////////////////////////////////////////////////////////// //Used in the Editor Script only. public bool showTimeOfDay = true; public bool showObj_and_Mat = false; public bool showScattering = false; public bool showSkySettings = false; public bool showFogSettings = false; public bool showCloudSettings = false; public bool showAmbient = false; public bool showLighting = false; public bool showTextures = false; public bool showOptions = false; public bool showOutput = false; //------------------------------------------------------------------------------------------------------- //========================================Time of Day Tab================================================ //------------------------------------------------------------------------------------------------------- public int DAY_of_WEEK = 0; public int NUMBER_of_DAYS = 7; public float TIME_of_DAY = 6.0f; public float TIME_of_DAY_by_CURVE = 6.0f; public int UTC = 0; public float Longitude = 0.0f; public float DAY_CYCLE = 3.0f; // In Minutes. public float PassTime = 0.0f; // public float azure_East = 0.0f; private Vector3 sun_v3 = Vector3.zero; // For the Sun Rotation public bool SetTime_By_Curve = false; public AnimationCurve DayNightLengthCurve = AnimationCurve.Linear(0,0,24,24); //------------------------------------------------------------------------------------------------------- //=======================================Game Objects Tab================================================ //------------------------------------------------------------------------------------------------------- public GameObject Sun_DirectionalLight; public GameObject Moon_DirectionalLight; public Material Sky_Material; public Material Fog_Material; public Material Moon_Material; public ReflectionProbe AzureReflectionProbe; public float Lightincrement = 0; //------------------------------------------------------------------------------------------------------- //=================================For Scattering Tab and Equations====================================== //------------------------------------------------------------------------------------------------------- public float RayCoeff = 1.5f; // Rayleigh coefficient. public float MieCoeff = 1.0f; // Mie coefficient. public float Turbidity = 1.0f; public float g = 0.75f; // Directionality factor. public float SkyCoeff = 2000.0f; public float SunIntensity = 100.0f; // Intensity of the sunlight in the sky. public float MoonIntensity = 0.25f; // Intensity of the moonlight in the sky. public float Kr = 8.4f; public float Km = 1.25f; public float Altitude = 0.05f; public List LambdaCurveR = new List() { AnimationCurve.Linear(0,650.0f,24,650.0f), AnimationCurve.Linear(0,650.0f,24,650.0f), AnimationCurve.Linear(0,650.0f,24,650.0f), AnimationCurve.Linear(0,650.0f,24,650.0f), AnimationCurve.Linear(0,650.0f,24,650.0f), AnimationCurve.Linear(0,650.0f,24,650.0f), AnimationCurve.Linear(0,650.0f,24,650.0f) }; public List LambdaCurveG = new List() { AnimationCurve.Linear(0,570.0f,24,570.0f), AnimationCurve.Linear(0,570.0f,24,570.0f), AnimationCurve.Linear(0,570.0f,24,570.0f), AnimationCurve.Linear(0,570.0f,24,570.0f), AnimationCurve.Linear(0,570.0f,24,570.0f), AnimationCurve.Linear(0,570.0f,24,570.0f), AnimationCurve.Linear(0,570.0f,24,570.0f) }; public List LambdaCurveB = new List() { AnimationCurve.Linear(0,475.0f,24,475.0f), AnimationCurve.Linear(0,475.0f,24,475.0f), AnimationCurve.Linear(0,475.0f,24,475.0f), AnimationCurve.Linear(0,475.0f,24,475.0f), AnimationCurve.Linear(0,475.0f,24,475.0f), AnimationCurve.Linear(0,475.0f,24,475.0f), AnimationCurve.Linear(0,475.0f,24,475.0f) }; public List RayCoeffCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List MieCoeffCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List TurbidityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List gCurve = new List() { AnimationCurve.Linear(0,0.75f,24,0.75f), AnimationCurve.Linear(0,0.75f,24,0.75f), AnimationCurve.Linear(0,0.75f,24,0.75f), AnimationCurve.Linear(0,0.75f,24,0.75f), AnimationCurve.Linear(0,0.75f,24,0.75f), AnimationCurve.Linear(0,0.75f,24,0.75f), AnimationCurve.Linear(0,0.75f,24,0.75f) }; public List SkyCoeffCurve = new List() { AnimationCurve.Linear(0,2000.0f,24,2000.0f), AnimationCurve.Linear(0,2000.0f,24,2000.0f), AnimationCurve.Linear(0,2000.0f,24,2000.0f), AnimationCurve.Linear(0,2000.0f,24,2000.0f), AnimationCurve.Linear(0,2000.0f,24,2000.0f), AnimationCurve.Linear(0,2000.0f,24,2000.0f), AnimationCurve.Linear(0,2000.0f,24,2000.0f) }; public List SunIntensityCurve = new List() { AnimationCurve.Linear(0,100.0f,24,100.0f), AnimationCurve.Linear(0,100.0f,24,100.0f), AnimationCurve.Linear(0,100.0f,24,100.0f), AnimationCurve.Linear(0,100.0f,24,100.0f), AnimationCurve.Linear(0,100.0f,24,100.0f), AnimationCurve.Linear(0,100.0f,24,100.0f), AnimationCurve.Linear(0,100.0f,24,100.0f) }; public List MoonIntensityCurve = new List() { AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f) }; public List KrCurve = new List() { AnimationCurve.Linear(0,8.4f,24,8.4f), AnimationCurve.Linear(0,8.4f,24,8.4f), AnimationCurve.Linear(0,8.4f,24,8.4f), AnimationCurve.Linear(0,8.4f,24,8.4f), AnimationCurve.Linear(0,8.4f,24,8.4f), AnimationCurve.Linear(0,8.4f,24,8.4f), AnimationCurve.Linear(0,8.4f,24,8.4f) }; public List KmCurve = new List() { AnimationCurve.Linear(0,1.25f,24,1.25f), AnimationCurve.Linear(0,1.25f,24,1.25f), AnimationCurve.Linear(0,1.25f,24,1.25f), AnimationCurve.Linear(0,1.25f,24,1.25f), AnimationCurve.Linear(0,1.25f,24,1.25f), AnimationCurve.Linear(0,1.25f,24,1.25f), AnimationCurve.Linear(0,1.25f,24,1.25f) }; public List AltitudeCurve = new List() { AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f) }; // Original value of lambda"(wavelength)" is Vector3(680e-9f, 550e-9f, 450e-9f). // Used integers for customization in the Inspector, will need... // ... convert to original scale before using in the equations, multiplying by 1.0e-9f. public Vector3 lambda = new Vector3(650.0f, 570.0f, 475.0f); private Vector3 K = new Vector3(686.0f, 678.0f, 666.0f); private const float n = 1.0003f; // Refractive index of air. private const float N = 2.545E25f; // Molecular density. private const float pn = 0.035f; // Depolatization factor for standard air. private const float pi = Mathf.PI; // 3.141592 //------------------------------------------------------------------------------------------------------- //=========================================Sky Settings Tab============================================== //------------------------------------------------------------------------------------------------------- public float SkyLuminance = 1.0f; public float SkyDarkness = 1.0f; public float SunsetPower = 3.5f; public float SunDiskSize = 250.0f; public float SunDiskIntensity = 3.0f; public float SunDiskPropagation = -1.5f; public float MoonSize = 5.0f; public float StarsIntensity = 5.0f; public float StarsExtinction = 0.5f; public float MoonColorPower = 2.15f; public float MoonExtinction = 0.5f; public float MilkyWayIntensity = 0.0f; public float MilkyWayPower = 2.5f; public float Exposure = 1.5f; public float NightSkyFarColorDistance = 0.5f; public float NightSkyFarColorPower = 0.25f; public List SkyLuminanceCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List SkyDarknessCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List SunsetPowerCurve = new List() { AnimationCurve.Linear(0,3.5f,24,3.5f), AnimationCurve.Linear(0,3.5f,24,3.5f), AnimationCurve.Linear(0,3.5f,24,3.5f), AnimationCurve.Linear(0,3.5f,24,3.5f), AnimationCurve.Linear(0,3.5f,24,3.5f), AnimationCurve.Linear(0,3.5f,24,3.5f), AnimationCurve.Linear(0,3.5f,24,3.5f) }; public List SunDiskSizeCurve = new List() { AnimationCurve.Linear(0,250.0f,24,250.0f), AnimationCurve.Linear(0,250.0f,24,250.0f), AnimationCurve.Linear(0,250.0f,24,250.0f), AnimationCurve.Linear(0,250.0f,24,250.0f), AnimationCurve.Linear(0,250.0f,24,250.0f), AnimationCurve.Linear(0,250.0f,24,250.0f), AnimationCurve.Linear(0,250.0f,24,250.0f) }; public List SunDiskIntensityCurve = new List() { AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f) }; public List SunDiskPropagationCurve = new List() { AnimationCurve.Linear(0,-1.5f,24,-1.5f), AnimationCurve.Linear(0,-1.5f,24,-1.5f), AnimationCurve.Linear(0,-1.5f,24,-1.5f), AnimationCurve.Linear(0,-1.5f,24,-1.5f), AnimationCurve.Linear(0,-1.5f,24,-1.5f), AnimationCurve.Linear(0,-1.5f,24,-1.5f), AnimationCurve.Linear(0,-1.5f,24,-1.5f) }; public List MoonSizeCurve = new List() { AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f) }; public List MoonColorPowerCurve = new List() { AnimationCurve.Linear(0,2.15f,24,2.15f), AnimationCurve.Linear(0,2.15f,24,2.15f), AnimationCurve.Linear(0,2.15f,24,2.15f), AnimationCurve.Linear(0,2.15f,24,2.15f), AnimationCurve.Linear(0,2.15f,24,2.15f), AnimationCurve.Linear(0,2.15f,24,2.15f), AnimationCurve.Linear(0,2.15f,24,2.15f) }; public List StarsIntensityCurve = new List() { AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f) }; public List StarsExtinctionCurve = new List() { AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f) }; public List MoonExtinctionCurve = new List() { AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f) }; public List MilkyWayIntensityCurve = new List() { AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f) }; public List MilkyWayPowerCurve = new List() { AnimationCurve.Linear(0,2.5f,24,2.5f), AnimationCurve.Linear(0,2.5f,24,2.5f), AnimationCurve.Linear(0,2.5f,24,2.5f), AnimationCurve.Linear(0,2.5f,24,2.5f), AnimationCurve.Linear(0,2.5f,24,2.5f), AnimationCurve.Linear(0,2.5f,24,2.5f), AnimationCurve.Linear(0,2.5f,24,2.5f) }; public List ExposureCurve = new List() { AnimationCurve.Linear(0,1.5f,24,1.5f), AnimationCurve.Linear(0,1.5f,24,1.5f), AnimationCurve.Linear(0,1.5f,24,1.5f), AnimationCurve.Linear(0,1.5f,24,1.5f), AnimationCurve.Linear(0,1.5f,24,1.5f), AnimationCurve.Linear(0,1.5f,24,1.5f), AnimationCurve.Linear(0,1.5f,24,1.5f) }; public List NightSkyFarColorDistanceCurve = new List() { AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f), AnimationCurve.Linear(0,0.5f,24,0.5f) }; public List NightSkyFarColorPowerCurve = new List() { AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f), AnimationCurve.Linear(0,0.25f,24,0.25f) }; // public List SunGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List SunsetGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List MoonGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List MoonBrightGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List NightGroundCloseGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List NightGroundFarGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public int MoonEclipseShadow = 0; public float Umbra = 0.95f; public float UmbraSize = 0.25f; public float Penumbra = 3.0f; public float PenumbraSize = 0.5f; public Color PenumbraColor = Color.red; public float StarsScintillation = 5.5f; private float scintRot = 0.0f; public Vector3 MilkyWayPos; private Matrix4x4 MilkyWayMatrix; private Matrix4x4 NoiseRot; //------------------------------------------------------------------------------------------------------- //==============================================Fog Tab================================================== //------------------------------------------------------------------------------------------------------- public bool LinearFog = true; public float ScatteringFogDistance = 3.0f; public float FogBlendPoint = 3.0f; public float NormalFogDistance = 10.0f; public float DenseFogIntensity = 0.0f; public float DenseFogAltitude = -0.8f; public bool UseUnityFog = false; public int UnityFogModeIndex = 1; public float UnityFogDensity = 1.0f; public float UnityFogStart = 0.0f; public float UnityFogEnd = 300.0f; public List NormalFogGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List GlobalFogGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List DenseFogGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List UnityFogGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List ScatteringFogDistanceCurve = new List() { AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f) }; public List FogBlendPointCurve = new List() { AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f) }; public List NormalFogDistanceCurve = new List() { AnimationCurve.Linear(0,10.0f,24,10.0f), AnimationCurve.Linear(0,10.0f,24,10.0f), AnimationCurve.Linear(0,10.0f,24,10.0f), AnimationCurve.Linear(0,10.0f,24,10.0f), AnimationCurve.Linear(0,10.0f,24,10.0f), AnimationCurve.Linear(0,10.0f,24,10.0f), AnimationCurve.Linear(0,10.0f,24,10.0f) }; public List DenseFogIntensityCurve = new List() { AnimationCurve.Linear(0,0.12f,24,0.12f), AnimationCurve.Linear(0,0.12f,24,0.12f), AnimationCurve.Linear(0,0.12f,24,0.12f), AnimationCurve.Linear(0,0.12f,24,0.12f), AnimationCurve.Linear(0,0.12f,24,0.12f), AnimationCurve.Linear(0,0.12f,24,0.12f), AnimationCurve.Linear(0,0.12f,24,0.12f) }; public List DenseFogAltitudeCurve = new List() { AnimationCurve.Linear(0,-0.8f,24,-0.8f), AnimationCurve.Linear(0,-0.8f,24,-0.8f), AnimationCurve.Linear(0,-0.8f,24,-0.8f), AnimationCurve.Linear(0,-0.8f,24,-0.8f), AnimationCurve.Linear(0,-0.8f,24,-0.8f), AnimationCurve.Linear(0,-0.8f,24,-0.8f), AnimationCurve.Linear(0,-0.8f,24,-0.8f) }; public List UnityFogDensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List UnityFogStartCurve = new List() { AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f) }; public List UnityFogEndCurve = new List() { AnimationCurve.Linear(0,300.0f,24,300.0f), AnimationCurve.Linear(0,300.0f,24,300.0f), AnimationCurve.Linear(0,300.0f,24,300.0f), AnimationCurve.Linear(0,300.0f,24,300.0f), AnimationCurve.Linear(0,300.0f,24,300.0f), AnimationCurve.Linear(0,300.0f,24,300.0f), AnimationCurve.Linear(0,300.0f,24,300.0f) }; //------------------------------------------------------------------------------------------------------- //============================================Cloud Tab================================================== //------------------------------------------------------------------------------------------------------- public int cloudModeIndex = 0; private Shader noCloudsShader; private Shader preRenderedShader; private Shader proceduralCloudShader; private float preRenderedCloudLongitude = 0.0f; public List EdgeColorGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List DarkColorGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public float CloudExtinction = 3.0f; public float AlphaSaturation = 2.0f; public float CloudDensity = 1.0f; public float MoonBrightIntensity = 3.0f; public float MoonBrightRange = 1.0f; public float PreRenderedCloudAltitude = 0.05f; public List PreRenderedCloudAltitudeCurve = new List() { AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f), AnimationCurve.Linear(0,0.05f,24,0.05f) }; public List CloudExtinctionCurve = new List() { AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f) }; public List AlphaSaturationCurve = new List() { AnimationCurve.Linear(0,2.0f,24,2.0f), AnimationCurve.Linear(0,2.0f,24,2.0f), AnimationCurve.Linear(0,2.0f,24,2.0f), AnimationCurve.Linear(0,2.0f,24,2.0f), AnimationCurve.Linear(0,2.0f,24,2.0f), AnimationCurve.Linear(0,2.0f,24,2.0f), AnimationCurve.Linear(0,2.0f,24,2.0f) }; public List CloudDensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List MoonBrightIntensityCurve = new List() { AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f), AnimationCurve.Linear(0,3.0f,24,3.0f) }; public List MoonBrightRangeCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; //Wispy Clouds public Texture2D WispyCloudTexture; public List WispyDarknessGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List WispyBrightGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List WispyColorGradientColor = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public float WispyCovarage = 0.0f; public float WispyCloudPosition = 0.0f; public float WispyCloudSpeed = 0.0f; public float WispyCloudDirection = 0.0f; public List WispyCovarageCurve = new List() { AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f), AnimationCurve.Linear(0,0.0f,24,0.0f) }; public List WispyCloudSpeedCurve = new List() { AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f), AnimationCurve.Linear(0,5.0f,24,5.0f) }; //------------------------------------------------------------------------------------------------------- //===========================================Ambient Tab================================================= //------------------------------------------------------------------------------------------------------- public bool useReflectionProbe = true; public int ambientSourceIndex = 0; public float AmbientIntensity = 1.0f; public float ReflectionIntensity = 1.0f; public int ReflectionBounces = 1; public int ReflectionProbeRefreshMode = 1; public int ReflectionProbeTimeSlicing = 2; public float ReflectionProbeTimeToUpdate = 1.0f; private float timeSinceLastUpdate = 0.0f; public float ReflectionProbeIntensity = 1.0f; public LayerMask ReflectionProbeCullingMask = 0; public Vector3 ReflectionProbeSize = new Vector3 (10.0f, 10.0f, 10.0f); public bool ForceProbeUpdateAtFirstFrame = true; public List AmbientIntensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List ReflectionIntensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List ReflectionBouncesCurve = new List() { AnimationCurve.Linear(0,1,24,1), AnimationCurve.Linear(0,1,24,1), AnimationCurve.Linear(0,1,24,1), AnimationCurve.Linear(0,1,24,1), AnimationCurve.Linear(0,1,24,1), AnimationCurve.Linear(0,1,24,1), AnimationCurve.Linear(0,1,24,1) }; public List ReflectionProbeIntensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List AmbientColorGradient = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List SkyAmbientColorGradient = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List EquatorAmbientColorGradient = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List GroundAmbientColorGradient = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; //------------------------------------------------------------------------------------------------------- //===========================================Lighting Tab================================================ //------------------------------------------------------------------------------------------------------- public float SunDirLightIntensity = 1.0f; public float MoonDirLightIntensity= 1.0f; public float SunFlareIntensity = 1.0f; public List SunDirLightIntensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List MoonDirLightIntensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List SunFlareIntensityCurve = new List() { AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f), AnimationCurve.Linear(0,1.0f,24,1.0f) }; public List SunDirLightColorGradient = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; public List MoonDirLightColorGradient = new List(){new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient(), new Gradient()}; //------------------------------------------------------------------------------------------------------- //===========================================Textures Tab================================================ //------------------------------------------------------------------------------------------------------- public RenderTexture MoonTexture; public Cubemap StarField; public Cubemap StarNoise; public Cubemap MilkyWay; //------------------------------------------------------------------------------------------------------- //===========================================Options Tab================================================= //------------------------------------------------------------------------------------------------------- float getGradientTime; float getCurveTime; public bool skyUpdate = true; public bool UseSunLensFlare = true; public bool SkyHDR = false; public bool showCurveValue = false; public bool showGradientTime = true; public int SpaceColorIndex = 0; public Color CurveColorField = Color.yellow; public float ColorCorrection = 1.0f; public float WispyColorCorrection = 1.0f; //------------------------------------------------------------------------------------------------------- //To get lights components private Light SunLightComponent; private Light MoonLightComponent; private LensFlare SunFlareComponent; //------------------------------------------------------------------------------------------------------- //============================================Output Tab================================================= //------------------------------------------------------------------------------------------------------- public List OutputCurveList = new List(); public List OutputGradientList = new List();//{new Gradient()}; ///////////////////////////////////////////////////////////////////////////////////////////////////////// //==========================================ends VARIABLES=============================================== ///////////////////////////////////////////////////////////////////////////////////////////////////////// //Use this for initialization. void Start () { MoonTexture.useMipMap = true; //Get lights components if (UseSunLensFlare){ SunFlareComponent = Sun_DirectionalLight.GetComponent (); } SunLightComponent = Sun_DirectionalLight.GetComponent (); MoonLightComponent = Moon_DirectionalLight.GetComponent (); //Some updates SkyUpdate(); SetSunPosition(); SetTime (TIME_of_DAY, DAY_CYCLE); // First update the Reflection Probe if (useReflectionProbe && ReflectionProbeRefreshMode == 2) { if (ForceProbeUpdateAtFirstFrame) { AzureReflectionProbe.refreshMode = UnityEngine.Rendering.ReflectionProbeRefreshMode.EveryFrame; // To update in the first frame. AzureReflectionProbe.RenderProbe (null); AzureReflectionProbe.refreshMode = UnityEngine.Rendering.ReflectionProbeRefreshMode.ViaScripting;// Back to previous refresh mode. } else { AzureReflectionProbe.RenderProbe (null); } } AzureReflectionProbe.cullingMask = ReflectionProbeCullingMask; // Only in gameplay if (Application.isPlaying) { ClearList (); } } //Update is called once per frame. void Update () { //------------------------------------------------------------------------------------------------------- // Update the sky equations every frame ? if (skyUpdate) { SkyUpdate (); } else { // getGradientTime = TIME_of_DAY / 24; getCurveTime = TIME_of_DAY; if (SetTime_By_Curve) { getCurveTime = TIME_of_DAY_by_CURVE; // getGradientTime = TIME_of_DAY_by_CURVE / 24; } WispyCloudPosition -= WispyCloudSpeed * (1e-3f * Time.deltaTime); Sky_Material.SetFloat ("_ProceduralCloudSpeed", WispyCloudPosition); StarsIntensity = StarsIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); Sky_Material.SetFloat ("_StarsIntensity", StarsIntensity); } // Needs constant update Sky_Material.SetVector ("_SunDir" , -Sun_DirectionalLight.transform.forward ); Sky_Material.SetVector ("_MoonDir", -Moon_DirectionalLight.transform.forward ); Sky_Material.SetMatrix ("_MoonMatrix", Moon_DirectionalLight.transform.worldToLocalMatrix); Sky_Material.SetMatrix ("_SunMatrix", Sun_DirectionalLight.transform.worldToLocalMatrix); Fog_Material.SetVector ("_SunDir" , -Sun_DirectionalLight.transform.forward ); Fog_Material.SetVector ("_MoonDir", -Moon_DirectionalLight.transform.forward ); Fog_Material.SetMatrix ("_MoonMatrix", Moon_DirectionalLight.transform.worldToLocalMatrix); if (cloudModeIndex == 1) { preRenderedCloudLongitude = (1.0f / 360) * (Longitude + 180); Sky_Material.SetFloat ("_Longitude", preRenderedCloudLongitude); //To know if is morning or afternoon. if (TIME_of_DAY >= 12.0f) { Sky_Material.SetInt ("_Rise_or_Down", 0); } else { Sky_Material.SetInt ("_Rise_or_Down", 1); } } Moon_Material.SetVector ("_SunDir" , -Sun_DirectionalLight.transform.forward ); //For rotation of the noise texture in shader to apply star scintillation if (StarsScintillation > 0.0f) { scintRot += StarsScintillation * Time.deltaTime; Quaternion rot = Quaternion.Euler (scintRot, scintRot, scintRot); NoiseRot = Matrix4x4.TRS (Vector3.zero, rot, new Vector3 (1, 1, 1)); Sky_Material.SetMatrix ("_NoiseMatrix", NoiseRot); } //Set Milky Way Position Quaternion milkyWayRot = Quaternion.Euler (MilkyWayPos); MilkyWayMatrix = Matrix4x4.TRS (Vector3.zero, milkyWayRot, new Vector3 (1, 1, 1)); Sky_Material.SetMatrix ("_MilkyWayMatrix", MilkyWayMatrix); //------------------------------------------------------------------------------------------------------- ///////////////// // Time of Day // sun_v3.x = SetSunPosition(); sun_v3.y = Longitude;// + azure_East; if (TIME_of_DAY >= 24.0f) { if (DAY_of_WEEK < (NUMBER_of_DAYS-1)) { DAY_of_WEEK += 1; } else { DAY_of_WEEK = 0; } TIME_of_DAY = 0.0f; } if (TIME_of_DAY < 0.0f) { if (DAY_of_WEEK > 0) { DAY_of_WEEK -= 1; } else { DAY_of_WEEK = NUMBER_of_DAYS - 1; } TIME_of_DAY = 24.0f; } Sun_DirectionalLight.transform.localEulerAngles = sun_v3; // Only in gameplay if (Application.isPlaying) { // Pass the time of day // TIME_of_DAY += PassTime * Time.deltaTime; // Update the Reflection Probe if (useReflectionProbe) { UpdateReflections (); } } //------------------------------------------------------------------------------------------------------- // Only in Editor #if UNITY_EDITOR if (!Application.isPlaying) { // Get lights components if (UseSunLensFlare){ SunFlareComponent = Sun_DirectionalLight.GetComponent (); } SunLightComponent = Sun_DirectionalLight.GetComponent (); MoonLightComponent = Moon_DirectionalLight.GetComponent (); // See "Reflection Probe Intensity" changes in the Editor ReflectionProbeIntensity = ReflectionProbeIntensityCurve [DAY_of_WEEK].Evaluate (TIME_of_DAY); AzureReflectionProbe.intensity = ReflectionProbeIntensity; //Update the sky in Editor SkyUpdate (); } AzureReflectionProbe.cullingMask = ReflectionProbeCullingMask; #endif //------------------------------------------------------------------------------------------------------- SunLightIntensity (); MoonLightIntensity (); SetAmbient (); if (UseUnityFog) { SetUnityFog (); } //------------------------------------------------------------------------------------------------------- TIME_of_DAY_by_CURVE = DayNightLengthCurve.Evaluate(TIME_of_DAY); } ///////////////////////////////////////////////////////////////////////////////////////////////////////// //===============================================METHODS================================================= //------------------------------------------------------------------------------------------------------- // Get Beta Rayleight. private Vector3 BetaRay() { Vector3 converted_lambda = lambda * 1.0e-9f; // Converting the wavelength values given in Inpector for real scale used in formula. Vector3 Br; // The part (6.0f - 7.0f * pn) and (6.0f + 3.0f * pn), they are not included in this equation because there is no significant visual changes in the sky. //////////////// // Without pn // //Br.x = ((8.0f * Mathf.Pow(pi, 3.0f) * (Mathf.Pow(Mathf.Pow(n, 2.0f) - 1.0f, 2.0f)) ) / (3.0f * N * Mathf.Pow(converted_lambda.x, 4.0f)))*SkyCoeff; //Br.y = ((8.0f * Mathf.Pow(pi, 3.0f) * (Mathf.Pow(Mathf.Pow(n, 2.0f) - 1.0f, 2.0f)) ) / (3.0f * N * Mathf.Pow(converted_lambda.y, 4.0f)))*SkyCoeff; //Br.z = ((8.0f * Mathf.Pow(pi, 3.0f) * (Mathf.Pow(Mathf.Pow(n, 2.0f) - 1.0f, 2.0f)) ) / (3.0f * N * Mathf.Pow(converted_lambda.z, 4.0f)))*SkyCoeff; /////////////////////// // Original equation // Br.x = (((8.0f * Mathf.Pow(pi, 3.0f) * (Mathf.Pow(Mathf.Pow(n, 2.0f) - 1.0f, 2.0f)))*(6.0f+3.0f*pn) ) / ((3.0f * N * Mathf.Pow(converted_lambda.x, 4.0f))*(6.0f-7.0f*pn) ))*SkyCoeff; Br.y = (((8.0f * Mathf.Pow(pi, 3.0f) * (Mathf.Pow(Mathf.Pow(n, 2.0f) - 1.0f, 2.0f)))*(6.0f+3.0f*pn) ) / ((3.0f * N * Mathf.Pow(converted_lambda.y, 4.0f))*(6.0f-7.0f*pn) ))*SkyCoeff; Br.z = (((8.0f * Mathf.Pow(pi, 3.0f) * (Mathf.Pow(Mathf.Pow(n, 2.0f) - 1.0f, 2.0f)))*(6.0f+3.0f*pn) ) / ((3.0f * N * Mathf.Pow(converted_lambda.z, 4.0f))*(6.0f-7.0f*pn) ))*SkyCoeff; return Br; } //------------------------------------------------------------------------------------------------------- // Get Beta Mie. private Vector3 BetaMie() { float c = (0.2f * Turbidity ) * 10.0f; Vector3 Bm; Bm.x = (434.0f * c * pi * Mathf.Pow((2.0f * pi) / lambda.x, 2.0f) * K.x); Bm.y = (434.0f * c * pi * Mathf.Pow((2.0f * pi) / lambda.y, 2.0f) * K.y); Bm.z = (434.0f * c * pi * Mathf.Pow((2.0f * pi) / lambda.z, 2.0f) * K.z); Bm.x=Mathf.Pow(Bm.x,-1.0f); Bm.y=Mathf.Pow(Bm.y,-1.0f); Bm.z=Mathf.Pow(Bm.z,-1.0f); return Bm; } //------------------------------------------------------------------------------------------------------- // Get (3.0/(16.0*pi)) for rayleight phase function. private float pi316() { return 3.0f/(16.0f*pi); } //------------------------------------------------------------------------------------------------------- // Get (1.0/(4.0*pi)) for mie phase function. private float pi14() { return 1.0f/(4.0f*pi); } //------------------------------------------------------------------------------------------------------- // Get mie g constants private Vector3 GetMieG() { return new Vector3(1.0f-g*g,1.0f+g*g,2.0f*g); } //------------------------------------------------------------------------------------------------------- public float SetSunPosition() { float ret; if (SetTime_By_Curve) { ret = ((TIME_of_DAY_by_CURVE + UTC) * 360.0f / 24.0f) - 90.0f; } else { ret = ((TIME_of_DAY + UTC) * 360.0f / 24.0f) - 90.0f; } return ret; } //------------------------------------------------------------------------------------------------------- // Set "Time of Day" and "Day Duration" public void SetTime(float hour, float dayDuration) { TIME_of_DAY = hour; DAY_CYCLE = dayDuration; if (dayDuration > 0.0f) PassTime = (24.0f / 60.0f) / DAY_CYCLE; else PassTime = 0.0f; } //------------------------------------------------------------------------------------------------------- // Get "Time of Day"" public float GetTime() { float angle = Sun_DirectionalLight.transform.localEulerAngles.x; return angle / (360.0f / 24.0f); } //------------------------------------------------------------------------------------------------------- private void SunLightIntensity() { if (SunLightComponent != null) { SunDirLightIntensity = SunDirLightIntensityCurve[DAY_of_WEEK].Evaluate(TIME_of_DAY); SunLightComponent.intensity = SunDirLightIntensity+Lightincrement; if(SunLightComponent.intensity <= 0) { SunLightComponent.enabled = false; }else { SunLightComponent.enabled = true; } if (SunFlareComponent != null) { if (UseSunLensFlare) { SunFlareComponent.enabled = true; SunFlareIntensity = SunFlareIntensityCurve[DAY_of_WEEK].Evaluate(TIME_of_DAY); SunFlareComponent.brightness = SunFlareIntensity; }else { SunFlareComponent.enabled =false; } } } } //------------------------------------------------------------------------------------------------------- private void MoonLightIntensity() { if (MoonLightComponent != null) { MoonDirLightIntensity = MoonDirLightIntensityCurve[DAY_of_WEEK].Evaluate(TIME_of_DAY); MoonLightComponent.intensity = MoonDirLightIntensity; if(MoonLightComponent.intensity <= 0) { MoonLightComponent.enabled = false; }else { MoonLightComponent.enabled = true; } } } //------------------------------------------------------------------------------------------------------- private void SetAmbient() { switch (ambientSourceIndex) { case 0: AmbientIntensity = AmbientIntensityCurve[DAY_of_WEEK].Evaluate (TIME_of_DAY); RenderSettings.ambientIntensity = AmbientIntensity; break; case 1: AmbientIntensity = AmbientIntensityCurve[DAY_of_WEEK].Evaluate (TIME_of_DAY); RenderSettings.ambientIntensity = AmbientIntensity; RenderSettings.ambientSkyColor = SkyAmbientColorGradient[DAY_of_WEEK].Evaluate(TIME_of_DAY/24); RenderSettings.ambientEquatorColor = EquatorAmbientColorGradient[DAY_of_WEEK].Evaluate(TIME_of_DAY/24); RenderSettings.ambientGroundColor = GroundAmbientColorGradient[DAY_of_WEEK].Evaluate(TIME_of_DAY/24); break; case 2: AmbientIntensity = AmbientIntensityCurve[DAY_of_WEEK].Evaluate (TIME_of_DAY); RenderSettings.ambientIntensity = AmbientIntensity; RenderSettings.ambientSkyColor = AmbientColorGradient[DAY_of_WEEK].Evaluate(TIME_of_DAY/24); break; } ReflectionIntensity = ReflectionIntensityCurve[DAY_of_WEEK].Evaluate (TIME_of_DAY); RenderSettings.reflectionIntensity = ReflectionIntensity; ReflectionBounces = (int)ReflectionBouncesCurve[DAY_of_WEEK].Evaluate (TIME_of_DAY); RenderSettings.reflectionBounces = ReflectionBounces; } //------------------------------------------------------------------------------------------------------- private void SetUnityFog() { getGradientTime = TIME_of_DAY / 24; getCurveTime = TIME_of_DAY; if (SetTime_By_Curve) { getCurveTime = TIME_of_DAY_by_CURVE; getGradientTime = TIME_of_DAY_by_CURVE / 24; } RenderSettings.fogColor = UnityFogGradientColor[DAY_of_WEEK].Evaluate (getGradientTime); UnityFogDensity = UnityFogDensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); UnityFogStart = UnityFogStartCurve[DAY_of_WEEK].Evaluate (getCurveTime); UnityFogEnd = UnityFogEndCurve[DAY_of_WEEK].Evaluate (getCurveTime); RenderSettings.fogDensity = UnityFogDensity * 1e-4f; RenderSettings.fogStartDistance = UnityFogStart; RenderSettings.fogEndDistance = UnityFogEnd; } //------------------------------------------------------------------------------------------------------- private void UpdateReflections() { timeSinceLastUpdate += Time.deltaTime; if (ReflectionProbeRefreshMode == 2) { if (timeSinceLastUpdate >= ReflectionProbeTimeToUpdate) { AzureReflectionProbe.RenderProbe (null); timeSinceLastUpdate = 0; } } ReflectionProbeIntensity = ReflectionProbeIntensityCurve [DAY_of_WEEK].Evaluate (TIME_of_DAY); AzureReflectionProbe.intensity = ReflectionProbeIntensity; } //------------------------------------------------------------------------------------------------------- public void ChangeShader(int shader) { AzureSkyCloudAnimation animComponent = GetComponent (); switch (shader) { case 0: noCloudsShader = Shader.Find ("azure[Sky]/azure[Sky]_NoClouds"); if (animComponent) { animComponent.enabled = false; } if (Sky_Material.shader != noCloudsShader) Sky_Material.shader = noCloudsShader; break; case 1: preRenderedShader = Shader.Find ("azure[Sky]/azure[Sky]_PreRenderedClouds"); if (animComponent) { animComponent.enabled = true; } if(Sky_Material.shader != preRenderedShader) Sky_Material.shader = preRenderedShader; break; case 2: proceduralCloudShader = Shader.Find ("azure[Sky]/azure[Sky]_ProceduralClouds"); if (animComponent) { animComponent.enabled = false; } if(Sky_Material.shader != proceduralCloudShader) Sky_Material.shader = proceduralCloudShader; break; } } //------------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------------- /// /// Get Azure[Sky] curve output based on value of "time of day". /// /// float. /// Index. public float AzureSkyGetCurveOutput(int index) { if (SetTime_By_Curve) { return OutputCurveList [index].Evaluate (TIME_of_DAY_by_CURVE); } else { return OutputCurveList [index].Evaluate (TIME_of_DAY); } } /// /// Get Azure[Sky] gradient output based on value of "time of day" /// /// Color. /// Index. public Color AzureSkyGetGradientOutput(int index) { float getColorKey; if (SetTime_By_Curve) { getColorKey = TIME_of_DAY_by_CURVE / 24; } else { getColorKey = TIME_of_DAY / 24; } return OutputGradientList[index].Evaluate(getColorKey); } //------------------------------------------------------------------------------------------------------- //======================================================================================================= //------------------------------------------------------------------------------------------------------- // Update the sky properties void SkyUpdate() { float getGradientTime = TIME_of_DAY / 24; float getCurveTime = TIME_of_DAY; if (SetTime_By_Curve) { getCurveTime = TIME_of_DAY_by_CURVE; getGradientTime = TIME_of_DAY_by_CURVE / 24; } //Get Curves Value RayCoeff = RayCoeffCurve[DAY_of_WEEK].Evaluate (getCurveTime); MieCoeff = MieCoeffCurve[DAY_of_WEEK].Evaluate (getCurveTime); Turbidity = TurbidityCurve[DAY_of_WEEK].Evaluate (getCurveTime); g = gCurve[DAY_of_WEEK].Evaluate (getCurveTime); lambda.x = LambdaCurveR[DAY_of_WEEK].Evaluate (getCurveTime); lambda.y = LambdaCurveG[DAY_of_WEEK].Evaluate (getCurveTime); lambda.z = LambdaCurveB[DAY_of_WEEK].Evaluate (getCurveTime); SkyCoeff = SkyCoeffCurve[DAY_of_WEEK].Evaluate (getCurveTime); SunIntensity = SunIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); MoonIntensity = MoonIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); Kr = KrCurve[DAY_of_WEEK].Evaluate (getCurveTime); Km = KmCurve[DAY_of_WEEK].Evaluate (getCurveTime); Altitude = AltitudeCurve[DAY_of_WEEK].Evaluate (getCurveTime); SkyLuminance = SkyLuminanceCurve[DAY_of_WEEK].Evaluate (getCurveTime); SkyDarkness = SkyDarknessCurve[DAY_of_WEEK].Evaluate (getCurveTime); SunsetPower = SunsetPowerCurve[DAY_of_WEEK].Evaluate (getCurveTime); SunDiskSize = SunDiskSizeCurve[DAY_of_WEEK].Evaluate (getCurveTime); SunDiskIntensity = SunDiskIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); SunDiskPropagation= SunDiskPropagationCurve[DAY_of_WEEK].Evaluate (getCurveTime); MoonSize = MoonSizeCurve[DAY_of_WEEK].Evaluate (getCurveTime); StarsIntensity = StarsIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); StarsExtinction = StarsExtinctionCurve[DAY_of_WEEK].Evaluate (getCurveTime); MoonExtinction = MoonExtinctionCurve[DAY_of_WEEK].Evaluate (getCurveTime); MilkyWayIntensity = MilkyWayIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); MilkyWayPower = MilkyWayPowerCurve[DAY_of_WEEK].Evaluate (getCurveTime); Exposure = ExposureCurve[DAY_of_WEEK].Evaluate (getCurveTime); MoonColorPower = MoonColorPowerCurve [DAY_of_WEEK].Evaluate (getCurveTime); NightSkyFarColorDistance = NightSkyFarColorDistanceCurve [DAY_of_WEEK].Evaluate (getCurveTime); NightSkyFarColorPower = NightSkyFarColorPowerCurve [DAY_of_WEEK].Evaluate (getCurveTime); ScatteringFogDistance = ScatteringFogDistanceCurve[DAY_of_WEEK].Evaluate (getCurveTime); FogBlendPoint = FogBlendPointCurve[DAY_of_WEEK].Evaluate (getCurveTime); NormalFogDistance = NormalFogDistanceCurve[DAY_of_WEEK].Evaluate (getCurveTime); DenseFogIntensity = DenseFogIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); DenseFogAltitude = DenseFogAltitudeCurve[DAY_of_WEEK].Evaluate (getCurveTime); ////////////////// // SKY MATERIAL // Sky_Material.SetVector ("_Br", BetaRay () * RayCoeff); Sky_Material.SetVector ("_Br2", BetaRay () * 3.0f); Sky_Material.SetVector ("_Bm", BetaMie () * MieCoeff); Sky_Material.SetVector ("_Brm", BetaRay () * RayCoeff + BetaMie () * MieCoeff); Sky_Material.SetVector ("_mieG", GetMieG ()); Sky_Material.SetFloat ("_SunIntensity", SunIntensity); Sky_Material.SetFloat ("_MoonIntensity", MoonIntensity); Sky_Material.SetFloat ("_Kr", Kr); Sky_Material.SetFloat ("_Km", Km); Sky_Material.SetFloat ("_Altitude", Altitude); Sky_Material.SetFloat ("_pi316", pi316 ()); Sky_Material.SetFloat ("_pi14", pi14 ()); Sky_Material.SetFloat ("_pi", pi); Sky_Material.SetFloat ("_Exposure", Exposure); Sky_Material.SetFloat ("_SkyLuminance", SkyLuminance); Sky_Material.SetFloat ("_SkyDarkness", SkyDarkness); Sky_Material.SetFloat ("_SunsetPower", SunsetPower); Sky_Material.SetFloat ("_SunDiskSize", SunDiskSize); Sky_Material.SetFloat ("_SunDiskIntensity", SunDiskIntensity); Sky_Material.SetFloat ("_SunDiskPropagation", SunDiskPropagation); Sky_Material.SetFloat ("_MoonSize", MoonSize); Sky_Material.SetFloat ("_StarsIntensity", StarsIntensity); Sky_Material.SetFloat ("_StarsExtinction", StarsExtinction); Sky_Material.SetFloat ("_MoonExtinction", MoonExtinction); Sky_Material.SetFloat ("_MilkyWayIntensity", MilkyWayIntensity); Sky_Material.SetFloat ("_MilkyWayPower", MilkyWayPower); Sky_Material.SetFloat ("_MoonEclipseShadow", MoonEclipseShadow); // Sky_Material.SetColor ("_SunColor", SunGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Sky_Material.SetColor ("_SunsetColor", SunsetGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Sky_Material.SetColor ("_MoonBrightColor", MoonBrightGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Sky_Material.SetColor ("_GroundCloseColor", NightGroundCloseGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Sky_Material.SetColor ("_GroundFarColor", NightGroundFarGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Sky_Material.SetFloat ("_FarColorDistance", NightSkyFarColorDistance); Sky_Material.SetFloat ("_FarColorIntensity", NightSkyFarColorPower); Sky_Material.SetTexture ("_MoonSampler", MoonTexture); Sky_Material.SetInt ("_MoonEclipseShadow", MoonEclipseShadow); Sky_Material.SetFloat ("_Umbra", Umbra); Sky_Material.SetFloat ("_UmbraSize", UmbraSize); Sky_Material.SetFloat ("_Penumbra", Penumbra); Sky_Material.SetFloat ("_PenumbraSize", PenumbraSize); Sky_Material.SetColor ("_PenumbraColor", PenumbraColor); Sky_Material.SetTexture ("_StarField", StarField); Sky_Material.SetTexture ("_StarNoise", StarNoise); Sky_Material.SetTexture ("_MilkyWay", MilkyWay); Sky_Material.SetFloat ("_ColorCorrection", ColorCorrection); ////////////////// // FOG MATERIAL // Fog_Material.SetVector ("_Br", BetaRay () * RayCoeff); Fog_Material.SetVector ("_Br2", BetaRay () * 3.0f); Fog_Material.SetVector ("_Bm", BetaMie () * MieCoeff); Fog_Material.SetVector ("_Brm", BetaRay () * RayCoeff + BetaMie () * MieCoeff); Fog_Material.SetVector ("_mieG", GetMieG ()); Fog_Material.SetFloat ("_SunIntensity", SunIntensity); Fog_Material.SetFloat ("_MoonIntensity", MoonIntensity); Fog_Material.SetFloat ("_Kr", Kr); Fog_Material.SetFloat ("_Km", Km); Fog_Material.SetFloat ("_Altitude", Altitude); Fog_Material.SetFloat ("_pi316", pi316 ()); Fog_Material.SetFloat ("_pi14", pi14 ()); Fog_Material.SetFloat ("_pi", pi); Fog_Material.SetFloat ("_Exposure", Exposure); Fog_Material.SetFloat ("_SkyLuminance", SkyLuminance); Fog_Material.SetFloat ("_SkyDarkness", SkyDarkness); Fog_Material.SetFloat ("_SunsetPower", SunsetPower); Fog_Material.SetFloat ("_ColorCorrection", ColorCorrection); Fog_Material.SetColor ("_SunsetColor", SunsetGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Fog_Material.SetColor ("_MoonBrightColor", MoonBrightGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Fog_Material.SetColor ("_GroundCloseColor", NightGroundCloseGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Fog_Material.SetColor ("_GroundFarColor", NightGroundFarGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Fog_Material.SetFloat ("_FarColorDistance", NightSkyFarColorDistance); Fog_Material.SetFloat ("_FarColorIntensity", NightSkyFarColorPower); Fog_Material.SetFloat ("_ScatteringFogDistance", ScatteringFogDistance); Fog_Material.SetFloat ("_BlendFogDistance", FogBlendPoint); Fog_Material.SetFloat ("_NormalFogDistance", NormalFogDistance); Fog_Material.SetFloat ("_DenseFogIntensity", DenseFogIntensity); Fog_Material.SetFloat ("_DenseFogAltitude", DenseFogAltitude); Fog_Material.SetColor ("_DenseFogColor", DenseFogGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Fog_Material.SetColor ("_NormalFogColor", NormalFogGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Fog_Material.SetColor ("_GlobalColor", GlobalFogGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); if (LinearFog) { Fog_Material.SetFloat ("_LinearFog", 0.45f); } else { Fog_Material.SetFloat ("_LinearFog", 1.0f); } ///////// //Cloud// switch (cloudModeIndex) { case 0: break; case 1://Pre Rendered Clouds Sky_Material.SetColor ("_EdgeColor", EdgeColorGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Sky_Material.SetColor ("_DarkColor", DarkColorGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); CloudExtinction = CloudExtinctionCurve[DAY_of_WEEK].Evaluate (getCurveTime); AlphaSaturation = AlphaSaturationCurve[DAY_of_WEEK].Evaluate (getCurveTime); CloudDensity = CloudDensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); MoonBrightIntensity = MoonBrightIntensityCurve[DAY_of_WEEK].Evaluate (getCurveTime); MoonBrightRange = MoonBrightRangeCurve[DAY_of_WEEK].Evaluate (getCurveTime); PreRenderedCloudAltitude = PreRenderedCloudAltitudeCurve[DAY_of_WEEK].Evaluate (getCurveTime); Sky_Material.SetFloat ("_CloudExtinction", CloudExtinction); Sky_Material.SetFloat ("_AlphaSaturation", AlphaSaturation); Sky_Material.SetFloat ("_CloudDensity", CloudDensity); Sky_Material.SetFloat ("_MoonBrightIntensity", MoonBrightIntensity); Sky_Material.SetFloat ("_MoonBrightRange", MoonBrightRange); Sky_Material.SetFloat ("_CloudAltitude", PreRenderedCloudAltitude); break; case 2://Procedural Wispy Clouds Sky_Material.SetColor ("_WispyDarkness", WispyDarknessGradientColor [DAY_of_WEEK].Evaluate (getGradientTime)); Sky_Material.SetColor ("_WispyBright", WispyBrightGradientColor [DAY_of_WEEK].Evaluate (getGradientTime)); Sky_Material.SetColor ("_WispyColor", WispyColorGradientColor [DAY_of_WEEK].Evaluate (getGradientTime)); WispyCovarage = WispyCovarageCurve [DAY_of_WEEK].Evaluate (getCurveTime); WispyCloudSpeed = WispyCloudSpeedCurve [DAY_of_WEEK].Evaluate (getCurveTime); Sky_Material.SetFloat ("_WispyCovarage", WispyCovarage); Sky_Material.SetTexture ("_WispyCloudTexture", WispyCloudTexture); WispyCloudPosition -= WispyCloudSpeed * (1e-3f * Time.deltaTime); Sky_Material.SetFloat ("_ProceduralCloudSpeed", WispyCloudPosition); Sky_Material.SetFloat ("_WispyCloudDirection", WispyCloudDirection); Sky_Material.SetFloat ("_WispyColorCorrection", WispyColorCorrection); break; } ///////////////// //Moon Material// Moon_Material.SetColor ("_MoonColor", MoonGradientColor[DAY_of_WEEK].Evaluate(getGradientTime)); Moon_Material.SetFloat ("_LightIntensity", MoonColorPower); // General Settings // if (SkyHDR) { Sky_Material.DisableKeyword ("HDR_OFF"); Sky_Material.EnableKeyword ("HDR_ON"); Fog_Material.DisableKeyword ("HDR_OFF"); Fog_Material.EnableKeyword ("HDR_ON"); } else { Sky_Material.EnableKeyword ("HDR_OFF"); Sky_Material.DisableKeyword ("HDR_ON"); Fog_Material.EnableKeyword ("HDR_OFF"); Fog_Material.DisableKeyword ("HDR_ON"); } } void ClearList() { for (int i = NUMBER_of_DAYS; i < 7; i++) { //Scattering LambdaCurveR.RemoveAt (NUMBER_of_DAYS); LambdaCurveG.RemoveAt (NUMBER_of_DAYS); LambdaCurveB.RemoveAt (NUMBER_of_DAYS); RayCoeffCurve.RemoveAt (NUMBER_of_DAYS); MieCoeffCurve.RemoveAt (NUMBER_of_DAYS); TurbidityCurve.RemoveAt (NUMBER_of_DAYS); gCurve.RemoveAt (NUMBER_of_DAYS); SkyCoeffCurve.RemoveAt (NUMBER_of_DAYS); SunIntensityCurve.RemoveAt (NUMBER_of_DAYS); MoonIntensityCurve.RemoveAt (NUMBER_of_DAYS); KrCurve.RemoveAt (NUMBER_of_DAYS); KmCurve.RemoveAt (NUMBER_of_DAYS); AltitudeCurve.RemoveAt (NUMBER_of_DAYS); //Sky Settings SkyLuminanceCurve.RemoveAt (NUMBER_of_DAYS); SkyDarknessCurve.RemoveAt (NUMBER_of_DAYS); SunsetPowerCurve.RemoveAt (NUMBER_of_DAYS); SunDiskSizeCurve.RemoveAt (NUMBER_of_DAYS); SunDiskIntensityCurve.RemoveAt (NUMBER_of_DAYS); SunDiskPropagationCurve.RemoveAt (NUMBER_of_DAYS); MoonSizeCurve.RemoveAt (NUMBER_of_DAYS); MoonColorPowerCurve.RemoveAt (NUMBER_of_DAYS); StarsIntensityCurve.RemoveAt (NUMBER_of_DAYS); StarsExtinctionCurve.RemoveAt (NUMBER_of_DAYS); MilkyWayIntensityCurve.RemoveAt (NUMBER_of_DAYS); MilkyWayPowerCurve.RemoveAt (NUMBER_of_DAYS); ExposureCurve.RemoveAt (NUMBER_of_DAYS); NightSkyFarColorDistanceCurve.RemoveAt (NUMBER_of_DAYS); NightSkyFarColorPowerCurve.RemoveAt (NUMBER_of_DAYS); SunsetGradientColor.RemoveAt (NUMBER_of_DAYS); MoonGradientColor.RemoveAt (NUMBER_of_DAYS); MoonBrightGradientColor.RemoveAt (NUMBER_of_DAYS); NightGroundCloseGradientColor.RemoveAt (NUMBER_of_DAYS); NightGroundFarGradientColor.RemoveAt (NUMBER_of_DAYS); //Fog NormalFogGradientColor.RemoveAt (NUMBER_of_DAYS); GlobalFogGradientColor.RemoveAt (NUMBER_of_DAYS); ScatteringFogDistanceCurve.RemoveAt (NUMBER_of_DAYS); FogBlendPointCurve.RemoveAt (NUMBER_of_DAYS); NormalFogDistanceCurve.RemoveAt (NUMBER_of_DAYS); //Pre-Rendered Clouds EdgeColorGradientColor.RemoveAt (NUMBER_of_DAYS); DarkColorGradientColor.RemoveAt (NUMBER_of_DAYS); PreRenderedCloudAltitudeCurve.RemoveAt (NUMBER_of_DAYS); CloudExtinctionCurve.RemoveAt (NUMBER_of_DAYS); AlphaSaturationCurve.RemoveAt (NUMBER_of_DAYS); CloudDensityCurve.RemoveAt (NUMBER_of_DAYS); MoonBrightIntensityCurve.RemoveAt (NUMBER_of_DAYS); MoonBrightRangeCurve.RemoveAt (NUMBER_of_DAYS); //Procedural Clouds WispyCovarageCurve.RemoveAt (NUMBER_of_DAYS); WispyCloudSpeedCurve.RemoveAt (NUMBER_of_DAYS); WispyColorGradientColor.RemoveAt (NUMBER_of_DAYS); WispyBrightGradientColor.RemoveAt (NUMBER_of_DAYS); WispyDarknessGradientColor.RemoveAt (NUMBER_of_DAYS); //Ambient AmbientIntensityCurve.RemoveAt (NUMBER_of_DAYS); ReflectionIntensityCurve.RemoveAt (NUMBER_of_DAYS); ReflectionBouncesCurve.RemoveAt (NUMBER_of_DAYS); ReflectionProbeIntensityCurve.RemoveAt (NUMBER_of_DAYS); AmbientColorGradient.RemoveAt (NUMBER_of_DAYS); SkyAmbientColorGradient.RemoveAt (NUMBER_of_DAYS); EquatorAmbientColorGradient.RemoveAt (NUMBER_of_DAYS); GroundAmbientColorGradient.RemoveAt (NUMBER_of_DAYS); //Lighting SunDirLightIntensityCurve.RemoveAt (NUMBER_of_DAYS); MoonDirLightIntensityCurve.RemoveAt (NUMBER_of_DAYS); SunFlareIntensityCurve.RemoveAt (NUMBER_of_DAYS); SunDirLightColorGradient.RemoveAt (NUMBER_of_DAYS); MoonDirLightColorGradient.RemoveAt (NUMBER_of_DAYS); } } void OnEnable() { #if UNITY_EDITOR if (RenderSettings.skybox != Sky_Material) { RenderSettings.skybox = Sky_Material; } switch (ambientSourceIndex){ case 0: RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Skybox; break; case 1: RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Trilight; break; case 2: RenderSettings.ambientMode = UnityEngine.Rendering.AmbientMode.Flat; break; } #endif } }