/
sketch.fs
67 lines (53 loc) · 1.24 KB
/
sketch.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#version 300 es
precision highp float;
uniform sampler2D backBuffer;
uniform vec2 resolution;
uniform vec2 mouse;
uniform float time;
in vec2 vUv;
out vec4 outColor;
#define loop(n) for(int i; i < n; i++)
float lt, bt, tt;
vec3 cyc(vec3 p) {
vec4 n;
loop(8) {
p += sin(p.yzx);
n = 2.0 * n + vec4(cross(cos(p), sin(p.zxy)), 1.0);
p *= 2.0;
}
return n.xyz / n.w;
}
mat2 rot(float a) {
float s = sin(a), c = cos(a);
return mat2(c, s, -s, c);
}
float sdf(vec3 p) {
p.y += 13.0;
p.yz *= rot(-time * 0.01);
p += cyc(p * 2.0 + lt) * 0.25;
float final = length(p) - 13.0;
return final * 0.6;
}
void main() {
vec2 uv = vUv, asp = resolution / min(resolution.x, resolution.y), suv = (uv * 2.0 - 1.0) * asp;
vec3 rd = normalize(vec3(suv, -5.0)), ro = vec3(0.0, 0.0, 7.0);
lt = time * 30.0 / 60.0;
bt = floor(lt);
tt = tanh(fract(lt) * 5.0);
lt = bt + tt;
float t, acc;
loop(80) {
vec3 p = rd * t + ro;
float d = sdf(p);
if (d < 1e-4 || 1e4 < t) break;
t += d;
acc += exp(abs(d) * -5.0);
}
float c = acc / 80.0;
vec4 b = texture(backBuffer, vUv);
vec3 col = mix(vec3(c), b.rgb, 0.7);
outColor = vec4(col, 1.0);
}
//----------------------------
// Reference
//----------------------------