In a previous show, I created a visual using Thomas' cyclically symmetric attractor, but for the next performance, I wanted to revisit and expand on the idea. My goal was to explore new attractors, tweak existing ones, and experiment with their behavior.
I went back to Thomas' attractor and modified the shader that generates position instancing data. By adjusting different parts of the differential equations, I eventually stumbled upon a shape that I found really interesting.
// Example Compute Shader
uniform float b_val;
layout (local_size_x = 8, local_size_y = 8) in;
void main()
{
vec4 color = texelFetch(sTD2DInputs[0], ivec2(gl_GlobalInvocationID.xy), 0);
vec3 particale_pos = color.rgb;
vec3 pos = particale_pos;
float b = b_val;
vec4 final_color;
/* dx */final_color.r= sin(pos.y) - b*pos.x;
/* dy */final_color.g= 0.9*sin(pos.z*2.0) - b*pos.y;
/* dz */final_color.b= sin(pos.x) - b*pos.z;
/* life */final_color.a=1.0;
vec4 imageOut = final_color;
imageStore(mTDComputeOutputs[0], ivec2(gl_GlobalInvocationID.xy), TDOutputSwizzle(imageOut));
}
By simply adding some extra constants, I was able to generate this new attractor shape:
To enhance the depth, I added a second attractor:
To complete the visual, I brought back the original Thomas attractor:
This was a continuation of my previous visual world, where I had used the Thomas attractor along with GLSL compute shaders to add distortions and color variations to each instance within the attractor.
As before, I pre-programmed three b values that I could switch between live using my MIDI keyboard.
b=0.2081
and the two new ones being
b=0.29818
and b=0.43018