У моего товарища вышла , я решил вспомнить, что умею в шейдеры и залип на полночи)
(сделано в https://shawnlawson.github.io/The_Force/)
#define I 100
#define E 100.7
float calc(vec2 z, vec2 c, float t, float param1) {
int result = 0;
for (int i = 1; i <= I; i++) {
float r=length(z);
float r2=r*r;
float r3=r2*r;
float denom=(1.+r3)*(sin(t*0.32)*0.2+1.0+r3);
float f_r=r*(cos(t*0.1)*0.8+2.0*r+r2)*(r2-1.0)/denom;
float g_r=r*(sin(t*0.12)*0.8-2.0*r+r2)*(r2-1.0)/denom;
float real2=z.x*z.x-z.y*z.y;
float imag2=param1*z.x*z.y;
z=vec2(real2+f_r,imag2+g_r)+c;
if(dot(z,z)>=E){result = i;break;}
}
return float(result)/float(I);
}
void main() {
vec2 offset = vec2(-2.8, -1.6);
float scale = 3.0;///(time * 0.1);
vec2 coord = uvN();
vec2 c = vec2(coord.x*(resolution.x/resolution.y),coord.y)*scale+offset;
gl_FragColor = vec4(vec3(calc(vec2(-0.50, 0.041), c, time, 2.0), calc(vec2(-0.52, 0.1), c, time, 2.02), calc(vec2(-0.55, 0.0), c, time, 2.01)), 1.0);
}