Exploring Spline Nodes in Substance Designer

Work In Progress / 09 June 2026
After visiting Berlin's Natural History Museum I got inspired to try my hand at creating a procedural fossil fish material based on this fossil photo I took there:

I started with quickly creating the single spline segment using the Spline Poly Quadratic node that lets you create a spline by choosing its points and adjusting the spline curve. The middle section was created in SD as well with using the Shape node with square option as base and warping it with perlin noise a couple of times. 

Then, using another Spline Poly Quadratic node to draw out the fish's spline and using the previously shown spline segment as input got me halfway there. Initially I only wanted the material to be a single fish much like my reference, then tried out combining many Spline Poly Quadradic nodes with Spline Append node to create a tileable version with many fish. 

After the main fish spline was assembled with the many Spline Poly Quadratic and Spline Append nodes, I used the Spline Scatter nodes to spawn the fish head and fish tail bitmaps on the start point and end points of each spline. The head and tail bitmaps are quick drawings based on the photo reference in Photoshop. 

Finally I needed to add some color fill to the fish otherwise it was just bones, that's where the Spline Render node came in handy. It has options such as segment for controlling how smooth the edges of the spline are, and a thickness slider. Although the thickness for each point in the spline is controlled through the Spline Poly Quadratic node, which is how the fish's tail is thinner than the middle of it. 

Here are some test renders I have done in Substance Designer to show the fossil fish material:


For the future of this project I want to work on creating a fossil generator material out of an alpha and create a fossil animals texture library, and create a small showcase environment resembling a museum corner. Below is a test render of the dragon fly fossil I'm working on and the height map it's generated from.