| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using System;
 
- namespace Enviro 
 
- {  
 
-  
 
-     [Serializable] 
 
-     public class EnviroVolumetricCloudsQuality 
 
-     {
 
- 		public bool volumetricClouds = true;
 
-         [Range(1,6)]
 
-         public int downsampling = 4;
 
-         [Range(32,256)]
 
- 		public int stepsLayer1 = 128;
 
-         [Range(32,256)]
 
- 		public int stepsLayer2 = 64;
 
-         [Range(0f,2f)]
 
-         public float blueNoiseIntensity = 1f;
 
-         [Range(0f,10f)]
 
- 		public float reprojectionBlendTime = 10f;
 
-         [Range(0f,1f)]
 
- 		public float lodDistance = 0.25f;
 
-     }
 
-     [Serializable] 
 
-     public class EnviroCloudGlobalSettings 
 
-     {
 
-         public bool dualLayer = false;
 
-         public Gradient sunLightColorGradient;
 
-         public Gradient moonLightColorGradient;
 
-         public Gradient ambientColorGradient;
 
-         public Color sunLightColor;
 
-         public Color moonLightColor;
 
-         public Color ambientColor;
 
-         public bool depthBlending = false;
 
-         public Texture3D noise; 
 
-         public Texture3D detailNoise;
 
-         public Texture2D curlTex;
 
-         public Texture2D blueNoise;
 
-         public float cloudsWorldScale = 5000000f;
 
-         public float atmosphereColorSaturateDistance = 25000f;
 
-         [Range(0.0f, 2.0f)]
 
-         public float ambientLighIntensity = 1f;
 
-         public bool cloudShadows = true;
 
-         [Range(0.0f, 2.0f)]
 
-         public float cloudShadowsIntensity = 1f;
 
-     }
 
-     [Serializable] 
 
-     public class EnviroCloudLayerSettings 
 
-     {
 
-         public float cloudsWindDirectionX = 0f;
 
-         public float cloudsWindDirectionY = 1f;
 
-         public float windIntensity = 0.001f;
 
-         [Range(-1f,1f)]
 
-         public float coverage = 1f;
 
-         public float worleyFreq2 = 4f;
 
-         public float worleyFreq1 = 1f;
 
-         [Range(0f,1f)]
 
-         public float dilateCoverage = 0.5f;
 
-         [Range(0f,1f)]
 
-         public float dilateType = 0.5f;
 
-         [Range(0f,1f)]
 
-         public float cloudsTypeModifier = 0.5f;
 
-         public Vector2 locationOffset;
 
-         public float bottomCloudsHeight = 2000f;
 
-         public float topCloudsHeight = 8000f;
 
-  
 
-         [Range(0f,2f)]
 
-         public float density = 0.3f;
 
-         [Range(0f,2f)]
 
-         public float scatteringIntensity = 1f;
 
-         [Range(0f,1f)] 
 
-         public float silverLiningSpread = 0.8f;
 
-         [Range(0f,1f)]
 
-         public float powderIntensity = 0.5f;
 
-         [Range(0f,1f)]
 
-         public float curlIntensity = 0.25f;
 
-         [Range(0f,0.25f)]
 
-         public float lightStepModifier = 0.05f;
 
-         [Range(0f,2f)]
 
-         public float lightAbsorbtion = 0.5f;  
 
-  
 
-         [Range(0f,1f)]
 
-         public float multiScatteringA = 0.5f;
 
-         [Range(0f,1f)]
 
-         public float multiScatteringB = 0.5f; 
 
-         [Range(0f,1f)]
 
-         public float multiScatteringC = 0.5f;
 
-         public float baseNoiseUV = 15f;
 
-         public float detailNoiseUV = 50f;
 
-         [Range(0.0f, 1.0f)]
 
-         public float baseErosionIntensity = 0f;
 
-         [Range(0.0f, 1.0f)]
 
-         public float detailErosionIntensity = 0.3f;
 
-         [Range(0.0f, 1.0f)]
 
-         public float anvilBias = 0.0f;
 
-     }
 
-     public class EnviroVolumetricCloudRenderer
 
-     { 
 
-         // Clouds Rendering
 
-         public Camera camera;
 
-         public Material raymarchMat;
 
-         public Material reprojectMat;
 
-         public Material depthMat;
 
-         public Material blendAndLightingMat; 
 
-         public Material shadowMat;
 
-         public RenderTexture[] fullBuffer;
 
-         public int fullBufferIndex; 
 
-         public RenderTexture undersampleBuffer;
 
-         public RenderTexture downsampledDepth;
 
-         public Matrix4x4 prevV;
 
-         public int frame = 0;
 
-         public bool firstFrame = true;
 
- #if ENVIRO_HDRP
 
-     public UnityEngine.Rendering.RTHandle[] fullBufferHandles;
 
-     public UnityEngine.Rendering.RTHandle undersampleBufferHandle;
 
-     public UnityEngine.Rendering.RTHandle downsampledDepthHandle;
 
- #endif
 
-     }
 
-     [Serializable]
 
-     [ExecuteInEditMode]
 
-     public class EnviroVolumetricCloudsModule : EnviroModule
 
-     {   
 
-         //Base
 
-         public Enviro.EnviroCloudLayerSettings settingsLayer1;
 
-         public Enviro.EnviroCloudLayerSettings settingsLayer2;
 
-         public Enviro.EnviroCloudGlobalSettings settingsGlobal;
 
-         public Enviro.EnviroVolumetricCloudsQuality settingsQuality;
 
-         public EnviroVolumetricCloudsModule preset;
 
-         //Inspector
 
-         public bool showGlobalControls;
 
-         public bool showLayer1Controls; 
 
-         public bool showLayer2Controls;
 
-         public bool showCoverageControls;
 
-         public bool showLightingControls;
 
-         public bool showDensityControls;
 
-         public bool showTextureControls;
 
-         public bool showWindControls;
 
-         //Wind
 
-         public Vector3 cloudAnimLayer1;
 
-         public Vector3 cloudAnimLayer2;
 
-         public Vector3 cloudAnimNonScaled;
 
-         //Weather Map
 
-         public RenderTexture weatherMap;
 
-         private Material weatherMapMat;
 
-         private ComputeShader weatherMapCS;
 
-         private Light dirLight;
 
-         //Update Method
 
-         public override void UpdateModule ()
 
-         { 
 
-             UpdateWind();
 
-             UnityEngine.Profiling.Profiler.BeginSample("Enviro Clouds Weather Map");
 
-             weatherMap = EnviroManager.instance.VolumetricClouds.RenderWeatherMap();
 
-             UnityEngine.Profiling.Profiler.EndSample();
 
-         }
 
-  
 
-         public override void Enable()
 
-         {
 
-         }
 
-         public override void Disable() 
 
-         {
 
-             if(weatherMapMat != null)
 
-                DestroyImmediate(weatherMapMat);
 
-             if(weatherMap != null)
 
-                DestroyImmediate(weatherMap);
 
-         }
 
-         public void RenderCloudsShadows(RenderTexture source, RenderTexture destination, EnviroVolumetricCloudRenderer renderer)
 
-         {
 
-              if(renderer.shadowMat == null)
 
-                 renderer.shadowMat = new Material(Shader.Find("Hidden/EnviroApplyShadows"));
 
-                 renderer.shadowMat.SetTexture("_CloudsTex",renderer.undersampleBuffer);
 
-                 renderer.shadowMat.SetFloat("_Intensity",EnviroManager.instance.VolumetricClouds.settingsGlobal.cloudShadowsIntensity);
 
-                 renderer.shadowMat.SetTexture("_MainTex",source);
 
-                 Graphics.Blit(source,destination,renderer.shadowMat);
 
-         }
 
-  
 
- #if ENVIRO_URP
 
-         public void RenderCloudsShadowsURP(EnviroURPRenderPass pass,Camera cam, UnityEngine.Rendering.CommandBuffer cmd, RenderTexture source, UnityEngine.Rendering.RenderTargetIdentifier destination, EnviroVolumetricCloudRenderer renderer)
 
-         { 
 
-              if(renderer.shadowMat == null)
 
-                 renderer.shadowMat = new Material(Shader.Find("Hidden/EnviroApplyShadows"));
 
-                 renderer.shadowMat.SetTexture("_CloudsTex",renderer.undersampleBuffer);
 
-                 renderer.shadowMat.SetFloat("_Intensity",EnviroManager.instance.VolumetricClouds.settingsGlobal.cloudShadowsIntensity);
 
-                 renderer.shadowMat.EnableKeyword("ENVIROURP");
 
-                 pass.CustomBlit(cmd,cam.cameraToWorldMatrix,source,destination,renderer.shadowMat);
 
-         }
 
- #endif
 
- #if ENVIRO_HDRP
 
-         public void RenderCloudsShadowsHDRP(Camera cam, UnityEngine.Rendering.CommandBuffer cmd, UnityEngine.Rendering.RTHandle source, UnityEngine.Rendering.RTHandle destination, EnviroVolumetricCloudRenderer renderer)
 
-         {
 
-              if(renderer.shadowMat == null)
 
-                 renderer.shadowMat = new Material(Shader.Find("Hidden/EnviroApplyShadowsHDRP"));
 
-                 renderer.shadowMat.SetTexture("_MainTex",source);
 
-                 renderer.shadowMat.SetTexture("_CloudsTex",renderer.undersampleBufferHandle);
 
-                 renderer.shadowMat.SetVector("_HandleScales", new Vector4(1/renderer.undersampleBufferHandle.rtHandleProperties.rtHandleScale.x,1/renderer.undersampleBufferHandle.rtHandleProperties.rtHandleScale.y,1,1)); 
 
-                 renderer.shadowMat.SetFloat("_Intensity",EnviroManager.instance.VolumetricClouds.settingsGlobal.cloudShadowsIntensity);
 
-                 cmd.Blit(source,destination,renderer.shadowMat);
 
-         }
 
- #endif
 
-         /// Render Clouds
 
-         public void RenderVolumetricClouds(Camera cam, RenderTexture source, RenderTexture destination, EnviroVolumetricCloudRenderer renderer, EnviroQuality quality)
 
-         {
 
-             UnityEngine.Profiling.Profiler.BeginSample("Enviro Clouds Rendering");
 
-             int downsampling = settingsQuality.downsampling;
 
-             if(quality != null)
 
-                downsampling = quality.volumetricCloudsOverride.downsampling;
 
-             int width = cam.pixelWidth / downsampling;
 
-             int height = cam.pixelHeight / downsampling;
 
-             if(cam.cameraType != CameraType.Reflection)
 
-             {
 
-                 if (renderer.fullBuffer == null || renderer.fullBuffer.Length != 2)
 
-                 {
 
-                     renderer.fullBuffer = new RenderTexture[2];
 
-                 }
 
-                 renderer.fullBufferIndex = (renderer.fullBufferIndex + 1) % 2;
 
-                 renderer.firstFrame |= CreateRenderTexture(ref renderer.fullBuffer[0], width, height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,source.descriptor);
 
-                 renderer.firstFrame |= CreateRenderTexture(ref renderer.fullBuffer[1], width, height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,source.descriptor);
 
-             }
 
-             renderer.firstFrame |= CreateRenderTexture(ref renderer.undersampleBuffer, width , height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,source.descriptor);
 
-             renderer.frame++; 
 
-             if(renderer.frame > 64)
 
-               renderer.frame = 0;   
 
-  
 
-             if(renderer.depthMat == null)
 
-                renderer.depthMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsDepth"));
 
-  
 
-             CreateRenderTexture(ref renderer.downsampledDepth, width, height, RenderTextureFormat.RFloat, FilterMode.Point, source.descriptor);
 
-             renderer.depthMat.SetTexture("_MainTex", source);
 
-             if (downsampling > 1) 
 
-             {
 
-                 Graphics.Blit(source, renderer.downsampledDepth, renderer.depthMat, 0);  //Downsample the texture.
 
-             } 
 
-             else 
 
-             {
 
-                 Graphics.Blit(source, renderer.downsampledDepth, renderer.depthMat, 1);  //Just copy it.
 
-             }        
 
-   
 
-             //1. Raymarch
 
-             SetRaymarchShader(cam,renderer, quality);
 
-             renderer.raymarchMat.SetTexture("_MainTex", source);
 
-             Graphics.Blit(source,renderer.undersampleBuffer,renderer.raymarchMat);
 
-             //Pass 2: Reprojection
 
-             if(cam.cameraType != CameraType.Reflection)
 
-             {
 
-                 if(renderer.reprojectMat == null)
 
-                    renderer.reprojectMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsReproject"));
 
-                 SetReprojectShader(cam, renderer, quality);
 
-     
 
-                 if (renderer.firstFrame) 
 
-                 {
 
-                     Graphics.Blit(renderer.undersampleBuffer, renderer.fullBuffer[renderer.fullBufferIndex]);
 
-                 }
 
-                 renderer.reprojectMat.SetTexture("_MainTex", renderer.fullBuffer[renderer.fullBufferIndex]);
 
-                 Graphics.Blit(renderer.fullBuffer[renderer.fullBufferIndex], renderer.fullBuffer[renderer.fullBufferIndex ^ 1], renderer.reprojectMat);
 
-             } 
 
-             //Pass 3: Lighting and Blending
 
-             if(renderer.blendAndLightingMat == null)
 
-                renderer.blendAndLightingMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsBlend"));
 
-             SetBlendShader(cam,renderer);
 
-             renderer.blendAndLightingMat.SetTexture("_MainTex", source);
 
-             Graphics.Blit(source, destination, renderer.blendAndLightingMat);
 
-   
 
-             renderer.prevV = cam.worldToCameraMatrix;
 
-             renderer.firstFrame = false;
 
-             UnityEngine.Profiling.Profiler.EndSample();
 
-         }
 
-  #if ENVIRO_URP
 
-         public void RenderVolumetricCloudsURP(UnityEngine.Rendering.Universal.RenderingData renderingData, EnviroURPRenderPass pass, UnityEngine.Rendering.CommandBuffer cmd,  RenderTexture source, UnityEngine.Rendering.RenderTargetIdentifier destination, EnviroVolumetricCloudRenderer renderer, EnviroQuality quality)
 
-         {
 
-             UnityEngine.Profiling.Profiler.BeginSample("Enviro Clouds Rendering");
 
-             int downsampling = settingsQuality.downsampling;
 
-             if(quality != null)
 
-                downsampling = quality.volumetricCloudsOverride.downsampling;
 
-             int width = renderingData.cameraData.camera.pixelWidth / downsampling;
 
-             int height = renderingData.cameraData.camera.pixelHeight / downsampling;
 
-             if(renderingData.cameraData.camera.cameraType != CameraType.Reflection)
 
-             {
 
-                 if (renderer.fullBuffer == null || renderer.fullBuffer.Length != 2)
 
-                 {
 
-                     renderer.fullBuffer = new RenderTexture[2];
 
-                 }
 
-                 renderer.fullBufferIndex = (renderer.fullBufferIndex + 1) % 2;
 
-         
 
-             renderer.firstFrame |= CreateRenderTexture(ref renderer.fullBuffer[0], width, height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,source.descriptor);
 
-             renderer.firstFrame |= CreateRenderTexture(ref renderer.fullBuffer[1], width, height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,source.descriptor);
 
-             }  
 
-             
 
-             renderer.firstFrame |= CreateRenderTexture(ref renderer.undersampleBuffer, width , height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,source.descriptor);
 
-             renderer.frame++;
 
-  
 
-             if(renderer.frame > 64)
 
-               renderer.frame = 0;   
 
-  
 
-             if(renderer.depthMat == null)
 
-                renderer.depthMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsDepth"));
 
-             
 
-             SetToURP(renderer.depthMat);   
 
-             CreateRenderTexture(ref renderer.downsampledDepth, width, height, RenderTextureFormat.RFloat, FilterMode.Point, source.descriptor);
 
-             
 
-             if (downsampling > 1) 
 
-             {
 
-                 pass.CustomBlit(cmd,renderingData.cameraData.camera.cameraToWorldMatrix,source,renderer.downsampledDepth,renderer.depthMat,0);
 
-             } 
 
-             else 
 
-             {
 
-                 pass.CustomBlit(cmd,renderingData.cameraData.camera.cameraToWorldMatrix,source,renderer.downsampledDepth,renderer.depthMat,1);
 
-             }        
 
-   
 
-             //1. Raymarch
 
-             
 
-             SetRaymarchShader(renderingData.cameraData.camera,renderer, quality);
 
-            
 
-             SetToURP(renderer.raymarchMat);     
 
-             pass.CustomBlit(cmd,renderingData.cameraData.camera.cameraToWorldMatrix,source,renderer.undersampleBuffer,renderer.raymarchMat);
 
-   
 
-             //Pass 2: Reprojection
 
-             if(renderingData.cameraData.camera.cameraType != CameraType.Reflection)
 
-             {     
 
-                 if(renderer.reprojectMat == null)
 
-                    renderer.reprojectMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsReproject"));
 
-                 SetReprojectShader(renderingData.cameraData.camera, renderer, quality);
 
-                 SetToURP(renderer.reprojectMat);
 
-                 
 
-                 if (renderer.firstFrame) 
 
-                     pass.CustomBlit(cmd,renderingData.cameraData.camera.cameraToWorldMatrix,renderer.undersampleBuffer,renderer.fullBuffer[renderer.fullBufferIndex]);
 
-                 pass.CustomBlit(cmd,renderingData.cameraData.camera.cameraToWorldMatrix,renderer.fullBuffer[renderer.fullBufferIndex],renderer.fullBuffer[renderer.fullBufferIndex ^ 1],renderer.reprojectMat);
 
-             }
 
-             //Pass 3: Lighting and Blending       
 
-             if(renderer.blendAndLightingMat == null)
 
-                renderer.blendAndLightingMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsBlend"));
 
-             SetBlendShader(renderingData.cameraData.camera,renderer);
 
-             SetToURP(renderer.blendAndLightingMat); 
 
-             pass.CustomBlit(cmd,renderingData.cameraData.camera.cameraToWorldMatrix,source,destination,renderer.blendAndLightingMat);
 
-             renderer.prevV = renderingData.cameraData.camera.worldToCameraMatrix;
 
-             renderer.firstFrame = false;
 
-  
 
-             UnityEngine.Profiling.Profiler.EndSample();
 
-         }
 
- #endif
 
- #if ENVIRO_HDRP 
 
-         public void RenderVolumetricCloudsHDRP(Camera cam, UnityEngine.Rendering.CommandBuffer cmd, UnityEngine.Rendering.RTHandle source, UnityEngine.Rendering.RTHandle destination, EnviroVolumetricCloudRenderer renderer, EnviroQuality quality)
 
-         { 
 
-             //UnityEngine.Profiling.Profiler.BeginSample("Enviro Clouds Rendering");
 
-  
 
-             int downsampling = settingsQuality.downsampling;
 
-             if(quality != null)
 
-                downsampling = quality.volumetricCloudsOverride.downsampling;
 
-             int width = cam.pixelWidth / downsampling;
 
-             int height = cam.pixelHeight / downsampling;
 
-             RenderTextureDescriptor desc = source.rt.descriptor;
 
-             desc.dimension = UnityEngine.Rendering.TextureDimension.Tex2D;
 
-   
 
-             if(cam.cameraType != CameraType.Reflection)
 
-             {
 
-                 if (renderer.fullBuffer == null || renderer.fullBuffer.Length != 2)
 
-                 {
 
-                     renderer.fullBuffer = new RenderTexture[2];
 
-                     renderer.fullBufferHandles = new UnityEngine.Rendering.RTHandle[2];
 
-                 }
 
-                 renderer.fullBufferIndex = (renderer.fullBufferIndex + 1) % 2;
 
-                 renderer.firstFrame |= CreateRenderTexture(ref renderer.fullBuffer[0], width, height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,desc);
 
-                 renderer.firstFrame |= CreateRenderTexture(ref renderer.fullBuffer[1], width, height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,desc);
 
-                 
 
-                 renderer.fullBufferHandles[0] = UnityEngine.Rendering.RTHandles.Alloc(renderer.fullBuffer[0]);
 
-                 renderer.fullBufferHandles[1] = UnityEngine.Rendering.RTHandles.Alloc(renderer.fullBuffer[1]);     
 
-             }
 
-             renderer.firstFrame |= CreateRenderTexture(ref renderer.undersampleBuffer, width , height, RenderTextureFormat.ARGBHalf, FilterMode.Bilinear,desc);
 
-             renderer.undersampleBufferHandle = UnityEngine.Rendering.RTHandles.Alloc(renderer.undersampleBuffer);
 
-             renderer.frame++; 
 
-             if(renderer.frame > 64)
 
-               renderer.frame = 0;   
 
-  
 
-             if(renderer.depthMat == null)
 
-                renderer.depthMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsDepthHDRP"));
 
-  
 
-             CreateRenderTexture(ref renderer.downsampledDepth, width, height, RenderTextureFormat.RFloat, FilterMode.Point, desc);
 
-             renderer.downsampledDepthHandle = UnityEngine.Rendering.RTHandles.Alloc(renderer.downsampledDepth);      
 
-             renderer.depthMat.SetTexture("_MainTex", source);
 
-             if (downsampling > 1) 
 
-             {
 
-                 cmd.Blit(source, renderer.downsampledDepthHandle, renderer.depthMat, 0);  //Downsample the texture.
 
-             } 
 
-             else 
 
-             {
 
-                 cmd.Blit(source, renderer.downsampledDepthHandle, renderer.depthMat, 1);  //Just copy it.
 
-             }        
 
-            
 
-             //1. Raymarch
 
-             SetRaymarchShader(cam,renderer, quality);
 
-             renderer.raymarchMat.SetTexture("_MainTex", source);
 
-             cmd.Blit(source,renderer.undersampleBufferHandle,renderer.raymarchMat);
 
-             //Pass 2: Reprojection
 
-             if(cam.cameraType != CameraType.Reflection)
 
-             {
 
-                 if(renderer.reprojectMat == null)
 
-                    renderer.reprojectMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsReproject"));
 
-                 SetReprojectShader(cam, renderer, quality);
 
-     
 
-                 if (renderer.firstFrame) 
 
-                 {
 
-                     cmd.Blit(renderer.undersampleBufferHandle, renderer.fullBufferHandles[renderer.fullBufferIndex]);
 
-                 }
 
-  
 
-                 renderer.reprojectMat.SetTexture("_MainTex", renderer.fullBufferHandles[renderer.fullBufferIndex]);
 
-                 cmd.Blit(renderer.fullBufferHandles[renderer.fullBufferIndex], renderer.fullBufferHandles[renderer.fullBufferIndex ^ 1], renderer.reprojectMat);
 
-             }
 
-             //Pass 3: Lighting and Blending
 
-             if(renderer.blendAndLightingMat == null)
 
-                renderer.blendAndLightingMat = new Material(Shader.Find("Hidden/EnviroVolumetricCloudsBlendHDRP"));
 
-             SetBlendShader(cam,renderer);
 
-             renderer.blendAndLightingMat.SetTexture("_MainTex", source); 
 
-             cmd.Blit(source, destination, renderer.blendAndLightingMat);
 
-             renderer.prevV = cam.worldToCameraMatrix;
 
-             renderer.firstFrame = false;
 
-             //UnityEngine.Profiling.Profiler.EndSample();
 
-         }
 
- #endif
 
-         void SetRaymarchShader (Camera cam, EnviroVolumetricCloudRenderer renderer, EnviroQuality quality)
 
-         {
 
-             if(renderer.raymarchMat == null)
 
-                renderer.raymarchMat = new Material(Shader.Find("Hidden/EnviroCloudsRaymarch"));
 
-     
 
-             if(dirLight == null)
 
-             {
 
-                dirLight = EnviroHelper.GetDirectionalLight();
 
-             }
 
-             //Check if we use dual lightmode and change the light only in that case. Otherwise keep it to the cached one.
 
-             else if (EnviroManager.instance.Lighting != null && EnviroManager.instance.Lighting.Settings.lightingMode == EnviroLighting.LightingMode.Dual)
 
-             {
 
-                dirLight = EnviroHelper.GetDirectionalLight();
 
-             }
 
-             EnviroCloudLayerSettings layer1 = settingsLayer1;
 
-             EnviroCloudLayerSettings layer2 = settingsLayer2;
 
-             EnviroCloudGlobalSettings global = settingsGlobal;
 
-             
 
-             float blueNoiseIntensity = settingsQuality.blueNoiseIntensity;
 
-             float lodDistance = settingsQuality.lodDistance;
 
-             Vector4 steps = new Vector4(settingsQuality.stepsLayer1,settingsQuality.stepsLayer1,settingsQuality.stepsLayer2,settingsQuality.stepsLayer2);
 
-             int downsample = settingsQuality.downsampling;
 
-             if(quality != null)
 
-             {
 
-                 blueNoiseIntensity = quality.volumetricCloudsOverride.blueNoiseIntensity;
 
-                 steps = new Vector4(quality.volumetricCloudsOverride.stepsLayer1,quality.volumetricCloudsOverride.stepsLayer1,quality.volumetricCloudsOverride.stepsLayer2,quality.volumetricCloudsOverride.stepsLayer2);
 
-                 lodDistance = quality.volumetricCloudsOverride.lodDistance;
 
-                 downsample = quality.volumetricCloudsOverride.downsampling;
 
-             }
 
-                    
 
-             //Textures
 
-             renderer.raymarchMat.SetTexture("_Noise", settingsGlobal.noise);
 
-             renderer.raymarchMat.SetTexture("_DetailNoise", settingsGlobal.detailNoise); 
 
-             renderer.raymarchMat.SetTexture("_CurlNoise", settingsGlobal.curlTex);
 
-             if(weatherMap != null)
 
-                 renderer.raymarchMat.SetTexture("_WeatherMap",weatherMap);
 
-             //Matrix
 
-             if(UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRSettings.stereoRenderingMode == UnityEngine.XR.XRSettings.StereoRenderingMode.SinglePassInstanced)
 
-             {
 
-                 renderer.raymarchMat.SetMatrix("_InverseProjection", cam.GetStereoProjectionMatrix(Camera.StereoscopicEye.Left).inverse);
 
-                 renderer.raymarchMat.SetMatrix("_InverseRotation", cam.GetStereoViewMatrix(Camera.StereoscopicEye.Left).inverse);
 
-                 renderer.raymarchMat.SetMatrix("_InverseProjectionRight", cam.GetStereoProjectionMatrix(Camera.StereoscopicEye.Right).inverse);
 
-                 renderer.raymarchMat.SetMatrix("_InverseRotationRight", cam.GetStereoViewMatrix(Camera.StereoscopicEye.Right).inverse);
 
-             }
 
-             else
 
-             {
 
-                 renderer.raymarchMat.SetMatrix("_InverseProjection", cam.projectionMatrix.inverse);
 
-                 renderer.raymarchMat.SetMatrix("_InverseRotation", cam.cameraToWorldMatrix);
 
-             }
 
-    
 
-             renderer.raymarchMat.SetVector("_CameraPosition", cam.transform.position);
 
-             renderer.raymarchMat.SetVector("_Steps", steps);
 
-             
 
-             if(dirLight != null)
 
-             renderer.raymarchMat.SetVector("_LightDir", -dirLight.transform.forward);  
 
-             else
 
-             renderer.raymarchMat.SetVector("_LightDir", Vector3.zero);  
 
-             renderer.raymarchMat.SetVector("_CloudsNoiseSettings", new Vector4(layer1.baseNoiseUV, layer1.detailNoiseUV, layer2.baseNoiseUV, layer2.detailNoiseUV));
 
-             renderer.raymarchMat.SetVector("_CloudsLighting", new Vector4(layer1.scatteringIntensity, 0f, 0f, layer1.silverLiningSpread));
 
-             renderer.raymarchMat.SetVector("_CloudsLighting2", new Vector4(layer2.scatteringIntensity, 0f, 0f, layer2.silverLiningSpread));
 
-             
 
-             renderer.raymarchMat.SetVector("_CloudsLightingExtended", new Vector4(layer1.powderIntensity, layer1.curlIntensity, layer1.lightStepModifier, layer1.lightAbsorbtion));   
 
-             renderer.raymarchMat.SetVector("_CloudsLightingExtended2", new Vector4(layer2.powderIntensity, layer2.curlIntensity, layer2.lightStepModifier, layer2.lightAbsorbtion));
 
-             renderer.raymarchMat.SetVector("_CloudsMultiScattering", new Vector4(layer1.multiScatteringA, layer1.multiScatteringB, layer1.multiScatteringC, 0));
 
-             renderer.raymarchMat.SetVector("_CloudsMultiScattering2", new Vector4(layer2.multiScatteringA, layer2.multiScatteringB, layer2.multiScatteringC, 0));
 
-             
 
-             renderer.raymarchMat.SetVector("_CloudsParameter", new Vector4(layer1.bottomCloudsHeight, layer1.topCloudsHeight, 1 / (layer1.topCloudsHeight - layer1.bottomCloudsHeight), settingsGlobal.cloudsWorldScale));
 
-             renderer.raymarchMat.SetVector("_CloudsParameter2", new Vector4(layer2.bottomCloudsHeight, layer2.topCloudsHeight, 1 / (layer2.topCloudsHeight - layer2.bottomCloudsHeight), settingsGlobal.cloudsWorldScale));
 
-   
 
-             renderer.raymarchMat.SetVector("_CloudDensityScale", new Vector4(layer1.density, layer2.density, blueNoiseIntensity, 0f));
 
-             renderer.raymarchMat.SetVector("_CloudsCoverageSettings", new Vector4(layer1.coverage, 0f, layer1.anvilBias, layer2.anvilBias));
 
-             renderer.raymarchMat.SetVector("_CloudsAnimation", new Vector4(cloudAnimLayer1.x, cloudAnimLayer1.y, cloudAnimLayer1.z, 0f));
 
-             renderer.raymarchMat.SetVector("_CloudsWindDirection", new Vector4(settingsLayer1.cloudsWindDirectionX, settingsLayer1.cloudsWindDirectionY, cloudAnimNonScaled.x,cloudAnimNonScaled.y));
 
-             renderer.raymarchMat.SetVector("_CloudsErosionIntensity", new Vector4(1f - layer1.baseErosionIntensity, layer1.detailErosionIntensity,1f - layer2.baseErosionIntensity, layer2.detailErosionIntensity));
 
-  
 
-             renderer.raymarchMat.SetFloat("_LODDistance", lodDistance);
 
-             renderer.raymarchMat.SetTexture("_DownsampledDepth", renderer.downsampledDepth);
 
-             renderer.raymarchMat.SetInt("_Frame", renderer.frame);
 
-             renderer.raymarchMat.SetTexture("_BlueNoise",settingsGlobal.blueNoise);
 
-             renderer.raymarchMat.SetVector("_Randomness", new Vector4(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value));  
 
-             renderer.raymarchMat.SetVector("_Resolution", new Vector4(renderer.undersampleBuffer.width,renderer.undersampleBuffer.height,downsample,0f));
 
-  
 
-             if(settingsGlobal.dualLayer)
 
-                 renderer.raymarchMat.EnableKeyword("ENVIRO_DUAL_LAYER");
 
-             else
 
-                 renderer.raymarchMat.DisableKeyword("ENVIRO_DUAL_LAYER");
 
-             if(settingsGlobal.cloudShadows)
 
-                 renderer.raymarchMat.EnableKeyword("ENVIRO_CLOUD_SHADOWS");
 
-             else
 
-                 renderer.raymarchMat.DisableKeyword("ENVIRO_CLOUD_SHADOWS");
 
-             SetDepthBlending(renderer.raymarchMat);
 
-         } 
 
-  
 
-         void SetReprojectShader (Camera cam, EnviroVolumetricCloudRenderer renderer, EnviroQuality quality)
 
-         {
 
-           
 
-             float reprojectionBlendTime = settingsQuality.reprojectionBlendTime;
 
-                     
 
-             if(quality != null)
 
-             {
 
-                 reprojectionBlendTime = quality.volumetricCloudsOverride.reprojectionBlendTime;
 
-             }
 
-             SetDepthBlending(renderer.reprojectMat);
 
-         #if ENVIRO_HDRP
 
-             renderer.reprojectMat.SetTexture("_DownsampledDepth", renderer.downsampledDepthHandle);
 
-             renderer.reprojectMat.SetTexture("_UndersampleCloudTex", renderer.undersampleBufferHandle);
 
-         #else
 
-             renderer.reprojectMat.SetTexture("_DownsampledDepth", renderer.downsampledDepth);
 
-             renderer.reprojectMat.SetTexture("_UndersampleCloudTex", renderer.undersampleBuffer);
 
-         #endif         
 
-             if(UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRSettings.stereoRenderingMode == UnityEngine.XR.XRSettings.StereoRenderingMode.SinglePassInstanced) 
 
-             {
 
-                 renderer.reprojectMat.SetMatrix("_PrevVP", renderer.prevV);
 
-                 renderer.reprojectMat.SetVector("_ProjectionExtents", EnviroHelper.GetProjectionExtents(cam,Camera.StereoscopicEye.Left));
 
-                 renderer.reprojectMat.SetVector("_ProjectionExtentsRight", EnviroHelper.GetProjectionExtents(cam,Camera.StereoscopicEye.Right));
 
-             }
 
-             else 
 
-             {
 
-                 renderer.reprojectMat.SetMatrix("_PrevVP", renderer.prevV);
 
-                 renderer.reprojectMat.SetVector("_ProjectionExtents", EnviroHelper.GetProjectionExtents(cam));
 
-             }
 
-             renderer.reprojectMat.SetFloat("_BlendTime", reprojectionBlendTime);
 
-             Matrix4x4 camtowolrd = Matrix4x4.TRS(cam.transform.position, cam.transform.rotation, Vector3.one);
 
-             renderer.reprojectMat.SetMatrix("_CamToWorld",  camtowolrd);
 
-         }
 
-         void SetBlendShader (Camera cam, EnviroVolumetricCloudRenderer renderer)
 
-         {
 
-             SetDepthBlending(renderer.blendAndLightingMat);
 
-             if(UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRSettings.stereoRenderingMode == UnityEngine.XR.XRSettings.StereoRenderingMode.SinglePassInstanced) 
 
-             {
 
-                 renderer.blendAndLightingMat.SetVector("_ProjectionExtents", EnviroHelper.GetProjectionExtents(cam,Camera.StereoscopicEye.Left));
 
-                 renderer.blendAndLightingMat.SetVector("_ProjectionExtentsRight", EnviroHelper.GetProjectionExtents(cam,Camera.StereoscopicEye.Right));
 
-             }
 
-             else  
 
-             {
 
-                 renderer.blendAndLightingMat.SetVector("_ProjectionExtents", EnviroHelper.GetProjectionExtents(cam));
 
-             }
 
-         #if ENVIRO_HDRP
 
-             renderer.blendAndLightingMat.SetTexture("_DownsampledDepth", renderer.downsampledDepthHandle);
 
-             renderer.blendAndLightingMat.SetVector("_DepthHandleScale", new Vector4(1/renderer.downsampledDepthHandle.rtHandleProperties.rtHandleScale.x,1/renderer.downsampledDepthHandle.rtHandleProperties.rtHandleScale.y,1,1));
 
-         #else 
 
-             renderer.blendAndLightingMat.SetTexture("_DownsampledDepth", renderer.downsampledDepth);
 
-         #endif
 
-            
 
-             Matrix4x4 camtowolrd = Matrix4x4.TRS(cam.transform.position, cam.transform.rotation, Vector3.one);
 
-             renderer.blendAndLightingMat.SetMatrix("_CamToWorld",  camtowolrd);
 
-             Color directLightColor;
 
-             if(!EnviroManager.instance.isNight)
 
-             {
 
-                 directLightColor = settingsGlobal.sunLightColorGradient.Evaluate(EnviroManager.instance.solarTime);
 
-             }
 
-             else
 
-             { 
 
-                 directLightColor = settingsGlobal.moonLightColorGradient.Evaluate(EnviroManager.instance.lunarTime);
 
-             }
 
-             renderer.blendAndLightingMat.SetColor("_DirectLightColor", directLightColor);
 
-             renderer.blendAndLightingMat.SetColor("_AmbientColor", settingsGlobal.ambientColorGradient.Evaluate(EnviroManager.instance.solarTime) * settingsGlobal.ambientLighIntensity);
 
-             renderer.blendAndLightingMat.SetFloat("_AtmosphereColorSaturateDistance",settingsGlobal.atmosphereColorSaturateDistance);
 
-             
 
-             //We don't use reprojection pass for reflections.
 
-         #if ENVIRO_HDRP
 
-             if(cam.cameraType == CameraType.Reflection)
 
-             {
 
-                renderer.blendAndLightingMat.SetTexture("_CloudTex", renderer.undersampleBufferHandle);
 
-                renderer.blendAndLightingMat.SetVector("_HandleScales", new Vector4(1 / renderer.undersampleBufferHandle.rtHandleProperties.rtHandleScale.x, 1 / renderer.undersampleBufferHandle.rtHandleProperties.rtHandleScale.y,1,1));
 
-             }  
 
-             else
 
-             {
 
-                renderer.blendAndLightingMat.SetTexture("_CloudTex", renderer.fullBufferHandles[renderer.fullBufferIndex ^ 1]);
 
-                renderer.blendAndLightingMat.SetVector("_HandleScales", new Vector4(1/ renderer.fullBufferHandles[renderer.fullBufferIndex ^ 1].rtHandleProperties.rtHandleScale.x, 1/ renderer.fullBufferHandles[renderer.fullBufferIndex ^ 1].rtHandleProperties.rtHandleScale.y,1,1));
 
-             }
 
-         #else
 
-             if(cam.cameraType == CameraType.Reflection)
 
-             {
 
-                renderer.blendAndLightingMat.SetTexture("_CloudTex", renderer.undersampleBuffer);
 
-             }  
 
-             else
 
-             {
 
-                renderer.blendAndLightingMat.SetTexture("_CloudTex", renderer.fullBuffer[renderer.fullBufferIndex ^ 1]);
 
-             } 
 
-         #endif
 
-         }
 
-          private void SetDepthBlending(Material mat)
 
-         {        
 
-             if(settingsGlobal.depthBlending)
 
-                 mat.EnableKeyword("ENVIRO_DEPTH_BLENDING");
 
-             else
 
-                 mat.DisableKeyword("ENVIRO_DEPTH_BLENDING");
 
-         }
 
-         private void SetToURP(Material mat)
 
-         {        
 
-             mat.EnableKeyword("ENVIROURP");
 
-         }
 
-         public bool CreateRenderTexture(ref RenderTexture texture, int width, int height, RenderTextureFormat format, FilterMode filterMode, RenderTextureDescriptor dsc)
 
-         {
 
-             if(texture != null && (texture.width != width || texture.height != height || texture.vrUsage != dsc.vrUsage))
 
-             {
 
-                 DestroyImmediate(texture);
 
-                 texture = null;             
 
-             }
 
-             if(texture == null)
 
-             {
 
-                 RenderTextureDescriptor d = dsc;
 
-                 d.width = width;
 
-                 d.height = height;
 
-                 d.colorFormat = format;
 
-                 d.depthBufferBits = 0;
 
-                 texture = new RenderTexture(d);
 
-                 texture.antiAliasing = 1;
 
-                 texture.useMipMap = false;
 
-                 texture.filterMode = filterMode;
 
-                 texture.Create();
 
-                 return true;
 
-             }
 
-             else
 
-             {
 
-                 return false;
 
-             }
 
-         }
 
-   
 
-         public RenderTexture RenderWeatherMap()
 
-         {
 
-             if(weatherMapMat == null)
 
-                weatherMapMat = new Material(Shader.Find("Enviro3/Standard/WeatherTexture"));
 
-             if (weatherMap == null)
 
-             {
 
-                 weatherMap = new RenderTexture(512, 512, 0, RenderTextureFormat.ARGBFloat);
 
-                 weatherMap.wrapMode = TextureWrapMode.Repeat;                   
 
-             } 
 
-   
 
-             weatherMapMat.SetFloat("_CoverageLayer1",settingsLayer1.coverage);    
 
-             weatherMapMat.SetFloat("_WorleyFreq1Layer1", settingsLayer1.worleyFreq1);
 
-             weatherMapMat.SetFloat("_WorleyFreq2Layer1",settingsLayer1.worleyFreq2);
 
-             weatherMapMat.SetFloat("_DilateCoverageLayer1",settingsLayer1.dilateCoverage);
 
-             weatherMapMat.SetFloat("_DilateTypeLayer1",settingsLayer1.dilateType);
 
-             weatherMapMat.SetFloat("_CloudsTypeModifierLayer1",settingsLayer1.cloudsTypeModifier);
 
-             if(settingsGlobal.dualLayer)
 
-             {
 
-                 weatherMapMat.EnableKeyword("ENVIRO_DUAL_LAYER");
 
-                 weatherMapMat.SetFloat("_CoverageLayer2",settingsLayer2.coverage);
 
-                 weatherMapMat.SetFloat("_WorleyFreq1Layer2",settingsLayer2.worleyFreq1);
 
-                 weatherMapMat.SetFloat("_WorleyFreq2Layer2", settingsLayer2.worleyFreq2);
 
-                 weatherMapMat.SetFloat("_DilateCoverageLayer2",settingsLayer2.dilateCoverage);
 
-                 weatherMapMat.SetFloat("_DilateTypeLayer2",settingsLayer2.dilateType); 
 
-                 weatherMapMat.SetFloat("_CloudsTypeModifierLayer2",settingsLayer2.cloudsTypeModifier);
 
-             }
 
-             else
 
-             {
 
-                 weatherMapMat.DisableKeyword("ENVIRO_DUAL_LAYER");
 
-             }
 
-             weatherMapMat.SetVector("_LocationOffset",new Vector4(settingsLayer1.locationOffset.x,settingsLayer1.locationOffset.y,settingsLayer2.locationOffset.x,settingsLayer2.locationOffset.y));
 
-             //weatherMapMat.SetVector("_WindDirection", cloudAnimNonScaled);
 
-             //weatherMapMat.SetFloat("_WindSpeed",settingsLayer1.windIntensity);
 
-             Graphics.Blit(null,weatherMap,weatherMapMat);
 
-             return weatherMap;
 
-         }
 
-         public RenderTexture RenderWeatherMapCS()
 
-         {
 
-             if(weatherMapMat == null)
 
-                weatherMapMat = new Material(Shader.Find("Enviro3/Standard/WeatherMap"));
 
-             if(weatherMapCS == null)
 
-                weatherMapCS = (ComputeShader)Resources.Load("Shader/Clouds/EnviroWeatherMapCS");
 
-             if (weatherMap == null)
 
-             {
 
-                 weatherMap = new RenderTexture(512, 512, 0, RenderTextureFormat.ARGBFloat);
 
-                 weatherMap.wrapMode = TextureWrapMode.Repeat;
 
-                 weatherMap.enableRandomWrite = true;                    
 
-             } 
 
-             weatherMap.enableRandomWrite = true;   
 
-             weatherMapCS.SetFloat("_CoverageLayer1",settingsLayer1.coverage);    
 
-             weatherMapCS.SetFloat("_WorleyFreq1Layer1", settingsLayer1.worleyFreq1);
 
-             weatherMapCS.SetFloat("_WorleyFreq2Layer1",settingsLayer1.worleyFreq2);
 
-             weatherMapCS.SetFloat("_DilateCoverageLayer1",settingsLayer1.dilateCoverage);
 
-             weatherMapCS.SetFloat("_DilateTypeLayer1",settingsLayer1.dilateType);
 
-             weatherMapCS.SetFloat("_CloudsTypeModifierLayer1",settingsLayer1.cloudsTypeModifier);
 
-             if(settingsGlobal.dualLayer)
 
-             { 
 
-                 weatherMapCS.SetFloat("_CoverageLayer2",settingsLayer2.coverage);
 
-                 weatherMapCS.SetFloat("_WorleyFreq1Layer2",settingsLayer2.worleyFreq1);
 
-                 weatherMapCS.SetFloat("_WorleyFreq2Layer2", settingsLayer2.worleyFreq2);
 
-                 weatherMapCS.SetFloat("_DilateCoverageLayer2",settingsLayer2.dilateCoverage);
 
-                 weatherMapCS.SetFloat("_DilateTypeLayer2",settingsLayer2.dilateType); 
 
-                 weatherMapCS.SetFloat("_CloudsTypeModifierLayer2",settingsLayer2.cloudsTypeModifier);
 
-             }
 
-             weatherMapCS.SetVector("_LocationOffset",new Vector4(settingsLayer1.locationOffset.x,settingsLayer1.locationOffset.y,settingsLayer2.locationOffset.x,settingsLayer2.locationOffset.y));
 
-             weatherMapCS.SetVector("_WindDirection", cloudAnimNonScaled);
 
-             weatherMapCS.SetFloat("_WindSpeed",settingsLayer1.windIntensity);
 
-             
 
-             weatherMapCS.SetTexture(0,"Result",weatherMap);
 
-             weatherMapCS.Dispatch(0, 512/16, 512/16, 1);
 
-             return weatherMap;
 
-         } 
 
-         private void UpdateWind()
 
-         {       
 
-             cloudAnimLayer1 += new Vector3((settingsLayer1.windIntensity * settingsLayer1.cloudsWindDirectionX) * Time.deltaTime, (settingsLayer1.windIntensity * settingsLayer1.cloudsWindDirectionY) * Time.deltaTime, -1f * settingsLayer1.windIntensity * Time.deltaTime);
 
-             cloudAnimLayer1 = EnviroHelper.PingPong(cloudAnimLayer1);
 
-             if(settingsGlobal.dualLayer)
 
-             {
 
-                 cloudAnimLayer2 += new Vector3((settingsLayer2.windIntensity * settingsLayer2.cloudsWindDirectionX) * Time.deltaTime, (settingsLayer2.windIntensity * settingsLayer2.cloudsWindDirectionY) * Time.deltaTime, -1f * settingsLayer2.windIntensity * Time.deltaTime);
 
-                 cloudAnimLayer2 = EnviroHelper.PingPong(cloudAnimLayer2);
 
-             }
 
-             cloudAnimNonScaled += new Vector3((settingsLayer1.windIntensity * settingsLayer1.cloudsWindDirectionX) * Time.deltaTime, (settingsLayer1.windIntensity * settingsLayer1.cloudsWindDirectionY) * Time.deltaTime, -1f * settingsLayer1.windIntensity * Time.deltaTime) * 0.1f;
 
-         }
 
-  
 
-         //Save and Load
 
-         public void LoadModuleValues ()
 
-         {
 
-             if(preset != null)
 
-             {
 
-                 settingsLayer1 = JsonUtility.FromJson<Enviro.EnviroCloudLayerSettings>(JsonUtility.ToJson(preset.settingsLayer1));
 
-                 settingsLayer2 = JsonUtility.FromJson<Enviro.EnviroCloudLayerSettings>(JsonUtility.ToJson(preset.settingsLayer2));
 
-                 settingsGlobal = JsonUtility.FromJson<Enviro.EnviroCloudGlobalSettings>(JsonUtility.ToJson(preset.settingsGlobal));
 
-             }
 
-             else
 
-             {
 
-                 Debug.Log("Please assign a saved module to load from!");
 
-             }
 
-         }
 
-         public void SaveModuleValues ()
 
-         {
 
- #if UNITY_EDITOR
 
-         EnviroVolumetricCloudsModule t =  ScriptableObject.CreateInstance<EnviroVolumetricCloudsModule>();
 
-         t.name = "Cloud Module";
 
-         t.settingsLayer1 = JsonUtility.FromJson<Enviro.EnviroCloudLayerSettings>(JsonUtility.ToJson(settingsLayer1));
 
-         t.settingsLayer2 = JsonUtility.FromJson<Enviro.EnviroCloudLayerSettings>(JsonUtility.ToJson(settingsLayer2));
 
-         t.settingsGlobal = JsonUtility.FromJson<Enviro.EnviroCloudGlobalSettings>(JsonUtility.ToJson(settingsGlobal));
 
-         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 (EnviroVolumetricCloudsModule module)
 
-         {
 
-             module.settingsLayer1 = JsonUtility.FromJson<Enviro.EnviroCloudLayerSettings>(JsonUtility.ToJson(settingsLayer1));
 
-             module.settingsLayer2 = JsonUtility.FromJson<Enviro.EnviroCloudLayerSettings>(JsonUtility.ToJson(settingsLayer2));
 
-             module.settingsGlobal = JsonUtility.FromJson<Enviro.EnviroCloudGlobalSettings>(JsonUtility.ToJson(settingsGlobal));
 
-             #if UNITY_EDITOR
 
-             UnityEditor.EditorUtility.SetDirty(module);
 
-             UnityEditor.AssetDatabase.SaveAssets();
 
-             #endif
 
-         }
 
-     }
 
- }
 
 
  |