From 80819daa682f62bb4c5c23e29f137fcb365e387a Mon Sep 17 00:00:00 2001 From: Thorsten Renk Date: Fri, 14 Mar 2014 09:30:45 +0200 Subject: [PATCH] Cloud shadows for random vegetation --- Effects/tree.eff | 453 +++++++++++++++++++++++++++++++++++++++++ Shaders/tree-haze.frag | 25 ++- 2 files changed, 470 insertions(+), 8 deletions(-) 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 @@ /sim/rendering/shaders/wind-effects /environment/sea/surface/wind-from-east-fps /environment/sea/surface/wind-from-north-fps + /local-weather/cloud-shadows/cloudpos-x[0] + /local-weather/cloud-shadows/cloudpos-y[0] + /local-weather/cloud-shadows/cloudpos-x[1] + /local-weather/cloud-shadows/cloudpos-y[1] + /local-weather/cloud-shadows/cloudpos-x[2] + /local-weather/cloud-shadows/cloudpos-y[2] + /local-weather/cloud-shadows/cloudpos-x[3] + /local-weather/cloud-shadows/cloudpos-y[3] + /local-weather/cloud-shadows/cloudpos-x[4] + /local-weather/cloud-shadows/cloudpos-y[4] + /local-weather/cloud-shadows/cloudpos-x[5] + /local-weather/cloud-shadows/cloudpos-y[5] + /local-weather/cloud-shadows/cloudpos-x[6] + /local-weather/cloud-shadows/cloudpos-y[6] + /local-weather/cloud-shadows/cloudpos-x[7] + /local-weather/cloud-shadows/cloudpos-y[7] + /local-weather/cloud-shadows/cloudpos-x[8] + /local-weather/cloud-shadows/cloudpos-y[8] + /local-weather/cloud-shadows/cloudpos-x[9] + /local-weather/cloud-shadows/cloudpos-y[9] + /local-weather/cloud-shadows/cloudpos-x[10] + /local-weather/cloud-shadows/cloudpos-y[10] + /local-weather/cloud-shadows/cloudpos-x[11] + /local-weather/cloud-shadows/cloudpos-y[11] + /local-weather/cloud-shadows/cloudpos-x[12] + /local-weather/cloud-shadows/cloudpos-y[12] + /local-weather/cloud-shadows/cloudpos-x[13] + /local-weather/cloud-shadows/cloudpos-y[13] + /local-weather/cloud-shadows/cloudpos-x[14] + /local-weather/cloud-shadows/cloudpos-y[14] + /local-weather/cloud-shadows/cloudpos-x[15] + /local-weather/cloud-shadows/cloudpos-y[15] + /local-weather/cloud-shadows/cloudpos-x[16] + /local-weather/cloud-shadows/cloudpos-y[16] + /local-weather/cloud-shadows/cloudpos-x[17] + /local-weather/cloud-shadows/cloudpos-y[17] + /local-weather/cloud-shadows/cloudpos-x[18] + /local-weather/cloud-shadows/cloudpos-y[18] + /local-weather/cloud-shadows/cloudpos-x[19] + /local-weather/cloud-shadows/cloudpos-y[19] + /local-weather/cloud-shadows/cloud-shadow-flag @@ -79,6 +120,7 @@ Shaders/tree-haze.vert Shaders/tree-haze.frag + Shaders/cloud-shadowfunc.frag visibility @@ -155,6 +197,211 @@ float windN + + cloudpos1_x + float + cloudpos1_x + + + cloudpos1_y + float + cloudpos1_y + + + cloudpos2_x + float + cloudpos2_x + + + cloudpos2_y + float + cloudpos2_y + + + cloudpos3_x + float + cloudpos3_x + + + cloudpos3_y + float + cloudpos3_y + + + cloudpos4_x + float + cloudpos4_x + + + cloudpos4_y + float + cloudpos4_y + + + cloudpos5_x + float + cloudpos5_x + + + cloudpos5_y + float + cloudpos5_y + + + cloudpos6_x + float + cloudpos6_x + + + cloudpos6_y + float + cloudpos6_y + + + cloudpos7_x + float + cloudpos7_x + + + cloudpos7_y + float + cloudpos7_y + + + cloudpos8_x + float + cloudpos8_x + + + cloudpos8_y + float + cloudpos8_y + + + cloudpos9_x + float + cloudpos9_x + + + cloudpos9_y + float + cloudpos9_y + + + cloudpos10_x + float + cloudpos10_x + + + cloudpos10_y + float + cloudpos10_y + + + cloudpos11_x + float + cloudpos11_x + + + cloudpos11_y + float + cloudpos11_y + + + cloudpos12_x + float + cloudpos12_x + + + cloudpos12_y + float + cloudpos12_y + + + cloudpos13_x + float + cloudpos13_x + + + cloudpos13_y + float + cloudpos13_y + + + cloudpos14_x + float + cloudpos14_x + + + cloudpos14_y + float + cloudpos14_y + + + cloudpos15_x + float + cloudpos15_x + + + cloudpos15_y + float + cloudpos15_y + + + cloudpos16_x + float + cloudpos16_x + + + cloudpos16_y + float + cloudpos16_y + + + cloudpos17_x + float + cloudpos17_x + + + cloudpos17_y + float + cloudpos17_y + + + cloudpos18_x + float + cloudpos18_x + + + cloudpos18_y + float + cloudpos18_y + + + cloudpos19_x + float + cloudpos19_x + + + cloudpos19_y + float + cloudpos19_y + + + cloudpos20_x + float + cloudpos20_x + + + cloudpos20_y + float + cloudpos20_y + + + cloud_shadow_flag + int + cloud_shadow_flag + 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 windN + + cloudpos1_x + float + cloudpos1_x + + + cloudpos1_y + float + cloudpos1_y + + + cloudpos2_x + float + cloudpos2_x + + + cloudpos2_y + float + cloudpos2_y + + + cloudpos3_x + float + cloudpos3_x + + + cloudpos3_y + float + cloudpos3_y + + + cloudpos4_x + float + cloudpos4_x + + + cloudpos4_y + float + cloudpos4_y + + + cloudpos5_x + float + cloudpos5_x + + + cloudpos5_y + float + cloudpos5_y + + + cloudpos6_x + float + cloudpos6_x + + + cloudpos6_y + float + cloudpos6_y + + + cloudpos7_x + float + cloudpos7_x + + + cloudpos7_y + float + cloudpos7_y + + + cloudpos8_x + float + cloudpos8_x + + + cloudpos8_y + float + cloudpos8_y + + + cloudpos9_x + float + cloudpos9_x + + + cloudpos9_y + float + cloudpos9_y + + + cloudpos10_x + float + cloudpos10_x + + + cloudpos10_y + float + cloudpos10_y + + + cloudpos11_x + float + cloudpos11_x + + + cloudpos11_y + float + cloudpos11_y + + + cloudpos12_x + float + cloudpos12_x + + + cloudpos12_y + float + cloudpos12_y + + + cloudpos13_x + float + cloudpos13_x + + + cloudpos13_y + float + cloudpos13_y + + + cloudpos14_x + float + cloudpos14_x + + + cloudpos14_y + float + cloudpos14_y + + + cloudpos15_x + float + cloudpos15_x + + + cloudpos15_y + float + cloudpos15_y + + + cloudpos16_x + float + cloudpos16_x + + + cloudpos16_y + float + cloudpos16_y + + + cloudpos17_x + float + cloudpos17_x + + + cloudpos17_y + float + cloudpos17_y + + + cloudpos18_x + float + cloudpos18_x + + + cloudpos18_y + float + cloudpos18_y + + + cloudpos19_x + float + cloudpos19_x + + + cloudpos19_y + float + cloudpos19_y + + + cloudpos20_x + float + cloudpos20_x + + + cloudpos20_y + float + cloudpos20_y + + + cloud_shadow_flag + int + cloud_shadow_flag + 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)