Asa Booth shared some tips on how to set up an intricate embroidery material in Substance Designer including the base fabric and thread coloring.
Hello, my name is Asa and I’m a 3rd year Games Art and Design student from the UK. I’m specializing in asset production with one of my focuses of this year being material creation in Substance Designer. I created the Embroidery material for the first task back at university and have had a few requests for a breakdown, so here it is!
All work was created in Substance Designer and rendered in Marmoset Toolbag 3.
Of course, I first needed a decent reference image. This was the design that gave me the idea of tackling embroidery in Designer and the reference I used throughout. Super cute design! I hope I’ve done it justice.
Here’s an image breakdown of the fabric (Marmoset render, height map, original tiling pattern):
Next, I created the thread shape to be used for the actual embroidery design. I although I tend to use one reference image for the overall material, I often look for others that help me recreate the finer, smaller details. Designer has a fiber pattern node, but it didn’t allow me to create the twisted thread similar to the reference images I found, so I used a few nodes to create it myself. Make note of the gradient I used to create a falloff for the shape; this is an extremely important part of the graph as it allows the thread to smoothly blend later, and in the real-world embroidery is threaded into and under the base fabric, leaving a curved shape to the individual sections of thread.
The thread was then plugged into tile samplers and shape splatters to create the circular pattern. The dots of thread were made with warped circles plugged into a swirl node; this was the most effective method I tried. I’ll explain the process of using the tile sampler alongside the thread shape next, using the main fox design as an example.
I’m going to show the process of creating the tail as it’s one of the simpler parts. I created the mask of the tail, then split it into two sections based on the colors used in the reference image. Each of these is plugged into the mask input of a tile sampler. I used a tile sampler for each section of the fox as although it’s expensive, the color tile sampler didn’t allow me to layer and blend the sections correctly. Each tile sampler uses x and y amounts of around 128 with an increased scale to fully cover the area of the mask. Playing around with random variables such as rotation helps to add believability to the design. As for the rotation, I mostly used gradient axial nodes to create the map. As long as you remember that white=full rotation and black=no rotation, you’re set!
You could use a 127 value (mid grey) for the tile sampler rotation input, then change the internal tile-sampler rotation to point towards the appropriate direction. With that set, you can continue to use grey as the default direction and add black values for counter-clockwise rotation, and white values for clockwise rotation. This trick allows you to rotate both ways, rather than only being able to rotate clockwise through the addition of brighter values.
Here’s the mask, rotation map, and tile sampler for the tail (just to note, all masks were created by blending shapes and no bitmaps were used):
You can see I added some falloff noise to the ends of the mask; by adjusting the threshold of the mask within the tile sampler, you can start to get a “dithering” effect. This was a key step in making the different colored threads blend.
To combine and blend the sections of the fox, I used a LOT of height blend nodes. I was originally blending with a blend node set to max (lighten), however, the height node allowed me to offset the height of the inputs, and it automatically creates a mask that I used to mask the colors. If I’d continued to use blend, I would’ve had to use histogram scan nodes instead to mask areas. More nodes = bad!
It’s important to start with the lowest height first so that colors are blended in the correct order. For me, the back ear was the first addition and the eye was the last.
Here you can see a small section of the color and height blending:
In terms of coloring the thread, I used a gradient map for the most part, with additional gradients being added here and there to match the reference.
Here are a few of the extra things I added to really sell the material:
- Global illumination inside the albedo texture. (For instance, I blurred the fox color and applied it to the base fabric to mimic this effect). This is particularly noticeable on the fabric near the wood – you can see it has a beige tint.
- Subtle shadows in the albedo texture and manually added ambient occlusion around key parts of the design; this helps them pop out!
- Discoloration to everything! Thread is dyed, so there’s going to be offset in the color, saturation, and values.
And finally, an image breakdown of the texture maps (starting from the left, going clockwise: ambient occlusion, height, albedo, and roughness):
I’m super happy with the result of this material, and I hope this has helped a few people out!
Thanks for reading, and I’ll leave you with a nightmarish screenshot of my whole graph: