#define NUM_MOUNTAINS 15. #define MAX_OCTAVES 8 uniform vec2 u_resolution; uniform float u_time; uniform vec2 u_coords; uniform float u_altitude; float lerp(float value,float min,float max){ return min+(max-min)*value; } float norm(float value,float min,float max){ return (value-min)/(max-min); } float map(float value,float min1,float max1,float min2,float max2){ return lerp(norm(value,min1,max1),min2,max2); } float random(in vec2 st){ return fract(sin(dot(st.xy,vec2(12.9898,78.233)))*43758.5453123); } // Based on Morgan McGuire @morgan3d // https://www.shadertoy.com/view/4dS3Wd float noise(in vec2 st){ vec2 i=floor(st); vec2 f=fract(st); float a=random(i); float b=random(i+vec2(1.,.0)); float c=random(i+vec2(.0,1.)); float d=random(i+vec2(1.,1.)); vec2 u=f*f*(3.-2.*f); return mix(a,b,u.x)+(c-a)*u.y*(1.-u.x)+(d-b)*u.x*u.y; } float fbm(in vec2 n,in int octaves,in float l){ float v=.0; float lacunarity=2.; float a=.5; n*=l; for(int i=0;i=octaves){break;} v+=a*noise(n); n*=lacunarity; a*=.5; } return v; } float plot(vec2 st,float pct){ return 1.-smoothstep(pct,pct+.005,st.y); } void main(){ vec2 st=gl_FragCoord.xy/u_resolution.xy; st.x *=u_resolution.x/u_resolution.y; float m=st.x*.5+.5; vec3 colorA=vec3(1,0.9933333333333335,0.6000000000000001); vec3 colorB=vec3(0,0.98,0.1143333333333339); vec3 color=colorB+vec3(.2,.2,.2); float y; float pct; float scaleFactor; float breakValue=NUM_MOUNTAINS-u_altitude; float i; for(float n=NUM_MOUNTAINS;n>0.;n--){ if(n<=breakValue){break;} i=n-breakValue; scaleFactor=(u_altitude+i)/i*.15; y=scaleFactor*m*(fbm(5.*(m+pow(i,random(vec2(i))))+.001*u_coords+random(vec2(i)*500.),int(map(i,.0,u_altitude,4.,7.)),.4/scaleFactor)-.5)+(i-1.)*1.75/(u_altitude+i); pct=plot(st,y); color=mix(color,vec3(map(i,.0,u_altitude,colorA.r,colorB.r),map(i,.0,u_altitude,colorA.g,colorB.g),map(i,.0,u_altitude,colorA.b,colorB.b)),pct); } gl_FragColor=vec4(color,1.); }










