| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | 
							- Shader "Hidden/EnviroApplyShadows"
 
- {
 
-     Properties
 
-     {
 
-         //_MainTex ("Texture", any) = "white" {}
 
-         //_CloudsTex ("Texture", any) = "white" {}
 
-     }
 
-     SubShader
 
-     {
 
-         // No culling or depth
 
-         Cull Off ZWrite Off ZTest Always
 
-         Pass
 
-         {
 
-             CGPROGRAM
 
-             #pragma vertex vert
 
-             #pragma fragment frag
 
-             #pragma multi_compile __ ENVIROURP
 
-             #include "UnityCG.cginc"
 
-             struct appdata
 
-             {
 
-                 float4 vertex : POSITION;
 
-                 float2 uv : TEXCOORD0;
 
-                 UNITY_VERTEX_INPUT_INSTANCE_ID
 
-             };
 
-             struct v2f
 
-             {
 
-                 float2 uv : TEXCOORD0;
 
-                 float4 vertex : SV_POSITION;
 
-                 UNITY_VERTEX_OUTPUT_STEREO
 
-             };
 
-             v2f vert (appdata v)
 
-             {
 
-                 v2f o;
 
-                 UNITY_SETUP_INSTANCE_ID(v);
 
-                 UNITY_INITIALIZE_OUTPUT(v2f, o);
 
-                 UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
 
-                 #if defined(ENVIROURP)
 
- 		        o.vertex = float4(v.vertex.xyz,1.0);
 
- 		        #if UNITY_UV_STARTS_AT_TOP
 
-                 o.vertex.y *= -1;
 
-                 #endif
 
-                 #else
 
- 		        o.vertex = UnityObjectToClipPos(v.vertex);
 
-                 #endif  
 
-                 o.uv = v.uv;
 
-                 return o;
 
-             }
 
-             float _Intensity;
 
-             //float4x4 _LeftWorldFromView;
 
-             //float4x4 _RightWorldFromView;
 
-             //float4x4 _LeftViewFromScreen;
 
-             //float4x4 _RightViewFromScreen;
 
-             UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex);
 
-             UNITY_DECLARE_SCREENSPACE_TEXTURE(_CloudsTex);
 
-             //UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); 
 
-             //UNITY_DECLARE_SHADOWMAP(_CascadeShadowMapTexture);
 
-             /*float4 GetCascadeWeights_SplitSpheres(float3 wpos)
 
-             {
 
-                 float3 fromCenter0 = wpos - unity_ShadowSplitSpheres[0].xyz;
 
-                 float3 fromCenter1 = wpos - unity_ShadowSplitSpheres[1].xyz;
 
-                 float3 fromCenter2 = wpos - unity_ShadowSplitSpheres[2].xyz;
 
-                 float3 fromCenter3 = wpos - unity_ShadowSplitSpheres[3].xyz;
 
-                 float4 distances2 = float4(dot(fromCenter0,fromCenter0), dot(fromCenter1,fromCenter1), dot(fromCenter2,fromCenter2), dot(fromCenter3,fromCenter3));
 
-                 float4 weights = float4(distances2 >= unity_ShadowSplitSqRadii);
 
-                 return weights;
 
-             }
 
-             float4 GetCascadeShadowCoord(float4 pos, float4 cascadeWeights)
 
-             {
 
-                 return mul(unity_WorldToShadow[(int)dot(cascadeWeights, float4(1,1,1,1))], pos);
 
-             }*/
 
-             float4 frag (v2f i) : SV_Target
 
-             {
 
-                 UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
 
-                 float4 sceneColor = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex,i.uv);
 
-                 float cloudShadows = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CloudsTex,i.uv).b * _Intensity;
 
-                 //float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,i.uv);
 
-                 //float linearDepth = LinearEyeDepth(depth); 
 
-                 /*
 
-                 float4x4 proj, eyeToWorld;
 
- 				if (unity_StereoEyeIndex == 0)
 
- 				{
 
- 					proj = _LeftViewFromScreen;
 
- 					eyeToWorld = _LeftWorldFromView;
 
- 				}
 
- 				else
 
- 				{
 
- 					proj = _RightViewFromScreen;
 
- 					eyeToWorld = _RightWorldFromView;
 
- 				}
 
- 				//bit of matrix math to take the screen space coord (u,v,depth) and transform to world space
 
- 				float2 uvClip = i.uv * 2.0 - 1.0;
 
- 				float clipDepth = depth; // Fix for OpenGl Core thanks to Lars Bertram
 
- 				clipDepth = (UNITY_NEAR_CLIP_VALUE < 0) ? clipDepth * 2 - 1 : clipDepth;
 
- 				float4 clipPos = float4(uvClip, clipDepth, 1.0);
 
- 				float4 viewPos = mul(proj, clipPos); // inverse projection by clip position
 
- 				viewPos /= viewPos.w; // perspective division
 
- 				float3 wpos = mul(eyeToWorld, viewPos).xyz;
 
-  
 
-                 float4 cascadeWeights = GetCascadeWeights_SplitSpheres(wpos);
 
-                 bool inside = dot(cascadeWeights, float4(1, 1, 1, 1)) < 4;
 
-                 float4 samplePos = GetCascadeShadowCoord(float4(wpos, 1), cascadeWeights);
 
-                 float sceneShadow = UNITY_SAMPLE_SHADOW(_CascadeShadowMapTexture, samplePos.xyz).r;
 
-                 
 
-                 float shadowsClouds = clamp((1-cloudShadows),0,1);
 
-                 //float shadowMod = clamp(sceneShadow,0,1);
 
-                  
 
-                 if(linearDepth > 0.99f)
 
-                 {
 
-                    //shadowsClouds = 1.0f;
 
-                    //shadowMod = 1.0f;
 
-                 }
 
-                 else
 
-                 {
 
-                    // shadowsClouds = cloudShadows * shadowMod;
 
-                 }
 
-                 shadowsClouds = cloudShadows * shadowMod;
 
-                 */
 
-                 float shadowsClouds = clamp((1-cloudShadows),0,1);
 
-                 float4 final = float4(sceneColor.rgb * shadowsClouds, sceneColor.a);
 
-                 return final;
 
-             }
 
-             ENDCG
 
-         }
 
-     }
 
- }
 
 
  |