//Udit Mahajan - 2022 - uditmahajan.com #ifdef GL_ES precision highp float; #endif #define TWO_PI 6.28318530718 varying vec2 vTexCoord; uniform vec2 u_resolution; uniform float u_time; uniform float fxrand1; uniform float fxrand2; uniform float fxrand3; uniform float fxrand4; uniform float fxrand5; uniform float fxrand6; uniform float fxrand7; uniform float fxrand8; uniform float fxrand9; uniform float fxrand10; uniform float fxrand11; uniform float fxrand12; uniform float fxrand13; uniform float fxrand14; uniform float fxrand15; uniform float fxrand16; uniform float fxrand17; uniform float fxrand18; uniform float fxrand19; uniform float fxrand20; uniform float fxrand21; uniform float fxrand22; uniform float fxrand23; uniform float fxrand24; uniform float fxrand25; uniform float t; // Box SDF from Inigo Quilez // https://iquilezles.org/articles/distfunctions2d/ float box( in vec2 p, in vec2 b ) { vec2 d = abs(p)-b; return length(max(d,0.0)) + min(max(d.x,d.y),0.0); } //random function adapted from Patricio Gonzalez Vivo //https://github.com/patriciogonzalezvivo/lygia/blob/main/generative/random.glsl float random (vec2 st) { return fract(sin(dot(st.xy, vec2(12.9898,77.233)))* (143758.5453123 * ((fxrand1)*20.0))); } mat2 rotate2d(float angle){ return mat2(cos(angle),-sin(angle), sin(angle),cos(angle)); } void main() { vec2 st = vTexCoord; vec2 st2 = vTexCoord; vec2 st3 = vTexCoord; st = .5 + (vTexCoord * u_resolution.xy - .5* u_resolution.xy) / min(u_resolution.x, u_resolution.y); st2 = .5 + (vTexCoord * u_resolution.xy - .5* u_resolution.xy) / min(u_resolution.x, u_resolution.y); st3 = .5 + (vTexCoord * u_resolution.xy - .5* u_resolution.xy) / min(u_resolution.x, u_resolution.y); float d00, d0, d1, d2, d3, d4, d5 = 0.0; float cen = 15.0; if(fxrand2<.5){ cen = -15.; } float d = distance(st,vec2(cen,cen)); st = st * 1. - .5; d0 = (box(st, vec2(.95,.95))) * 4.; st -= .5; st *= rotate2d((d*(fxrand5))+(fxrand6*TWO_PI)); st += .5; st*= 1.+(fxrand7*10.); st.x -= u_time*t; vec2 fpos = fract(st); vec2 ipos = floor(st); d1 = (sign(box(fpos, vec2(random(ipos),fxrand8)))); st2 -= .5; st2 *= rotate2d(mod(d*tan(d*15.*fxrand9)*cos(d*15.*fxrand10)*(50.*fxrand11)-(u_time*t*.5),(fxrand12*.05))+(1.25*TWO_PI*.5)); st2 += .5; st2*= (100.*fxrand13); st2.x += u_time*t; vec2 fpos2 = fract(st2); vec2 ipos2 = floor(st2); d2 = sign(box(fpos2, vec2(random(ipos2)*fxrand14,1.))); d3 = sign(box(fpos, vec2(random(ipos2),1.))); st3 -= .5; st3 *= rotate2d(mod(d*tan(d*15.*fxrand15)*cos(d*15.*fxrand16)*(50.*fxrand17)+(u_time*t),fxrand18)+(1.25*TWO_PI*.5)); st3 += .5; st3*= (10.*fxrand19); st3.x += u_time*t; vec2 fpos3 = fract(st3); vec2 ipos3 = floor(st3); d4 = sign(box(fpos3, vec2(random(ipos3)*fxrand20,fxrand21))); vec3 col0 = vec3(d0); vec3 col1 = vec3(d1+d2+d3+d4)*vec3(fxrand22,fxrand23,fxrand24); vec3 color = max(col0,col1); color = mix(color, vec3(d3), (tan(st.y*10.*fxrand25)*.25)+(sin(st.x*15.*fxrand4)*fxrand5)); if(fxrand3>=.75){ color = 1.-color; } gl_FragColor = vec4((1.-color),1.0); }