#iChannel0 "file://./Textures/forrest.jpg" #iChannel0::MinFilter "LinearMipMapLinear" #iChannel0::WrapMode "Mirror" #define S(a,b,c) smoothstep(a,b,c) float size = 4.0; vec2 aspect = vec2(2,1); float N21(vec2 p) { //return fract( sin(p.x*100.0+p.y*6574.0)*5647.0 ); p = fract(p*vec2(233.32, 851.73)); p += dot(p, p+23.45); return fract(p.x*p.y); } vec4 BoxCoords(vec2 uv) { vec2 gv = fract(uv); vec2 id = floor(uv); //standard uv return vec4(gv.x, gv.y, id.x, id.y); } vec3 RainLayer(vec2 uv, float t) { vec2 iuv = uv; uv.y += t * 0.13; uv *= size * aspect; vec4 gv = BoxCoords(uv); gv.xy -= 0.5; float dt = N21(gv.zw); t += dt*6.22134; float w = (iuv.y) * 10.; float x = (dt-0.5)*0.8; x += (.4-abs(x))*sin(3.*w)*pow(sin(w),6.)*0.45; float y = -sin(t+sin(t+sin(t)*0.5))*0.45; y -= (gv.x-x)*(gv.x-x); vec2 dropPos = (gv.xy-vec2(x,y))/aspect; float drop = S(.05, 0.03, length(dropPos)); vec2 trailPos = (gv.xy-vec2(x,t * 0.25))/aspect; trailPos.y = (fract(trailPos.y * 8.)-0.5) /8.; float trail = S(.03, 0.01, length(trailPos)); float fogTrail = S(-.05, .05, dropPos.y); fogTrail *= S(.5, y, gv.y); trail *= fogTrail; fogTrail *= S(0.05, 0.04, abs(dropPos.x)); vec2 offset = drop*dropPos + vec2(trail)*trailPos; offset *= -2.; return vec3(offset, fogTrail); //return vec3(drop,1, fogTrail); } void mainImage ( out vec4 fragColor, in vec2 fragCoord) { vec2 uv = (fragCoord/iResolution.y); float t = iTime; //mod(iTime, 7200.); vec4 col = vec4(0,0,0,1.0); vec3 rain = RainLayer(uv,t); rain += RainLayer(uv*1.2+7.21,t); rain += RainLayer(uv*1.35+1.21,t); rain += RainLayer(uv*1.55-1.21,t); float blur = 4.0*(1.-rain.z); col.rgb = texture(iChannel0, uv + rain.xy, blur).rgb; //col = vec4(rain.xxx,1.); //if (gv.x > 0.48 || gv.y > 0.48) col = vec4(1,0,0,1); //col.rgb = vec3(N21(uv.xy)); fragColor = col; }