云缝里的橘光
这一幅没能在你的浏览器里编译。
源码stratified domain-warped fbm cloud layers backlit by a breathing radial glow, with rising soft motes
precision mediump float;
uniform vec2 u_resolution;
uniform float u_time;
float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453); }
float noise(vec2 p){
vec2 i = floor(p);
vec2 f = fract(p);
f = f * f * (3.0 - 2.0 * f);
float a = hash(i);
float b = hash(i + vec2(1.0, 0.0));
float c = hash(i + vec2(0.0, 1.0));
float d = hash(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 * noise(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 - 0.5) * asp, uv.y - 0.5);
float t = u_time;
vec2 sp = vec2(0.28, -0.14);
float d = length((p - sp) * vec2(0.6, 1.0));
float breathe = 0.5 + 0.5 * sin(t * 0.25);
float glow = exp(-d * 2.4) * (0.75 + 0.25 * breathe);
vec3 skyTop = vec3(0.44, 0.46, 0.55);
vec3 skyLow = vec3(0.62, 0.58, 0.60);
vec3 col = mix(skyLow, skyTop, uv.y);
col += vec3(1.0, 0.62, 0.34) * glow * 0.5;
for (int i = 0; i < 3; i++) {
float fi = float(i);
vec2 q = vec2(p.x * 1.3 + t * 0.012 * (1.0 + fi), p.y * 4.2 + fi * 3.1);
float w = fbm(q * 0.5 + vec2(t * 0.02, fi));
float n = fbm(q + vec2(w * 1.2, w * 0.4));
float yc = 0.3 - fi * 0.24;
float band = exp(-pow((p.y - yc) * 4.5, 2.0));
float dens = smoothstep(0.32, 0.72, n + band * 0.28 - 0.08);
vec3 cBase = mix(vec3(0.36, 0.37, 0.45), vec3(0.55, 0.54, 0.60), fi * 0.35);
vec3 cloud = cBase + vec3(1.0, 0.68, 0.42) * glow * 0.55 * (1.0 - dens * 0.7);
cloud += vec3(0.05, 0.04, 0.03) * (1.0 - n);
col = mix(col, cloud, dens * (0.8 - fi * 0.1));
}
float seam = exp(-pow((p.y - sp.y - 0.02) * 7.0, 2.0)) * exp(-abs(p.x - sp.x) * 2.0);
col += vec3(0.9, 0.55, 0.3) * seam * 0.18 * (0.8 + 0.2 * breathe);
for (int i = 0; i < 9; i++) {
float fi = float(i);
float h1 = hash(vec2(fi, 1.0));
float h2 = hash(vec2(fi, 2.0));
float h3 = hash(vec2(fi, 3.0));
float y = mod(h2 + t * 0.018 * (0.6 + h3), 1.3) - 0.65;
float x = (h1 - 0.5) * asp + sin(t * 0.3 + fi * 1.7) * 0.03 + (y + 0.65) * 0.08;
vec2 c = vec2(x, y);
float r = 0.016 + 0.01 * h3;
float dd = length(p - c);
float fade = smoothstep(-0.65, -0.4, y) * smoothstep(0.65, 0.35, y);
col += vec3(1.0, 0.86, 0.66) * smoothstep(r * 2.2, r * 0.3, dd) * 0.28 * fade;
}
float vig = smoothstep(1.1, 0.3, length(p * vec2(0.8, 1.1)));
col *= 0.82 + 0.18 * vig;
col = 1.0 - exp(-col * 1.6);
gl_FragColor = vec4(col, 1.0);
}