In case you missed it
Learn more about Substance Designer
Hi, my name is Romain Lemaire, I’m a freelance Prop/Texture Artist and a Tech Artist (rigging/shading).
6 years ago, I started working as a freelancer (that was my first job), and I definitely don’t recommend this to any student or junior in the industry. It was hard at the start but I had the chance to work on a great range of projects because you can't be picky when you don’t have any experience. I worked on short films, animated TV series, a marketing movie for architecture, real-time applications, and desktop/mobile games. As a result, I tested many pipelines and learned a lot.
Now, I mainly do real-time rendering for marketing projects and work on video games (including collaboration with Dekogon) as an Environment/Technical Artist.
Discovering Substance Designer
I wasn’t really fond of texturing work when I started learning 3D and was more interested in the technical aspect of things, that's why I started with shading in UDK. I loved its nodal workflow and found it really intuitive. After that, I switched to Unity for professional reasons and started coding my own shaders since there wasn’t any built-in solution for nodal workflow (Shader Forge and Amplify can be tricky to use at a studio where Unity is not used on a daily basis).
When I came to a point when I needed to enhance my artistic capacity, I searched for texturing methods and discovered Substance Designer. Thanks to the nodal workflow, I quickly got a grasp of the program by first watching a free tutorial on YouTube and then experimenting with simple materials and patterns. It was fun but not enough, so I watched Rogelio Olguin's tutorial on cobblestones. It taught me a lot and helped me to understand how you can make good materials and textures.
I then continued to experiment and study some .sbs files provided by other artists on Substance Share. Speaking of artists to study from, I think I'm not the first who will recommend Daniel Thiger. I also recommend to search for great materials on Substance Source and to study how they are made.
I'm a great fan of Lovecraft, so I had the idea to make something as a tribute to his work for a long time. When I finally got to it, I started gathering reference and quickly experimented with some ideas but nothing was really pushed further except for the Gooed Eyes I made for Halloween.
Then, The Mentor Coalition announced their Nodevember challenge and I decided to create something tricky and organic. I started with octopus skin gathering a reference board and added eldritch references I found earlier just in case. Then, I quickly drifted and that's how Eldritch Skin material began.
Skin Material Setup
Finally, it's breakdown time. I will try to show you the most useful things here - I can't cover the whole graph here because it's too big, but the essentials will be described.
I first started with my original idea and quickly added some details I liked. Here's the first draft of the material I made in one evening:
After that, I tried to add an eye on top of that. I struggled a lot and had to restart four times from scratch but finally found a method that gave the result I wanted. I aimed for the possibility to open the eye in order to animate it because I wanted to take the viewer by surprise.
This is the setup for the opening eye (minus some adjustments and a mask for the animation part):
Basically, it consists of two tile samplers that generate the same shape - a paraboloid. The first paraboloid is small and a bit stretched (it's the eye) and the second one is bigger with some large bumps. I offset them a little so that the eye went into the “cavity” of the skin.
I then deform the eye with two Directional blurs to get an almond shape and then use this blurred version to warp the skin base. I use two warps which allows me to really widen the area and prevent some artifacts.
I then subtract the warping blur to make cavities and I add the eye shape there with Max Blending mode (Lighten).
I also used a cool trick that works for organic substances: just before adding the eye, I sloped the skin with a really small value - that kind of inflates the height and adds a lot of organic volume to the material.
For animation, I added two custom nodes:
- Opening of the eye is a simple Float node that just outputs a float value controlled by the node itself
- The remapping node plugged into two warps is a custom node that allows me to remap the range value
Here is the first animation test and the result these nodes gave me:
As you can see, it’s really simple at this stage. After that, I just added a little bit of position random (same values for both tile samplers) and a random mask to get the final result.
However, the eye missed something to really sell the look so I decided to add an eyelid.
Here is the cleaned up setup for it:
Not a hard one. I first isolated the cavities where the eyes pop, then used a distance node to enlarge the isolated shape which let me control where exactly the eyelid appeared. I then simply inflated it with the slope blur trick.
I also created a feathered mask for my cavity, just to get a blurry edge. I used this feathered mask to blur only the outside of the eyelid to blend it smoothly with the base skin.
With this, the base skin was done, and I then focused on micro details.
Octopuses can change the "roughness" of their skin to help sell the rocky look when they hide in stone or sand, and I wanted to mimic that ability.
I split the skin grain into two parts: the basic grain and some kind of large skin wrinkles.
The basic grain is a really basic setup:
The only noteworthy thing is the custom node - Edge Detect Organic that retains gradient information from the base map.
I then used it to add some crevices to the noise. I like to blend this kind of noise with its tighter version via Safe Transform as it helps add details without costing too much.
Here's the setup for the larger grain:
I used Reaction Diffusion for the base, a bunch of warps to make it look less procedural, then blurred it a lot, and just used the Inflate trick discussed earlier. I used also Perlin noise to add some kind of lumps to finish the look.
With animation in mind, I added a float parameter “skin roughness” that switches to a more blurry height without slope when it goes to 0:
I then blended the two details together and added them to the skin base.
Another simple trick that helped to really sell the look of the skin: when I added the detail I first applied warp to the base skin. It produced some stretching.
It's worth noting that the grain I made was used for detailing in other parts, for example, the eyelid.
Animation proved to be hard because of a couple of reasons: first, there aren't any tools that allow animating a substance directly in Designer (maybe I'm wrong but I didn’t really find anything) and secondly, you can neither do that in Marmoset via keys in parameters.
Because of this, I chose the “good” old method of simply exporting substance textures with incremental change in the desired parameters, then import them in Marmoset and finally render the final frame.
It was a really hard and tedious job, and I lost many hours on it. To help with the process, I simplified my animation to the maximum. I used two nodes for this:
- Float: a node that controls a float value. It helped me simplify my animation by limiting the number of parameters and the range of values (from 0 to 1).
- Remapping Range: a node that takes an input and remaps the current range to a new range. It allowed me to control a lot of the nodes with limited float.
With these nodes, I created four parameters that control the whole animation:
- Eldritch parameter: controls the opening of the eye
- Papillae parameter: controls the protuberance
- Skin roughness parameter: controls the smoothness/roughness of the skin
- Eye animation: controls the little eye animation when the eyes are opening
In reality, even a small movement of the eye makes a lot of the flesh all around it move, and I wanted to achieve the same effect. For example, the Eldritch parameter is plugged to 18 other nodes so that it can subtly move to another part of the texture.
The most significant things here are a bunch of warps around the eyes that go from 0 to 1 to simulate the moving flesh around the eye and the activation of a vector map displacement in the papillae tile sampler - when the eyes open they are slightly pushed to the side by it.
Another thing to notice is that I delayed some animations until others are played. For this, I used the Normalize Range node that allowed me to set a new limit to an input range.
I used it with the Eldritch parameter to hide problematic papillae before the eyes open. From 0 to 0.5 the papillae disappear, and the eyes only start to appear at 0.5 of the Eldritch parameter.
When I started testing the animation and exported everything with an incrementation of 0.1 to my parameters each frame, I obtained this result:
Something bothered me: the animation was really linear and far from organic.
I wanted to add rhythm to the animation, and as I couldn't animate it by hand, I created a new node to give acceleration and deceleration to my parameters.
The Curve Node Value allows me to use a curve node to control the value changes and break the linearity.
It gave me a more interesting result:
But the result still felt kind of awkward since all the details appeared and disappear ed at the same time.
I needed to delay the animation of the details, so I used a setup similar to this:
Basically, I just generate a random color mask and use a histogram scan to slowly crush the value to a perfect white.
Then, to avoid the mechanical appearance the parameters give, I planned my animation and started incrementing the parameters so they overlap each other.
The last thing I didn’t talk about is the eye animation which was based directly on my shading knowledge.
A lot of animation in shading is based on the control of the UV mapping, and I tried to populate my eyes by using a similar method to easily control them after placing with parameters.
The Shape Splatter uses this kind of method with the splatter data, but I don’t want to clutter my animation process with such a cost-heavy node.
Instead, I used the UV Lookup node by Bruno Alfonseca.
Here is the setup I used for the eyes:
Globally, I use Food Fill to Random to create two gradients based on the details I want to add, one on the U/X axis and one on the V/Y axis. The two gradients with the UV Lookup node place the details in the middle of the base shape.
I then blend the value that goes from black to white; here it’s remapped so it stays in the eyeball range, with the Add Sub node. If the value is darker than grey it's subtracted and if the value is lighter it adds up.
Since the gradients are changed, the position of the details changes accordingly.
I used this in the Eldritch parameter so the eyes re-center themselves when they open. The parameter “eye control” gives some random movement to the eyes so they don’t stay fixed.
Advice for Substance Designer Learners
It may sound a little bit hypocritical but keep your materials simple. Try to tackle the essentials and then improve the material gradually. Don’t waste time on details that nobody will notice or that will disappear after you add the final touches to the material.
Try to really plan your material before diving into it, use reference and think how this or that can be done procedurally. Don’t get stuck on problems that don’t need to be resolved.
If you prefer to experiment, nothing prevents you from gathering references. After your experiments give interesting results you can still add the final details, and the references will help here.
Also always think of your materials in their final context, review renders, look at them the way the viewer will see your work.
One rule you should always have in mind when doing texture work is to have at least three levels of structure in it: some large shapes for the viewer looking from far away, some middle information for the viewer who watches closer, and some really fine details for attentive viewers who will study close-ups.
Finally, if you want to start learning Designer, master the basics first. Don’t dive into complex materials like organic ones right from the start, keep it simple and try to focus on a small number of nodes first.
A great exercise for this is to start with architectural patterns, like a simple tile pattern or a brutalist texture. Experimenting with them, you'll master the basic nodes.
Besides, try to make man-made materials at first because you will find a lot of references for the details.
Don’t be ashamed to ask more experienced artists about something or open .sbs files found on the internet - they are an awesome source of knowledge.