I present you my first set of nodes for Substance 3D Designer: Eterea Absolute Transforms. It consists of 12 nodes, with grayscale and color versions, with which you can perform different types of transformations and deformations to our images. I will now describe each of them briefly (except one, they are all very easy and intuitive).
But first of all I want to thank Julián Rojas Millán who created the initial germ of these nodes. In his ArtStation website he shares an SBS that I downloaded and started to use. But I was immediately bitten by the bug and wanted to know how they were created, expand their features and adapt them to my needs. I talked to him and he kindly accepted that I could share with you my own extended version. Thanks a lot for everything, Julián!
First of all, let’s see how to install these nodes, in case you have never done it before:
Once downloaded, I advise you, if you don’t already have it, to create a directory so Designer can load from there all your personal nodes (these and others that you can download and install in the future). You can indicate any place, but I advise you here:
/Users/YOURNAME/Documents/Adobe/Adobe Substance 3D Designer/
Inside this directory you can place the folder “Absolute_Transforms” with the file “etr_abs_transforms.sbs”.
Then is time to open Designer and go to Preferences > Projects > User Project > Library
Click on the little “+” icon and add the directory you just created.
On the other hand, in the Library panel add a new Filter, the icon with the little circle and + sign (you will have to add a Folder first, clicking on the icon on the left, if you don’t want to add it inside an existing folder) and configure this Filter as shown in the screenshot: call it “Absolute Transforms”, Project: User Project, Graph, URL, Contains, “etr_abs_transforms”.
Yes, I know, if you have never done it before, this whole process will seem a bit cumbersome… Later and with more experience it’s a piece of cake.
This way, by clicking on this “Filter” you will be able to access all the nodes for this kit, in their versions for grayscale or color.
In this collection we have two large groups of nodes, the Transformation nodes themselves (Position, Scale, Rotation…) and also the Deformation nodes (Skew, Stretch, Bend…).
In Designer we have a fundamental Atomic Node which is Transformation 2D. It is able to make any change to Position, Scale and Rotation and it acts in a very similar way to the Transform tool in Photoshop. But this node has a special feature, as indicated in the manual:
The settings for scaling and rotation are not absolute, and do not relate to the 2D view directly. If you type in an Angle or Stretch value, you must Apply it, and can then not easily reset it. Best way to wipe the Rotation and Stretch settings is to reset it to default.
It is a node that, in the case of Rotations and Stretch, is more intended to be used manually, using the 2D viewport interface. If we use it numerically, all transformations, except for translations, must be applied in steps. This way of acting can be very useful and convenient in certain situations. But not so much in others.
The nodes presented here, like the ones that Julian did in his day, act in an “absolute” way. When we apply a scale or a rotation, the slider stays there with that transformation value. And we can return to it at any time to modify it. This only happens with the Position, in the original Transformation 2D Atomic Node. Here it’s so with EVERYTHING.
For the rest, before going node by node, I will tell you some generic things that affect all or almost all:
- For Scale changes and for Deformation intensities I have preferred to use percentage type sliders. Some go from 0% to 100% and others from -100% to +100% I know that in other Designer nodes it is more common to use normalised values (from 0 to 1 or from -1 to +1), but as a creator and artist I generally prefer to think in percentage terms when I think about the scale or the intensities of a deformation. I like to think of “25%” rather than “0.25”, but of course we can also enter floating values to fine tune and having “115.25%”. Oh, and no parameter is clamped: we can go beyond -100 and +100 (although in some cases you may get very extreme results going far away).
- For the Rotation I have preferred not to use the native Designer widget, with the rotor and the double slider for turns & degrees, but I have included a simple slider that goes from -180 to 180 degrees, because again, I also believe that those are the most common ranges of rotation. I never need to rotate “15 turns” in Designer. If we were talking about an animation program it would be different.
- In almost every node we can change the Pivot. If we do not change it, in a rotation, scale or any deformation everything will take place with respect to the center, but with the pivot we can make it with respect to any of the corners, the center of the sides or any desired point. In some nodes you may never need to change it… but I have preferred to keep it in all, except for position changes, where it does not make sense.
- In all nodes (except Safe Rot Ext, where it is not relevant) we can change the Tiling Mode which, by default, is in “Relative to Input” mode (that is: generally active) to “Absolute” mode to remove it completely or leave it only at X or Y.
- In almost all nodes (except Safe Rot Ext, where it is not needed) we can change the Matte Color. That is, the color that appears when we reduce our image and we have disabled tiling. By default it is black, but we can change it to another gray or color.
- And in all nodes we can change the Filtering, which by default is Bilinear but we can change it to Nearest. Something very useful in certain occasions, although generally it is not necessary to touch.
Let’s see now node by node:
Position and Rotation
No big mystery. The first one can only change the position, being 0.5 the default value and the second one only changes the rotation, being 0 degrees the default value.
In this node you can change the scale uniformly or independently, along X and Y. Or in a combined way, if it’s more comfortable for us. You will see how interesting it is to be able to have the rotation and specific scales that we have given to an element as a value that we can read and alter at any time, unlike what happens with the original Transformation 2D, where we often have to reset the transformation matrix if we want to make any change.
It’s a node that has the 3 previous ones in one. We can translate, rotate, scale uniformly and non-uniformly. Having this node we could do without the 3 previous ones, but I prefer to keep all of them, because there are many times that we have completely clear that we only want to make a unique kind of transformation to a certain input.
This is a very interesting node that serves to be able to rotate an element that occupies all our image without that nothing of the element disappears. That is to say: at the same time that the rotation takes place, it is also reduced according to the angle, so that the initial square always touches the limits of the image, without going out. If we change the pivot, logically things change, but the result obtained can also be very interesting.
Safe Rot Ext
This is one of the most complex and useful nodes of the set. And of which I am particularly proud: in its first version, made after seeing Szymon Wójciak’s tweet, it only scaled the image when it was rotated so that nothing from the outside would ever “enter”. It is the opposite of the previous node: instead of being reduced, the image is enlarged when rotated. Something very useful, for example, to be able to freely rotate a vertical gradient so that it adapts according to the angle. But then I realized that I could go further, and here comes the most interesting part. But I will tell you about that later, in a section dedicated to this node.
And so far all the transformation nodes. The following are deformation nodes:
Which performs a tilt of the image on any of the axes. By combining the two axes and changing the pivot we can perform very extreme transformations (in fact we can also rotate the image).
Scales the image differently on one side or the other. Again, by acting on the two axes, and even more if we change the pivot, the possibilities are enormous. Try it.
It is a deformation that “bends” the image, as if it were an Arabian roof tile. It does so along any of the axes, and initially with respect to the center, but if we change the pivot we can make it with respect to the sides. It is called “exponential” because it basically deforms x as a function of y^2 (and inversely). It is a very “cheap” and simple deformation to calculate, mathematically speaking.
It is another of the most complex nodes, perhaps the one that has given me more work and headaches. And more out of stubbornness than anything else. In principle it may seem very similar to the previous one, but it is not. Here the deformations always follow the curves of circumferences. When you take the deformation to the extreme it becomes more evident. Thanks to Javier Colominas and Luis Rández with the mathematics behind this. Ahh, and thanks also to Geogebra, where I could study and understand everything that had to happen. Here you have the functional setup. Geogebra is a marvellous gem.
It is a deformation similar to Bend, but in this case it can be applied to one side and not to the other. So we can have one side straight and the opposite side curved. And also can be apply independently to extremes. It was relatively easy to obtain, but it immediately began to “bother me” the fact that the deformation was transforming into a kind of Gaussian bell when it became more extreme… so then I started working on the next one.
With this one, something similar to the Bend Circular happened to me, I ended up taking it forward by stubbornness. I wanted to obtain a deformation where the curves were always parabolic and where it did not appear that effect “Gauss bell” that appears in the previous one. With this node also Luis Rández gave me a hand with the mathematics, but it was decisive the help of Esger in the Substance Designer Discord.
Play with all of these nodes, changing the pivot, to see how the deformation changes drastically.
And of course, if you feel like getting into the world of Pixel Processor I encourage you to inspect its graphs by opening the SBS directly with Designer. But before you touch anything, make a backup!.
Let’s go now with some notes more specific to the Safe Rot Ext node (I sincerely believe that one of the most useful of the pack).
Safe Rot Ext. The details
This node rotates the image while enlarging it. After creating it I realized that by using it in combination with certain images I could get tileable results. Which was a surprise. A tileable image is no longer tileable as soon as you rotate it. Unless we also zoom it, with certain kind of images. Marco Vitale has a very interesting article on this subject in ArtStation.
Of course, a noise, a dirt, grunge image or organic noise will never be tileable once we rotate it, except if we zoom and rotate it 45 degrees. But there are many images, modular type, with repeating structures, that can be rotated many angles, if we also scale them. And this is what this node can do automatically for you.
If we connect a Tile Generator, a Mesh 2, a Fibers 2, a Weave 2, etc… those kind of images with repeating elements can be safely rotated (keeping the tileability) using the “Rotate with Safe Steps” mode of this node. But for this it will be very important that first of all we indicate to the node how many tiles the incoming texture has. With a Tile Generator it is obvious: if it is 10×10 we will indicate 10. But with other nodes, like Mesh 2, if we give 7 to the tiling to our node we have to increase it to double, 14 (because the internal modularity is 14), and then yes, we can change the slider “Steps for Safe Rotation” to rotate.
As a curiosity: in a 10×10 Tile Generator we can find exactly 40 possible rotation angles (10 for each 90 degrees) in which the texture remains tileable, once it is rotated and scaled conveniently.
Apart from the aforementioned Julián Rojas, creator of what is the germ of these nodes, I would also like to thank:
Andrei Zelenco, a wizard Designer user who I like to consider as “the god of Pixel Processor and FX-Map”. In his ArtStation you can see his incredible creations, totally procedural, using those tools. Andrei created a Facebook group time ago, Inside the Node, together with another great guy and master, Marco Vitale, where both share a multitude of complex and interesting setups using the most technical part of the program. Thanks to several tutorials shared in that group by Andrei and others I have been able to learn enough about Pixel Processor to be able to develop these plugins.
Luis Rández, friend and professor of mathematics at the University of Zaragoza, who helped me with several formulas in a couple of nodes (Bend Circular and Bulge Parabolic). And also to decipher a very strange issue with function nomenclatures in Geogebra.
Several people who have helped me on Twitter with some mathematical formulas, such as:
Javier Colominas – This smart guy helped with formulas for the starting version of circular deformations.
Pedro J. Molina – Thanks for the “uni-step” function needed to change the pivot of the circular deformations. Although I would learn more about “uni-step” later, from Luis Rández.
Szymon Wójciak – Who gave me the idea to create the first version of Safe Rot Ext.
Several Substance Discord users, such as Esger van der Post, Luca Giarrizo and others, who helped me with their technical advice.
And I’m sure I’m leaving someone out… Many thanks to all of you.
I hope these nodes will be useful in your work with Designer.