Showing posts with label TechArt. Show all posts
Showing posts with label TechArt. Show all posts

Tuesday, September 2, 2025

A sea of Rocks

 

First early stages of GPU Instancing in Unreal Engine...

Next step, Render Targets storing live updating unique instance data !!!!

Modular Environmental Creation in Unreal Part

00:22:55 Mannequin Import/Establish Scale In Maya






















00:52:28 Building Proxy Objects In Maya







01:39:58 Creating Materials


02:08:15 Creating Prefabs With Unreal Blueprints





02:33:24 Beveling Our Edges 


03:04:09 Creating High Quality Screen Shots






Wednesday, August 20, 2025

Evolving attractors Part3

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




Thomas' cyclically symmetric attractor


I first discovered strange attractors through YouTube and was immediately fascinated. These are mathematical differential equations that describe systems where a set of random points follow defined changes in x, y, and z positions. Over time, the points settle into a structured shape, even though their paths are chaotic.

To learn more, check out the Wikipedia page:

https://en.wikipedia.org/wiki/Thomas'_cyclically_symmetric_attractor



For a previous NuDeco show, I created a visual based on Thomas' cyclically symmetric attractor by following the set of differential equations from the Wikipedia page.



I applied these equations to a visual feedback loop inside TouchDesigner using a compute shader. The following code shows how I implemented the equations efficiently to control particle positions in real time.

// Compute Shader

uniform float b_val;

layout (local_size_x = 8, local_size_y = 8) in;
void main()
{
	// input 1
	vec4 color = texelFetch(sTD2DInputs[0], ivec2(gl_GlobalInvocationID.xy), 0);

	vec3 pos = color.rgb;

	float b = b_val;//0.32899;
	vec4 final_color;
	/* dx */final_color.r= sin(pos.y) - b * pos.x;
	/* dy */final_color.g= sin(pos.z) - 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));
}

I passed the b constant as a uniform and set up three different b values as presets on my MIDI keyboard, allowing me to switch between different attractor states live.

b=0.208186



b=0.32899



Besides controlling how fast the attractor formed, I could also manipulate the base shape. But the most interesting effect happened when I changed the order of operations. Instead of constantly following the differential equations in the expected way, I reversed them. This created a scattering and dissolving effect, but in an organized, structured manner.







Modular Environmental Creation Part 2