Table of Contents Show
Although I had been working with Substance Designer for some time, I needed a little more convincing to buy Substance Painter. I already had 3DCoat. In addition to the fantastic sculpting, retopo and UV options, I already had a fully-fledged toolset for PBR texturing. Or so I thought. Of course, that changed abruptly after I tried Substance Painter for the first time and got to know the great procedural workflow. But one wish remained unfulfilled for many years. In 3DCoat I was always able to use textures along a path and work very precisely. I always missed that in Substance Painter. Well, that has changed.
New updates to the Substance3D products have been released, bringing with them long-awaited features. In addition to a complete Path Tool Set, some very helpful presets have been added to Substance Painter. 3DCoat still remains one of my favourite tools for all the other possibilities. Here I will go through various application examples. Let’s start with Substance Painter.

At the beginning
So I’ll start as usual by creating a new project and adding a 3D model. As soon as we add a painting layer in Substance Painter, we also have access to the various painting tools at the top left of the user interface. There is now a new icon at the third position from the top which looks like the tip of an old fountain pen. We can now use it to paint paths on our model by placing them point by point on the surfaces and thus defining the path length. To end a path, press the ESC key or the Enter key.
Initially, all points are automatically smooth Bezier points without handles. However, they can be converted into corner points by double-clicking on them. Alternatively, you could also select several points and convert them using the corresponding button in the top toolbar. In a subsequent update, the user was also given the option of adjusting the handles on the splines.

As a result, we now have the path that uses the brush that was selected when it was created. As long as we are in Paths mode and the path is active, I can click on one of the brush presets in the library and then use this brush with this path. The Paths tool doesn’t work with all brushes, but there are many existing brushes that can be used with the new interactive spline paths. What I like most here is that I can reopen the project tomorrow and adjust each point of these paths again. So we have a non-destructive workflow. That’s how I like my procedural projects. I had rarely used the Paint Layers before because they are, to put it crudely, destructive. Of course, I don’t mean that they destroy my work. I rather mean that they have not been procedural so far.

What I used to paint was then fixed in my material and if I wanted to make changes, I had to delete these paint layers and then create them again. Today, I can also select the spline path option at any time and then make adjustments later by changing the path or the brush used with it afterwards. I can add more points by clicking on a path between the existing points or delete points by selecting them and deleting them with the Delete key.
Of course, new brush presets have also been added that work specifically with the new paths. So we now have seams with different selectable thread patterns, pure tension pattern folds caused by hidden seams or other influences, zips in various designs, welded seams and a pipe rack tool which creates something similar to a crumpled tube.
When the Draw Paths tool is active, I see the word Paths in the top left of the 3D view window. This is a menu in which I can select my desired path for later adjustments. The paths can also be copied, duplicated or deleted in this menu. I like to use this to duplicate existing, fully defined paths, move them as a whole and then just reposition the points.

Practice!

So, enough theory. I have created a few models especially for this article and will upload one of them to a new project. After the usual rituals and baking the high poly information onto my low poly model, I assign a metal material to the main body and a material from the leather box to the pouch. As this is a robot-like model, welded seams or rivets could fit very well here. Both can now be applied much more easily and precisely thanks to the new path tools.
To create the weld seams that connect the legs to the body, I simply roughly place the points for the path where I estimate good positions. I also prefer to place fewer points to start with rather than too many. The first path is created and if the weld seam preset Metal Welding has not already been selected, I assign it now. This is followed by the fine adjustments until the sizes, dimensions and distances look realistic. Each of these presets has a variety of setting options. For the Metal Welding material, I can specify the welding method in a list. Here we can choose between Gas Standerd, Arc Standard and Gas Weave. I can also use the Shape Irregularities slider to access the quality of the weld seam and the strength of the relief and discolouration at the edges of the seam.



After I like the weld, I go to the Paths menu at the top of the viewport and duplicate that path. I make sure I’m in the path tool and select all the points in the duplicate with Ctrl A. Now I can switch from Surface Tool to Translate Tool in the path tool settings above the viewport and display it with Show/Hide Transform Manipulator. Using the manipulator, I can now move the entire path to a different position.
Problems?unfortunately this doesn’t work quite so easily yet and the points try their best to cling on everywhere where I don’t really want them. It would also be extremely helpful if we also had a rotate function here.
This allows me to place the path roughly in the desired new position and then switch back to the surface tool to place the individual points exactly. If this work is too time-consuming for me, I can also create a completely new path and then right-click in the Paths menu to copy a path that already has my desired material assigned and transfer this information to the new spline with a right-click and Paste Brush Properties.
As I still don’t know exactly what I have modelled and whether it is an assembled robot or a cybernetic being created by other means, I place seams on the bag for the time being. I use the Fabric Topstitching preset for this. In addition to the thread colour and thickness, it offers a huge number of different seam patterns. I have listed them here as screenshots.
I also have control over the horizontal and vertical size of the seam and a horizontal and vertical offset. Among other things, this is helpful if I want to use certain points of the topology for the path, but want the seam itself to be in a different place. This also makes it very easy to lay patterns exactly parallel.
In addition to seams, the new Seams Brush can also add fabric folds. This is all controlled by the size of the brush and the settings in Rollout Puckering. Here I can also define whether it is a thin or thick fabric or leather. I can also define how strong the puckering should be, adjust the position and set how quickly it rolls out again.
However, there are situations where this gets in the way. I would like to have a finer seam, but an even greater effect of the drape. Fortunately, I have the option of ignoring the puckering in the Seams Brush and can add it via a second, separate painting process. To do this, we duplicate the path that is responsible for this seam and replace the Fabric Topstitching material with the Fabric Puckering material.
Now I can set both materials and effects separately. And if I do want to change the course of the path, I can do this on one of the two overlapping paths to copy this changed path in the menu and right-click and paste all vertices to move the other path back to the changed position.


Designer
Although we have a fantastic and very helpful tool in Substance Painter, my secret love is still Substance Designer. There used to be external add-ons from creative people that you could buy and work with some kind of paths. Since this update for the whole Substance 3D family, paths and splines have been added to Substance Designer. This now offers us so many possibilities that I would actually have to write several articles about it.
Two new categories have been added to the libraries in Substance Designer. One contains the spline nodes and the other contains the path nodes. The spline nodes can be divided into four sub-categories: Create, Merge, Modify and Render. In the Create section we have three, actually four, options to add a spline to the graph.
Spline (Poly Quadradic) can almost be compared to a Nurbs Spline. You can define the number of points between three and ten and these then influence the shape of the spline like magnets. If I wanted to try to create a sharp corner using this method, I would actually have to position two, or even better, three points very close to each other.
From this point of view, this node is helpful if you want to create flowing shapes. However, I can assign specific properties for each point. In addition to the height and thickness, I can also set the smoothness. This means that a value of 0 for smoothness would also produce a very hard angle.

Spline (Cubic) consists of a start point and an end point, both of which have a handle to form the spline in between. This makes it a very practical tool for simple paths. Later I will go into how each individual point of a spline can have individual multiple properties. This is very practical and also helpful, but can lead to a confusing number of spline points and at some point can be difficult to control and quickly become confusing. So it’s like always in 3D: as much as necessary, as little as possible. For this reason alone, the spline (cubic) is a good alternative for simpler splines.

Circles

Spline Circle is already self-explanatory. A circle is created. However, this is a shape that we can use in many variations. One possibility would be to combine several splines into a more complex shape. But I’ll come back to that later.
When I started this article, I was still thinking about going in a Celtic direction in terms of design. So you could quickly and easily create a stylised sun with the spline circles. To do this, I need two centred spline circles. One small and one large circle.
With the Node Spline Bridge (2 Splines), I can create any number of connections between two splines. As a result, I only get the splines of the connections and the two circles are no longer included.
Many of the tools that we know from the previous graphical nodes are also available as spline variants. We can use the spline warp node to distort these splines using black and white noise.
Thickness Node
As we have not yet given these splines any information about their width, we can do this retrospectively with a Spline Samples Thickness Node. As this example is a circular arrangement, I use a paraboloid shape to achieve a wider shape in the lighter areas than in the darker areas. To generate a graphical shape from these thin splines we use the spline mapper Grayscale. For now, we only use the upper settings in this node.
We can use the Segments Amount to make the resulting shape appear more angular or softer. For the effect of a Celtic symbol, it can be a little less angular and so seven segments are enough for us here. With Start and End we could define from where to where the shape starts and ends at the splines.
We utilise the full range from 0.0 to 1.0. For Thickness Mode, we leave the setting at From Spline because we have already defined which areas should be thicker with the previous node. We then set the desired width using the slider below. As we are not adding a colour map here, we do not need any UV information and the shape does not matter at the moment. The default setting of Plane therefore fits very well.
The inner area of the sun now looks a bit tattered. Which makes sense, because the spline warp has also done its work there. However, we still have the small circle from the beginning of this construct. From this, we go into a new spline fill node and, because the circle is still too small for me, I add a classic edge detect and use the edge width to create a larger ring. If I set the Invert to True in the Edge Detect, I now have the option of using a Blend Node to remove this white ring with Subtract from this tattered inner area.

Celtic
Since my brain was still stuck in the Celtic design world at the time, let me briefly show the benefits of Spline Poly Quadratic with the creation of a classic Celtic band. This often involves several lines that sometimes run on the left and sometimes on the right, crossing over and under each other.
In this case, four lines are involved. So I start with the first spline, which runs from the bottom left via the centre to the top right. In the Spline Poly Quadratic settings, I can define at the top how many points I want to use and further down the exact position of each individual point. This allows me to set each individual point to its mathematically logical position.
Once I have drawn all four splines in this way, I can merge them with several spline append nodes. This is followed by the spline mapper Grayscale used earlier. This time, however, I add a pattern to the colour input. As a pattern that runs from left to right works best here, the pattern was created using a transformed uniform colour map and an edge detect.

To ensure that everything now looks like the Celtic template, I have to return to the Spline Poly Quadratic Nodes. So I double-click on the spline mapper node to see its result in the 2D preview and single-click on the first spline poly quadratic node to adjust its settings. Above the section for the positions I have the Rollout Points Properties, in which I can set the height of each individual point. This makes it easy to define the over and under course of the spline.
Rivets
Even though paths now allow us to create any shape, the previous workflows, i.e. shapes using a combination of basic shapes and effects such as warp, swirl and many more methods, can still offer an easier way. This is where the Mask to Paths Node helps us. We can use it to convert shapes and black and white patterns into paths.
The nice thing here is that we can not only use shapes with hard outlines, but also shapes with gradients, i.e. with soft edges. This node also offers us a slider for the exact positioning of the path on the gradients. This allows us to determine whether the path is placed closer to the white area of the shape or closer to the black area.
This is a practical application if you are too lazy to draw all the paths in Substance Painter for every single seam or section of rivets. With a few simple tricks, this can be quickly automated in Substance Designer.

All we need to do is link the model to the project by right-clicking on the package name and extract a few mesh maps from the model. Right-click on the model in the Explorer window to open the Bake Mesh Maps dialogue.
In this case, I am interested in the maps Uvs to SVG and Material IDs if I have previously assigned them to the high poly model. So I already have the basic shapes of the UV layouts and an image that I can use to create the mask in which areas of the UV layout I want to have the rivets. In addition, the baked material ID helps us to define which areas of the model should receive the fabric texture or the wood texture.
To place my rivets, I drag the baked map of the Uvs to SVG from my Resourses folder in the project into my graph. I need a black and white map for my next steps. So I add a colour to grayscale node at the end. For an even distance between the path and the outer edge of the UV islands, you could use the Bevel Node or, as in my case, the Distance Node.

As this Distance Node penetrates from the white areas into the black areas, I add an Invert Grayscale Node beforehand. Now I can set the distance so that I can define an even gradient to the inside of each UV island. In the past, I would have used a Histogram Scan Node or a Threshhold Node to create a new sharp-edged black and white mask.
However, as the new Mask to Paths Node also works with gradients, I can save myself this extra effort and use it to my advantage. In the Mask to Paths Node, which now follows the Distance Node, I can now use the slider to set exactly where I want to place the path within the gradient to the edge of the UV Islands. Thanks to the procedural setup of the Substance Designer workflows, I can also adjust this at any time afterwards.
As is so often the case, not all nodes always match all other nodes. For example, we cannot distribute other objects along a path; this is only possible with splines. A Paths to Spline converter node is therefore attached to the Mask to Paths node and we can use the Scatter on Spline to distribute any patterns we have to this spline.

As usual in Substance Designer, there is also the subdivision in the nodes as a colour version or as a black and white version. The black and white version is sufficient for this specific workflow. We only want the distribution of the pattern as a greyscale pattern for the height relief information.
There are now three outputs from the Paths to Spline Node, Spline Coordinates, Spline Data and Splines Amount. We could now make each individual connection manually or we can temporarily use the shortcut “2” to link all outputs and splines at once. With the shortcut “1” we would then be back to the individual link per input and output. As the names of the outputs already indicate, they provide different information that we can utilise in other workflows. The scatter on spline node, on the other hand, has considerably more inputs. So we could also insert a background here, to which the information created here is then added. You could, for example, also use the fabric height information here and then use it to add this rivet structure. Similar to some tile generators, we also have inputs here to mask the pattern to be created, to scale it and to assign height information to it.
Then there is the obligatory pattern input, which we can use to insert one or more self-created patterns for distribution. But we don’t need this here. As with all tile generators, we have our usual basic shapes that we can use. And what could be better for rivets than the paraboloid template. The settings of the Scatter on Spline Node offer a wide range of options, of which I will only go into those that are important at this point in the workflow.
Spacing
The Shape Spacing slider is definitely important for us here. We use it to control the spacing of the distribution of the paraboloid shape on the spline. In addition to the usual settings in tile generators for position, rotation and scaling as well as the option of a random factor for all of these transformations, only the basic scaling is important for us in this case. This allows us to set the size of the rivets to a credible dimension.
It would be nice if the scatter on spline node also output a mask. But this is not so important here, as we can quickly extract it from the output using a histogram scan node or a threshold node. This allows us to blend these rivets over the other height texture and mix the colour assignments as well as define other areas, such as the possible folds in the fabric caused by the rivets.


The octopus
At some point, the idea of an octopus took root in my brain, which I would use as the basic concept for this article. I create the head of the octopus in the classic way with the shape nodes Parabolid and Capsule and scale and position several copies of the basic shape of the skull and the round eye shapes. The eye opening, on the other hand, is a rather curved shape and would need several deformers to define it precisely. Alternatively, I could also create a shape in an SVG node. However, this is not quite as easy to control. Partly because I can’t define Beziers in SVG. So that would be another task that is much easier to accomplish with splines. Here I could use the splines (Poly Quadratic) or also splines (Cubic). However, it is important to me here that the respective end points and the start points lie exactly on top of each other.
There are various methods for connecting several splines together. The Spline Append Node creates a common spline object, but still allows each individual spline to be edited completely. I can use Spline Connect to connect the respective beginnings and ends of the individual splines.
If one of the splines is now edited, the start of the other spline remains attached to it and moves with it. If I want to create a long path consisting of several splines, I access Spline Merge List and should also pay attention to the direction in which the respective splines were drawn. For my purposes here, a spline append node followed by a spline fill node is enough to create a closed shape. This is then subtracted from the eyeball as usual with a Blend Node and Subtract.

Cubic Quadratic
For the first version of the octopus, I basically used the same method as for the sun created earlier. The only difference was that I started with a small cubic quadratic spline, duplicated it and distributed the points of the duplicate around the edge of the image to create a larger outer shape. This was followed by the Spline Bridge Node, a Spline Thickness Node, the Spline Warp Node and finally the Spline Mapper.
However, this central motif on the backrest did not fit in with the Celtic pattern I had been holding on to until then. And so I saw the arms of the octopus and the idea of the repeating pattern with the folded arms was born. Of course, I need more control for this than the spline bridge node offers me.
So I create a separate spline for each arm for the octopods that are to make up the pattern and simply connect each spline node to the next. This is another method of connecting several splines together. To make my life easier, I set the appropriate thickness per point for the first spline I create so that the top point is the thickest and the following points are thinner. Now I just have to duplicate this first spline several times and adjust the respective positions of the points.
For the exact positions and mutual retention, I attach a spline mapper node to the end of this node strand and use a normal transform 2D node and a height blend node to create the appropriate segment for tiling. It is important here that I do not use the colour output from the spline mapper node, but the height output. Now I can adjust the position and height for each individual point in each individual spline so that the arms can cross over and sometimes run over and sometimes under. It sounds complicated at first, but this setup makes it quite quick and controlled.
I decided to keep the original octopus created by Spline Bridge as the central element. I just want to enhance it a little. As already mentioned above, I can also add a texture as colour input in the spline mapper. For the first spline mapper, I create a horizontal gradient Linear 2 and scale it so that the light area is in the centre of the arms and the dark area is towards the edge. In this way, I can also assign the rounding of a cylindrical shape to the arms. If I set the mode in the spline mapper to ‘Draw Single Spline’, I can select one of the input splines based on its ID. This makes my graph a little more complex, but I can assign each tentacle its own individual UV twist.

The nice thing about Substance Designer is that many developers put a lot of thought into how events could be linked together. In this particular case, when the bridge splines were created, each of them was assigned an individual spline ID. And this is exactly what we can access here.
So I duplicate the spline mapper node together with the colour input and adapt the latter by adding suction cups at the bottom with the help of a tile generator. To make optimum use of this new colour input, I add a curve node to the twist curve input in the spline mapper. This allows us to adjust the curve and the uvs rotate around the arms accordingly. Of course, the shape in the spline mapper must be set to Cylinder so that we can twist the Uvs accordingly.
Now I duplicate the spline mapper and the curve node seven times and can thus create different variations of the respective UV mappings per tentacle. These eight tentacles can now be merged with several blend nodes. Here I select the spline ID output as the mask. As this carries further transparency information with it, I first have to send it through a levels node to obtain a clear white mask. Now we have a spline mapper with the UV-adjusted colour input, which looks interesting but has lost its three-dimensionality. However, since we created fake height information for the splines in the original spline mapper node earlier, we can merge this as compositing. In the end, I create a new blend node and place this fake height information with multiply on the UV colour information. The upper layer with the fake height information can also be influenced by the layer transparency.
Just to complete the workflow, I would like to mention that I run the result of the central octopus through a threshold and enlarge it with an edge detect and a blend to create a mask that blends this pattern into the general background pattern. But these are workflows that you are probably already familiar with in Substance Designer.

Conclusion
Here it is. Our Art Deco armchair with a customised pattern, which I can adjust and change procedurally at any time. I guess you can see between the lines why I’m so excited about the new paths and splines in Substance Painter and Substance Designer. These workflows that we went through here are also just one of the many tips of the iceberg of what can be done with these new tools in the future.