Hills Rushing North
This one didn't compile in your browser.
Sourceparallax layered value-noise hills with fbm clouds and sun rays
precision mediump float;
uniform vec2 u_resolution;
uniform float u_time;
float h1(float n){return fract(sin(n*12.9898)*43758.5453);}
float h2(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}
float n1(float x){
float i=floor(x);float f=fract(x);f=f*f*(3.0-2.0*f);
return mix(h1(i),h1(i+1.0),f);
}
float n2(vec2 p){
vec2 i=floor(p);vec2 f=fract(p);f=f*f*(3.0-2.0*f);
float a=h2(i);float b=h2(i+vec2(1.0,0.0));
float c=h2(i+vec2(0.0,1.0));float d=h2(i+vec2(1.0,1.0));
return mix(mix(a,b,f.x),mix(c,d,f.x),f.y);
}
float fbm(vec2 p){
float v=0.0;float a=0.5;
for(int i=0;i<4;i++){v+=a*n2(p);p=p*2.03+vec2(1.7,9.2);a*=0.5;}
return v;
}
void main(){
vec2 uv=gl_FragCoord.xy/u_resolution;
float asp=u_resolution.x/u_resolution.y;
vec2 p=vec2(uv.x*asp,uv.y);
float t=u_time;
vec2 sun=vec2(0.72*asp,0.70);
vec3 sky=mix(vec3(0.97,0.78,0.55),vec3(0.42,0.62,0.78),smoothstep(0.35,1.0,uv.y));
vec2 dv=p-sun;
float d=length(dv);
sky+=vec3(1.0,0.72,0.40)*exp(-d*5.0)*0.45;
float ray=n1(atan(dv.y,dv.x)*5.0+t*0.08);
sky+=vec3(0.9,0.65,0.35)*ray*exp(-d*1.8)*0.18;
float c=fbm(p*vec2(1.4,2.8)+vec2(t*0.035,0.0));
float cm=smoothstep(0.52,0.78,c)*smoothstep(0.4,0.85,uv.y);
vec3 cloudCol=mix(vec3(0.62,0.62,0.70),vec3(0.96,0.86,0.74),smoothstep(0.9,0.2,d));
vec3 col=mix(sky,cloudCol,cm*0.75);
vec3 farC=vec3(0.60,0.58,0.74);
vec3 midC=vec3(0.86,0.55,0.34);
vec3 nearC=vec3(0.42,0.20,0.16);
for(int i=0;i<5;i++){
float fi=float(i);
float dep=fi/4.0;
float spd=0.03+fi*fi*0.035;
float base=0.52-fi*0.095;
float amp=0.05+fi*0.02;
float fr=2.6-fi*0.35;
float x=p.x*fr+t*spd+fi*17.0;
float y=base+amp*(n1(x)*0.72+n1(x*2.3+3.0)*0.28);
vec3 lc=dep<0.5?mix(farC,midC,dep*2.0):mix(midC,nearC,(dep-0.5)*2.0);
lc=mix(lc,sky,(1.0-dep)*0.45);
float rim=smoothstep(0.035,0.0,y-p.y);
lc+=vec3(0.30,0.18,0.06)*rim*(1.0-dep*0.5);
lc*=0.85+0.15*smoothstep(y-0.25,y,p.y);
float m=1.0-smoothstep(y-0.006,y,p.y);
col=mix(col,lc,m);
float mist=exp(-abs(p.y-(base-0.02))*18.0)*(1.0-dep)*0.18;
col=mix(col,vec3(0.95,0.86,0.78),mist*(1.0-m*0.5));
}
vec2 q=vec2(p.x+p.y*0.18,p.y);
float cx=floor(q.x*28.0);
float on=step(0.55,h1(cx));
float fx=abs(fract(q.x*28.0)-0.5);
float ry=fract(q.y*2.5+t*(0.9+h1(cx+3.0)*0.4)+h1(cx+7.0)*10.0);
float streak=smoothstep(0.22,0.08,fx)*smoothstep(0.0,0.1,ry)*smoothstep(0.35,0.1,ry);
col=mix(col,vec3(0.92,0.93,0.97),streak*on*0.16);
vec2 vc=uv-0.5;
col*=1.0-dot(vc,vc)*0.55;
col=clamp(col,0.04,0.95);
gl_FragColor=vec4(col,1.0);
}