#version 450 // Name: New Leaked 3I/Atlas NASA Footage // Author: msm01 // URL: https://www.shadertoy.com/view/3ftcRr layout(location = 0) in vec2 vUV; layout(location = 0) out vec4 FragColor; layout(set = 3, binding = 0) uniform ShadertoyUBO { float iTime; vec2 iResolution; }; #define s(a,b,c) smoothstep(a,b,c) #define PI 3.14159 #define NBCaps 3. mat2 r2d(float a) { float c = cos(a), s = sin(a); return mat2(c, s, -s, c); } float metaDiamond(vec2 p, vec2 pixel, float r) { vec2 d = abs(p - pixel); return r / (d.x + d.y); } float hash12(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * .1031); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.x + p3.y) * p3.z); } float fbm(in vec2 v_p) { float pvpx = v_p.x; vec2 V1 = vec2(floor(pvpx)); vec2 V2 = vec2(floor(pvpx + 1.0)); return mix(hash12(V1), hash12(V2), smoothstep(0.0, 1.0, fract(pvpx))); } void mainImage(out vec4 fragColor, in vec2 fragCoord) { vec2 p = vec2((1.0 / iResolution.y) * (fragCoord.x - iResolution.x / 2.0), fragCoord.y / iResolution.y - 0.5); p.x = -p.x; p *= 150.0; vec4 col = vec4(0.05, 0.05, 0.15, 1.0); vec2 save1 = p; vec2 save2 = p; p *= r2d(-0.05); col = mix(col, vec4(0.2, 0.3, 0.5, 1.0), smoothstep(75.0, 0.0, abs(p.y - 5.0 * fbm(vec2(0.01 * (p.x - 33.333 * iTime))) + 3.5))); p *= r2d(0.05); p *= r2d(-0.05); p *= 0.35; p += vec2(-5.0 * iTime, 0.0); vec2 b = fract(5.0 * p); p = floor(5.0 * p); if (fbm(vec2(p.x * p.y)) > 0.996) col += clamp(1.0 - pow(3.0 * length(b + vec2(-0.5)), 0.5), 0.0, 1.0); p = save1; vec2 save3; float Nb_Capsules = clamp(NBCaps, 0.0, 4.0); for (float i = 0.0; i < Nb_Capsules; i++) { p = save1; p *= r2d(-0.05); p *= 2.5; p *= 1.0 - 0.25 * i; p += vec2(150.0 * fbm(vec2(0.15 * iTime + i * 54.321)) - 75.0, 50.0 * sin(0.25 * iTime + i * 54.321) - 25.0); save3 = p; p *= 0.04; p.y = abs(p.y); if (p.x > 0.0) { col += vec4(0.0, 1.0, 0.5, 1.0) * smoothstep(0.2, 0.0, abs(p.y - 0.05 * fbm(vec2(1.5 * p.x - 40.0 * iTime))) - 0.05) * smoothstep(29.0, 0.0, abs(p.x)); col += vec4(1.0, 1.0, 1.0, 1.0) * smoothstep(0.1, 0.0, abs(p.y - 0.05 * fbm(vec2(1.5 * p.x - 40.0 * iTime))) - 0.05) * smoothstep(29.0, 0.0, abs(p.x)); } p = save3; p.y = abs(p.y); p += vec2(-10.0, 0.0); p *= vec2(0.75, 1.0); col += 0.8 * vec4(0.0, 1.0, 0.5, 1.0) * s(20.0, 0.0, length(p) - 25.0 + 7.0 * sin(0.30 * length(p) * atan(p.y, p.x) + 55.0 * iTime)); col += 0.8 * vec4(1.0, 1.0, 1.0, 1.0) * s(20.0, 0.0, length(p) - 20.0 + 7.0 * sin(0.30 * length(p) * atan(p.y, p.x) + 55.0 * iTime)); p = save3; col = mix(col, vec4(1.0), 0.5 * s(10.0, 0.0, length(p + vec2(5.0, 0.0)) - 20.0) * abs(sin(50.0 * iTime))); col = mix(col, vec4(1.0), 0.5 * s(20.0, 0.0, length(p + vec2(5.0, 0.0)) - 20.0)); col = mix(col, vec4(1.0), s(0.01, 0.0, length(p) - 20.0)); if (length(p) - 20.0 < 0.0) { col = mix(col, vec4(0.65, 0.68, 0.68 + 0.1 * (3.0 - i), 1.0), s(0.5, 0.0, length(p - vec2(2.0, 0.0)) - 17.0)); if (s(0.0, 1.0, length(vec2(3.0, 2.0) * p + vec2(33.5, 0.0)) - 23.0) > 0.0) col = mix(col, vec4(0.45, 0.55, 0.55 + 0.1 * (3.0 - i), 1.0), 0.75 * s(0.5, 0.0, length(p - vec2(2.0, 0.0) + 0.5 * fbm(vec2(4.5 * atan(p.y, p.x)))) - 9.0)); col = mix(col, vec4(0.0), s(0.2, 0.0, abs(length(p) - 19.9) - 0.20)); col = mix(col, vec4(0.5, 0.2, 0.3, 1.0) - s(5.0, 0.0, length(p + vec2(-6.0, 15.0)) - 20.0) - s(0.25, 0.0, abs(length(p + vec2(0.0, 3.0)) - 15.0) - 0.4) - s(0.0, 1.5, p.y - 8.5) + 0.25 * vec4(1.0, 0.5, 0.0, 1.0) * s(10.0, 0.0, abs(p.y)) , s(0.5, 0.0, length(vec2(3.0, 2.0) * p + vec2(35.0, 0.0)) - 19.9)); col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(35.0, 0.0)) - 19.9) - 0.1)); col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(33.5, 0.0)) - 23.0) - 0.1)); if (p.y > 0.0) col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(29.0, 0.0)) - 30.0) - 0.1)); if (p.y < 0.0) col = mix(col, vec4(0.0, 0.0, 0.0, 1.0), s(1.0, 0.0, abs(length(vec2(3.0, 2.0) * p + vec2(-31.0, 0.0)) - 30.0) - 0.1)); } } fragColor = clamp(col, 0.0, 1.0); } void main() { vec2 fragCoordPixels = vUV * iResolution; vec4 outColor; mainImage(outColor, fragCoordPixels); FragColor = outColor; }