-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy path029_x_loop.frag
More file actions
165 lines (123 loc) · 3.99 KB
/
Copy path029_x_loop.frag
File metadata and controls
165 lines (123 loc) · 3.99 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/*
daily: 029
author: Will Stallwood
insta: https://www.instagram.com/willstall/
*/
#ifdef GL_ES
precision mediump float;
#endif
#define PI 3.14159265359
#define HALF_PI 1.57079632675
#define TWO_PI 6.283185307
#define SECONDS 5.0
uniform float u_float; // defaults to 0
uniform vec2 u_vec2;
uniform vec3 u_vec3;
uniform vec4 u_vec4;
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
uniform sampler2D u_texture_7;
uniform vec2 u_texture_7Resolution;
vec2 random2(vec2 st){
st = vec2( dot(st,vec2(127.1,311.7)),
dot(st,vec2(269.5,183.3)) );
return -1.0 + 2.0*fract(sin(st)*43758.5453123);
}
// Value Noise by Inigo Quilez - iq/2013
// https://www.shadertoy.com/view/lsf3WH
float v_noise(vec2 st) {
vec2 i = floor(st);
vec2 f = fract(st);
vec2 u = f*f*(3.0-2.0*f);
return mix( mix( dot( random2(i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ),
dot( random2(i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x),
mix( dot( random2(i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ),
dot( random2(i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y);
}
float v_noise(vec2 st,float edges) {
// st = mod(st,edges);
vec2 i = floor(st);
vec2 f = fract(st);
vec2 u = f*f*(3.0-2.0*f);
// return lerp(lrandom(i), lrandom((i + 1.0) % edges), u);
return mix( mix( dot( random2(i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ),
dot( random2(i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x),
mix( dot( random2(i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ),
dot( random2(i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y);
}
float stepUpDown(float begin, float end, float t)
{
return step(begin, t) - step(end, t);
}
mat2 rotate(float angle)
{
return mat2( cos(angle),-sin(angle),sin(angle),cos(angle) );
}
vec2 center(vec2 st)
{
float aspect = u_resolution.x/u_resolution.y;
st.x = st.x * aspect - aspect * 0.5 + 0.5;
return st;
}
vec3 time()
{
float period = mod(u_time,SECONDS);
vec3 t = vec3(fract(u_time/SECONDS),period, 1.0-fract(period));
return t; // return fract(length),period,period phase
}
float loop_noise(vec2 st)
{
float loopLength = SECONDS;
float transitionStart = SECONDS*.5;
float t = mod(u_time, loopLength);
float v1 = v_noise(st + t);
float v2 = v_noise(st + t - loopLength);
float transitionProgress = (t-transitionStart)/(loopLength-transitionStart);
float progress = clamp(transitionProgress, 0., 1.);
return mix(v1, v2, progress);
}
void main() {
// timing, if using cos+sin times are doubled
float seconds = 5.0;
vec3 t = time();
// space
vec2 st = gl_FragCoord.xy / u_resolution.xy;
st = center( st );
st = st * 2.0 - 1.0;
st *= rotate(PI*.5);
// st *= rotate(TWO_PI*t.x);
// st /= pow(length(st),-4.0);
// sdf
vec2 pos = st - vec2( 0.0 );
// pos.x += r * sin(a);
// pos.y += r * cos(a);
// pos += sin(u_time);
// pos += vec2( 0.57 ) * rotate( TWO_PI * t.x );
// a = TWO_PI/(atan(pos.y,pos.x)+PI);
// a += u_time;
float r = .1;
float a = atan(pos.y,pos.x);
r = length(pos);
r *= abs(cos(abs(a)*2.0));
t.x += fract(t.x-.5);
float t1 = smoothstep(0.5,1.0,t.x);
float t2 = smoothstep(0.0,0.5,t.x);
float n = .5 * loop_noise(vec2(abs(a*.50),r)*20.0);
// float n = .5 * v_noise(vec2(a,r+t.x)*20.0);
// n *= .5 * v_noise(vec2(a,r+t.x)*20.0);
// n *= v_noise(vec2(sin(a),r)*20.0,3.*-t.x)*5.0;
// n *= 10.0;
r += n;
// r = pow(r,n*20.0);
vec3 sdf = vec3(1.0);
// sdf.x = length(pos)-.3;
sdf.x = r-.3;
sdf.x = smoothstep(0.0,0.001,sdf.x);
// color
vec3 color = vec3(0.07);
// color = vec3(st.x, st.y, abs(sin(u_time)));
color = mix(color,vec3(1.0), sdf.x);
color = mix(color,vec3(0.0),abs(st.y/8.0));
gl_FragColor = vec4(color, 1.0);
}