You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
83 lines
2.1 KiB
|
|
#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+22.721);
|
|
rain += RainLayer(uv*1.35+111.21,t-102.);
|
|
rain += RainLayer(uv*1.55-232.21,t+10.);
|
|
|
|
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;
|
|
} |