diff --git a/Effects/tree.eff b/Effects/tree.eff
index 91a49c2c5..3792d664f 100644
--- a/Effects/tree.eff
+++ b/Effects/tree.eff
@@ -38,6 +38,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -79,6 +120,7 @@
Shaders/tree-haze.vert
Shaders/tree-haze.frag
+ Shaders/cloud-shadowfunc.frag
visibility
@@ -155,6 +197,211 @@
float
+
+ cloudpos1_x
+ float
+
+
+
+ cloudpos1_y
+ float
+
+
+
+ cloudpos2_x
+ float
+
+
+
+ cloudpos2_y
+ float
+
+
+
+ cloudpos3_x
+ float
+
+
+
+ cloudpos3_y
+ float
+
+
+
+ cloudpos4_x
+ float
+
+
+
+ cloudpos4_y
+ float
+
+
+
+ cloudpos5_x
+ float
+
+
+
+ cloudpos5_y
+ float
+
+
+
+ cloudpos6_x
+ float
+
+
+
+ cloudpos6_y
+ float
+
+
+
+ cloudpos7_x
+ float
+
+
+
+ cloudpos7_y
+ float
+
+
+
+ cloudpos8_x
+ float
+
+
+
+ cloudpos8_y
+ float
+
+
+
+ cloudpos9_x
+ float
+
+
+
+ cloudpos9_y
+ float
+
+
+
+ cloudpos10_x
+ float
+
+
+
+ cloudpos10_y
+ float
+
+
+
+ cloudpos11_x
+ float
+
+
+
+ cloudpos11_y
+ float
+
+
+
+ cloudpos12_x
+ float
+
+
+
+ cloudpos12_y
+ float
+
+
+
+ cloudpos13_x
+ float
+
+
+
+ cloudpos13_y
+ float
+
+
+
+ cloudpos14_x
+ float
+
+
+
+ cloudpos14_y
+ float
+
+
+
+ cloudpos15_x
+ float
+
+
+
+ cloudpos15_y
+ float
+
+
+
+ cloudpos16_x
+ float
+
+
+
+ cloudpos16_y
+ float
+
+
+
+ cloudpos17_x
+ float
+
+
+
+ cloudpos17_y
+ float
+
+
+
+ cloudpos18_x
+ float
+
+
+
+ cloudpos18_y
+ float
+
+
+
+ cloudpos19_x
+ float
+
+
+
+ cloudpos19_y
+ float
+
+
+
+ cloudpos20_x
+ float
+
+
+
+ cloudpos20_y
+ float
+
+
+
+ cloud_shadow_flag
+ int
+
+
texture
sampler-2d
@@ -226,6 +473,7 @@
Shaders/tree-haze.vert
Shaders/tree-haze.frag
+ Shaders/cloud-shadowfunc.frag
visibility
@@ -302,6 +550,211 @@
float
+
+ cloudpos1_x
+ float
+
+
+
+ cloudpos1_y
+ float
+
+
+
+ cloudpos2_x
+ float
+
+
+
+ cloudpos2_y
+ float
+
+
+
+ cloudpos3_x
+ float
+
+
+
+ cloudpos3_y
+ float
+
+
+
+ cloudpos4_x
+ float
+
+
+
+ cloudpos4_y
+ float
+
+
+
+ cloudpos5_x
+ float
+
+
+
+ cloudpos5_y
+ float
+
+
+
+ cloudpos6_x
+ float
+
+
+
+ cloudpos6_y
+ float
+
+
+
+ cloudpos7_x
+ float
+
+
+
+ cloudpos7_y
+ float
+
+
+
+ cloudpos8_x
+ float
+
+
+
+ cloudpos8_y
+ float
+
+
+
+ cloudpos9_x
+ float
+
+
+
+ cloudpos9_y
+ float
+
+
+
+ cloudpos10_x
+ float
+
+
+
+ cloudpos10_y
+ float
+
+
+
+ cloudpos11_x
+ float
+
+
+
+ cloudpos11_y
+ float
+
+
+
+ cloudpos12_x
+ float
+
+
+
+ cloudpos12_y
+ float
+
+
+
+ cloudpos13_x
+ float
+
+
+
+ cloudpos13_y
+ float
+
+
+
+ cloudpos14_x
+ float
+
+
+
+ cloudpos14_y
+ float
+
+
+
+ cloudpos15_x
+ float
+
+
+
+ cloudpos15_y
+ float
+
+
+
+ cloudpos16_x
+ float
+
+
+
+ cloudpos16_y
+ float
+
+
+
+ cloudpos17_x
+ float
+
+
+
+ cloudpos17_y
+ float
+
+
+
+ cloudpos18_x
+ float
+
+
+
+ cloudpos18_y
+ float
+
+
+
+ cloudpos19_x
+ float
+
+
+
+ cloudpos19_y
+ float
+
+
+
+ cloudpos20_x
+ float
+
+
+
+ cloudpos20_y
+ float
+
+
+
+ cloud_shadow_flag
+ int
+
+
texture
sampler-2d
diff --git a/Shaders/tree-haze.frag b/Shaders/tree-haze.frag
index 75e1740cc..2e7e9b926 100644
--- a/Shaders/tree-haze.frag
+++ b/Shaders/tree-haze.frag
@@ -27,6 +27,7 @@ uniform float dust_cover_factor;
uniform int quality_level;
uniform int tquality_level;
+uniform int cloud_shadow_flag;
const float EarthRadius = 5800000.0;
const float terminator_width = 200000.0;
@@ -34,6 +35,8 @@ const float terminator_width = 200000.0;
float alt;
float mie_angle;
+float shadow_func (in float x, in float y, in float noise, in float dist);
+
float luminance(vec3 color)
{
return dot(vec3(0.212671, 0.715160, 0.072169), color);
@@ -126,15 +129,16 @@ void main()
- vec3 lightDir = gl_LightSource[0].position.xyz;
- float intensity;
+ vec3 lightDir = gl_LightSource[0].position.xyz;
+ float intensity;
- mie_angle = gl_Color.a;
- vec4 texel = texture2D(texture, gl_TexCoord[0].st);
+ mie_angle = gl_Color.a;
+ vec4 texel = texture2D(texture, gl_TexCoord[0].st);
- float effective_scattering = min(scattering, cloud_self_shading);
+ float effective_scattering = min(scattering, cloud_self_shading);
+ float dist = length(relPos);
-if (quality_level > 3)
+ if (quality_level > 3)
{
// mix dust
vec4 dust_color = vec4 (0.76, 0.71, 0.56, texel.a);
@@ -142,14 +146,19 @@ if (quality_level > 3)
texel = mix(texel, dust_color, clamp(0.6 * dust_cover_factor ,0.0, 1.0) );
}
- vec4 fragColor = vec4 (gl_Color.xyz,1.0) * texel;
+ vec4 fragColor = vec4 (gl_Color.xyz,1.0) * texel;
+
+ if (cloud_shadow_flag == 1)
+ {
+ fragColor.rgb = fragColor.rgb * (0.5 + 0.5 * shadow_func(relPos.x, relPos.y, 1.0, dist));
+ }
// here comes the terrain haze model
float delta_z = hazeLayerAltitude - eye_alt;
-float dist = length(relPos);
+
if (dist > max(40.0, 0.07 * min(visibility,avisibility)))
//if (dist > 40.0)