128 lines
4.7 KiB
GLSL
128 lines
4.7 KiB
GLSL
#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;
|
|
}
|