Professional Services
Order outsourcing

Discovering the Curve Node in Substance Designer

Ben Wilson shared the way he uses 32-bit compositing, the curve tool and other features of Substance Designer 6 in his work.

Ben Wilson shared the way he uses 32-bit compositing, the curve tool and other features of Substance Designer 6 in his work. You can get the raw unedited source file for the texture Ben made here

1 of 2
1 of 2

The Features of Substance Designer 6

There were a whole bunch of nice features added but for me the introduction of 32-bit compositing was the most useful. I make use of it daily at work to better control blending parts of the graph together. For example, it is particularly useful at mimicking typical shader effects, like heightmap based blending where values can go lower than 0. In the example below, I subtract an inverted perlin noise from the parabolids to ensure all the values on the parabolids are lower than the perlin noise. Then reintroduce the parabolids back into the perlin noise by adding a value.

By contrast, with standard 8 or 16 bit where no values can go below 0, the same set up as before but with multiply instead of subtract, will distort shapes towards 0. 

Or worst yet, a typical overlay blend which loses precision both near 0 and 1.

Using 32bit floats keeps the blending linear and does not distort the shapes in anyway. Great for things like rocks or debris.

The Curve Node

The curve node was another fantastic addition that functions very similar to a profile spline in a 3d modelling app. It remaps values the same as the gradient node does, except you have much more control over the spline profile. I think the best case for it is creating trims and I used it extensively for my texture created during the beta. As you see from the image below, the curve node takes the linear gradient input and lets you draw your trim profile very easily. I use this method of creating quick and simple trims at work too.

At this point you can start combining the trim with other nodes like the symmetry node for example. This is how I built all the wood paneling in the beta texture.

I also used the node to create the metal name plate trim, again by taking a shape, creating a gradient with the bevel tool and then remapping the values in a nice profile.

It can be used to create all kinds of effects really. Here I make use of various gradients to create a basic leaf shape, using the curve node to remap values. 

Taking the base leaf shape, I use a distance node to create a gradient inside the leaf. The curve node then remaps the values to create a nice soft curving shape.

I then create two other gradients to input into the curve node. This time to create irregular waves.

Finally another gradient is used to create a dip in the overall leaf shape.

Because of the interactive spline graph, setting up something like this is incredibly easy.

Note: I used some custom nodes from Substance Share in this graph. Check them out, they are awesome. Thanks guys!

Vincent Gault – Squash Node

Bruno Afonseca – Advanced Gradients


The text node is great and behaves exactly how you expect it to. Select your font and type away! Because it is just a node inside designer, it functions the same as others, meaning it can be transformed around and warped. This can lead to some wonderful effects. For the beta texture, I used the Cartesian to Polar node to warp my text into a circular shape.

I think for more obscure effects, it can be tricky to get the exact shape you want procedurally and maybe a case where you do want to bring in a bitmap instead. However for most cases where you just standard text in your texture, this node allows you stay within the one program and not have to deal with a bunch of extra bitmaps.


The Ivy is something I would usually build externally and bring it in as a bitmap. However for the beta, I really wanted to keep everything within designer and so there were some compromises I made to the way the leaves blend together in order to be able to texture them properly. I will explain that a little further down the graph and but below is a mini breakdown of what I did. I have omitted some parts of the graph in order to keep this breakdown simpler but I would encourage you to download and check out the full graph on my gumroad. 

I started with the vines and wanted them to feel like they were creeping in from the corner and crawling over the surface.

I created a network of lines by using the ambient occlusion taken from the intersections of a distance node. Here I am using a scan node to generate some shapes from a perlin noise, creating intersections with the distance node while using a linear gradient to vary the size and frequency of the shapes. This lets me have a denser network of lines in the corner that tapers off.

To control how far across the wood the vines will travel I blend in a linear gradient with add.

To create the feeling of them crawling over the wood. I use a vector warp node with the wood panels heightmap as the vector input.

From here I did some subtle surface detail blends onto the vines, but to keep this breakdown concise, this was the core set up that lets me control the shape and length of the vines. It should be noted that since I generated the lines from an ambient occlusion node, it is very dependent on texture resolution. Changing the resolution will give vary the length of the vines.

Moving onto the leaves, I started by trying to create a simple petal shape. Using a very similar set up to the one I described before, taking a shape and squashing it into shape.

I then duplicated and position them into place to create the overall ivy shape.

Next was to start defining some shapes in the leaf. Here I use a non uniform blur to curve the leaf.

Then I created some veins using the same method as before. Creating a basic shape and positioning them into place.

To create more variety in the leaf shape, I sloped blurred a cells pattern and multiply blend in another perlin noise.

Followed by another type of cells warped by the previous slope blur to create finer veins. I then make both sides symmetric to give it a more natural feel.

This next step was important. When I use a  tile sampler places these leaves later, they are positioned and rotated based on the center of the image. So I make sure to transform the ivy such that the pivot of the leaf is in the center of the image. I also converted the heightmap into rgba data here and embed the mask into the alpha channel (I will explain why a bit further down).

I then created 3 variations of the leaf, each with a different overall shape.

To place the leaves on the vines. I run them through a tile sampler (note it is a tile sampler color) based on the vines mask, which keeps them from being sampled everywhere. I also take a normal map of a blurred version of the vines to help orientate the leaves. Lastly a linear gradient helps to modify the sizes of the leaves along the length of the vines.

Typically when you use a tile sampler with greyscale data, the sampled images are blended together on lighten mode, which creates bad intersecting where they meet. Since greyscale data does not have an alpha channel exposed for us to use, it is difficult to create a mask for all the individual leaves (useful when trying to apply color later). In order to get around this problem, I use a tile sampler color which blends differently and simply places each sample one on top of the other.

Tile sampley greyscale creates intersecting

Tile sampler color places each sample on top of each other.

This is why I converted the data to RGBA before with the mask in the alpha channel. Using this method is great when you need to have a defined shape with no intersecting but still generate a mask from it. I used it to create masks as well as respecting the color information on the leaves.

Here is one of the masks using the same set up. It is used to change the colors of the leaves slightly and was created by simply inputting the mask of the leaves and adding some color random to the tile sampler. This type of mask would be impossible to create with the greyscale tile sampler.

And for the base color, note how each leaf is correctly overlapping each other.

This method unfortunately does cause incorrect height information since leaves are just placed on top of each other regardless of how high they should be in 3d space. Because I generate normal and AO information from the height too, they will also be slightly incorrect. Since I knew I wanted to render the texture directly from above, I decided this trade off was worth it and would not be that visible. However, as mentioned before, I would usually generate something like this outside of designer and bring it back in as a bitmap, elemenating all of these problems altogether. 

Notice how the incorrect height information, creates incorrect AO.

Finally I blend in the leaves using the same blending method as before. A blurred heighmap blended with the leaves on addsub and then masked out.

Both the color and roughness were made using all the same set ups as the heightmap.


I really enjoyed the beta and think it was a wonderful thing to do. It gives people the chance to try out the new tools early and produce some cool art while giving Allegorithmic valuable feedback, bug reports and more artwork to feature during the release. Its a win win for everyone really. Substance was already a huge part of my texturing pipeline and the update only appended to the already excellent toolkit. Everything I showed here I used in production too so this update was really just providing even more flexibility when working.

Ben Wilson, Senior Environment Artist

Interview conducted by Kirill Tokarev

Follow 80.lv on Facebook, Twitter and Instagram

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more