//#define col(i) vec4( vec3(C[i]), 1 ) //#define col(i) vec4( .6 + .6 * cos(l-iTime+float(i) +vec3(0,23,21) ), 1 ) // colored #define col(i) vec4( ( .6 + .6 * cos(l-iTime+float(i) +vec3(0,23,21) ) )*C[i], 1 ) // + border #define blend(i) O += (1.-O.a) * col(i) * C[i] void mainImage( out vec4 O, vec2 U ) { vec2 R = iResolution.xy; U = (U+U-R)/R.y; O -= O; float a = atan(U.y,U.x), l = length(U); l = 2.*l; a = 30.*a/6.28; vec4 s = l-vec4(0,0,.5,.5), A = fract( a-vec4(.25,.75,0,.5) )-.5, L = fract(s-iTime) - .5, // 4 overlapping polar tilings r = sqrt(A*A*abs(s) + L*L), // ellipse (s*s would be const width) C = smoothstep(.1,0., r-.3); // 4 feathers mask int c = 2* int( L.z > L.x ); // sort ranks ivec2 T = ivec2( A[1+c] > A[0+c], A[1+2-c] > A[0+2-c] ); // sort rows blend( T.x + c ); // blend by sorted order blend( 1-T.x + c ); blend( T.y + 2-c ); blend( 1-T.y + 2-c ); } // https://www.shadertoy.com/view/XljBRh