89 lines
1.7 KiB
GLSL
89 lines
1.7 KiB
GLSL
#version 450
|
|
|
|
// Name: Just Another Cube
|
|
// Author: mrange
|
|
// URL: https://www.shadertoy.com/view/3XdXRr
|
|
// CC0: Just another cube
|
|
|
|
layout(location = 0) in vec2 vUV;
|
|
layout(location = 0) out vec4 FragColor;
|
|
|
|
layout(set = 3, binding = 0) uniform ShadertoyUBO {
|
|
float iTime;
|
|
vec2 iResolution;
|
|
};
|
|
|
|
mat2 R;
|
|
float d = 1.;
|
|
float z = 0.;
|
|
float G = 9.;
|
|
float M = 1e-3;
|
|
|
|
float D(vec3 p) {
|
|
p.xy *= R;
|
|
p.xz *= R;
|
|
|
|
vec3 S = sin(123. * p);
|
|
|
|
G = min(
|
|
G,
|
|
max(
|
|
abs(length(p) - .6),
|
|
d = pow(dot(p *= p * p * p, p), .125) - .5
|
|
- pow(1. + S.x * S.y * S.z, 8.) / 1e5
|
|
)
|
|
);
|
|
|
|
return d;
|
|
}
|
|
|
|
void mainImage(out vec4 o, vec2 C) {
|
|
vec3 p,
|
|
O,
|
|
r = vec3(iResolution.xy, iResolution.y),
|
|
I = normalize(vec3(C - .5 * r.xy, r.y)),
|
|
B = vec3(1, 2, 9) * M;
|
|
|
|
for (
|
|
R = mat2(cos(.3 * iTime + vec4(0, 11, 33, 0)));
|
|
z < 9. && d > M;
|
|
z += D(p)
|
|
)
|
|
p = z * I,
|
|
p.z -= 2.;
|
|
|
|
O = vec3(0.0);
|
|
|
|
if (z < 9.) {
|
|
for (int i = 0; i < 3; ) {
|
|
r -= r;
|
|
r[i] = M;
|
|
O[i++] = D(p + r) - D(p - r);
|
|
}
|
|
|
|
z = 1. + dot(O = normalize(O), I);
|
|
|
|
r = reflect(I, O);
|
|
|
|
C = (p + r * (5. - p.y) / abs(r.y)).xz;
|
|
|
|
O =
|
|
z * z *
|
|
(
|
|
r.y > 0.
|
|
? 5e2 * smoothstep(5., 4., d = sqrt(length(C * C)) + 1.) * d * B
|
|
: exp(-2. * length(C)) * (B / M - 1.)
|
|
)
|
|
+ pow(1. + O.y, 5.) * B;
|
|
}
|
|
|
|
o = sqrt(O + B / G).xyzx;
|
|
}
|
|
|
|
void main() {
|
|
vec2 fragCoordPixels = vUV * iResolution;
|
|
vec4 outColor;
|
|
mainImage(outColor, fragCoordPixels);
|
|
FragColor = outColor;
|
|
}
|