float t = time/2;
float rand(vec2 p) {
float f1 = dot(p, vec2(565.344, 97.22))+time;
float f2 = fract(dot(p * fract(time), vec2(789.23, 120.455)));
return fract(mod(f1/(f2+.0001),239.34));
}
float norm(vec2 p) {
float pw = .56+sin(t * 4/pi) * .2;
return pow(pow(p.x, pw) + pow(p.y, pw), 1./pw);
}
vec2 toPolar(vec2 p) {
return vec2(length(p), atan(p.y, p.x)/pi);
}
vec2 toPolar2(vec2 p) {
return vec2(norm(p), atan(p.y, p.x)/pi);
}
vec3 palette(float p) {
return vec3(
sin(p * 9.3 + 2.1) * .5 +.5,
sin(p * 2.5 + 1.9) * .5 +.5,
sin(p * 3.4 + .2) * .5 +.5
);
}
void main(void) {
vec2 uv = -1. + 2. * inData.v_texcoord;
uv.x *= resolution.x/resolution.y;
vec2 uv0 = uv;
float a = t/2;
uv.x = abs(uv.x);
uv *= mat2(cos(a), sin(a), sin(a), cos(a));
uv = toPolar2(uv);
uv.y *=3.5;
uv.x = mod(uv.x,1.1+sin(time * .11) * .3)+length(uv0) * 5;
uv.x = log(uv.x/2);
uv.xy = uv.yx;
uv = toPolar(uv);
vec3 color1 = vec3(abs(.3/sin(cos(3. * uv.y-t) * 2. * uv.x+t)),
abs(.3/cos(sin(-t/3+2. * uv.x) * 3. * uv.y+t)),
(.5/(uv.x * 2 * uv.y)));
vec3 color = palette(clamp(color1.x/color1.y, 0, 1));
color = pow(color, vec3(.9, .7, 1.7));
vec3 rand = vec3(rand(vec2(color.r * 2.3456, rand(uv0))), rand(vec2(-color.g * 91.3, rand(uv0))), rand(vec2(rand(uv0), color.b * 34.54)));
color += (rand-.5) * .25;
fragColor = vec4(color, 1.0);
}