Thanks, dude. You got me started off in the right direction.
#version 400
//Ma-Shell +
//https://www.shadertoy.com/view/ldsGDn +
//https://www.shadertoy.com/view/XdBBzh
uniform sampler2D texture1;
uniform float currenttime;
uniform vec2 buffersize;
uniform bool isbackbuffer;
uniform mat4 projectioncameramatrix;
float time=currenttime/1000.0;
out vec4 fragData0;
vec2 hash22(vec2 p){
vec2 p2 = fract(p * vec2(.1031,.1030));
p2 += dot(p2, p2.yx+19.19);
return fract((p2.x+p2.y)*p2);
}
#define round(x) floor( (x) + .5 )
vec2 wetGlass(vec2 p) {
p += p * 0.1; // distort drops
float t = time;
p *= vec2(.025, .025 * .25);
p.y += t * .25; // make drops fall
vec2 rp = round(p);
vec2 dropPos = p - rp;
vec2 noise = hash22(rp);//randomizes drop placement
dropPos.y *= 4.;
t = t * noise.y + (noise.x*6.28);
vec2 trailPos = vec2(dropPos.x, fract((dropPos.y-t)*2.) * .5 - .25 );
dropPos.y += cos( t + cos(t) ); // make speed vary
float trailMask = clamp(dropPos.y*2.5+.5,0.,1.); // hide trail in front of drop
float dropSize = dot(dropPos,dropPos);
float trailSize = clamp(trailMask*dropPos.y-0.5,0.,1.) + 0.5;
trailSize = dot(trailPos,trailPos) * trailSize * trailSize;
float drop = clamp(dropSize * -60.+ 3.*noise.y, 0., 1.);
float trail = clamp(trailSize * -60.+ .5*noise.y, 0., 1.);
trail *= trailMask; // hide trail in front of drop
return drop * dropPos + trailPos * trail;
}
float rain(vec2 uv, float scale, float time)
{
float w=smoothstep(1.0,0.0,-uv.y*(scale/10.0));
if(w<0.2)return 0.0;
uv+=time/scale;
uv.y+=time*2.0/scale;
uv.x+=sin(uv.y+time*.5)/scale;
uv*=scale;
vec2 s=floor(uv),f=fract(uv),p;
float k=3.0,d;
p=.5+.35*sin(11.0*fract(sin((s+scale)*mat2(vec2(7,3),vec2(6,5)))*7.0))-f;
d=length(p);
k=min(d,k);
k=smoothstep(0.003,k,sin(f.x+f.y)*0.01); //particle size sort of
return k*w;
}
void main(void)
{
vec2 uv=(gl_FragCoord.xy/buffersize);
if (isbackbuffer) uv.y = 1.0 - uv.y;
vec2 position = ( gl_FragCoord.xy - buffersize.xy* 0.5 ) / buffersize.x;
position.y+=projectioncameramatrix[1][3];
position.y-=1.0;
float angle = atan(position.y,position.x)/(0.5*3.14159265359);
vec4 color = texture(texture1,uv);
float c=smoothstep(1.0,0.3,clamp(uv.y*.3+.8,0.0,.75));
c+=rain(uv,20.0*angle,time)*.5;
c+=rain(uv-5,15.0*angle,time)*.8;
c+=rain(uv+5,10.0*angle,time);
c+=rain(uv+7,8.0*angle,time);
c+=rain(uv-5,6.0*angle,time);
c+=rain(uv,4.0*angle,time);
vec3 rainfall=(vec3(c));
uv += wetGlass(gl_FragCoord.xy/1.5);
fragData0 = texture(texture1, uv)/1.5+vec4( rainfall.r+color )*.3;
}