varying vec3 local_pos; uniform float alpha; #define PI 3.141592653589793 #define TWO_PI (2.0 * PI) float fbm(vec3 p, int octaves); float snoise(vec3 p); float clouds(vec3 p); void main() { vec3 lpos = normalize(local_pos); float cval = clouds(lpos * vec3(4.5, 4.5, 4.5)); float alt = min(lpos.y * 2.0 + 0.5, 1.0); //const vec3 col_hor = vec3(0.96, 0.55, 0.98); const vec3 col_hor = vec3(0.95, 0.38, 0.54); const vec3 col_zen = vec3(0.08, 0.18, 0.4); vec3 skycol = mix(col_hor, col_zen, alt); gl_FragColor.rgb = mix(skycol, vec3(0.0, 0.0, 0.0), cval); gl_FragColor.a = alpha; } const float cloud_dens = 0.25; const float cloud_smooth = 1.0; const float cloud_alpha = 0.4; float clouds(vec3 p) { float hor = clamp(p.y * 2.0, 0.0, 1.0); float nval = fbm(p * vec3(0.2, 1.0, 0.2), 5); float res = smoothstep(cloud_dens - cloud_smooth * 0.5, cloud_dens + cloud_smooth * 0.5, nval); return res * hor * cloud_alpha; } float fbm(vec3 p, int octaves) { float res = 0.0; float freq = 1.0; float s = 1.0; for(int i=0; i