Cosmic Sludge
Shader/texture-based infection growth study.
Overview
I revisited some old Nuke-based displacement techniques to generate an evolving growth texture which I could read into a ground shader in 3D for displacing and colouring.
My original demo of the Nuke setup was here:
Setup
The setup essentially uses vectors generated from a moving image to distort itself. The vectors are modified with noise and a couple of iterations of displacement/vectorblurring to break up the uniform gradients.
The base image going into the setup is driven by a simple point infection system in Houdini. I used those points to emit volumes in a 2D solver to create a volume that follows a growth path. That way you get some nice random path growth but with nice swirling and morphing qualities.
I then rendered that out and brought it into Nuke to create the main displacement effect.
The 2D distortion of the pyro render is driven by vectors generated from the render itself. By running the blurred alpha from the image through a sobel convolution filter, you can generate vectors which describe the average graduation. Feeding that into an idistort will then displace the image out radially. I broke the result up with some standard fBm noise.
I then used them to displace a grainy noise pattern to create radial lines which I could then mult by the original vectors. This in turn generates a broken up displacement map that displaces the original image with radial rays.
Base noise texture
Displaced/smeared to create radial lines
Sobel vectors broken up with rays radiating outwards from each feature centre.
Although the effect grows naturally from the volume going into the setup, I used a pattern of accumulating noise to randomly add bursts of growth and displacement throughout the texture, which creates the bubble bursting motion and drives the emission channel as well.
Nuke is extremely limited for this kind of thing, the only way to really accumulate values over time is to use the TimeEcho set to 'plus'. It's incredibly slow once the number of frames racks up, so I had to use a down-res'd texture of 256x256, then scaled back up to 4k after precomping the result out.
Input base texture
Displaced texture
This is the emission map (which was multed by the beauty texture in shader). This was the result of the length of the current frame subtracted from the past few frames averaged together and averaged again with a TimeEcho.
Final scene geo - just a plane displaced with some noise deformers, and coloured/displaced with the maps from the Nuke setup.
I’ll probably try and simplify this into a single point attribute setup in Houdini at some point, and bypass Nuke entirely.