How learning Substance Designer led to frustration
…and why I almost blamed everything but the real culprit.
Substance Designer is heralded as a powerful tool for material creation, offering artists unparalleled control over textures and surfaces. When I first delved into it, I encountered a core concept that seemed deceptively simple:
‘Making materials is all about addition, subtraction, and scaling (multiply will scale up, and divide will scale down) of floats.’
These floats—numerical values typically ranging from 0.0 to 1.0 are combined to form colour or grayscale data. That single realisation led me to another:
‘All the surface properties of a material—Colour, Normal, Height, Roughness, Specular, Metallic, Ambient Occlusion—are essentially combinations of these mathematical values.’
It sounded elegant. Clean. Predictable.
It wasn’t.
The Core of the Frustration: Tweaking and Layering
The real challenge with SD didn’t lie in understanding the math—it was in applying it, node after node.
Substance Designer is heavily reliant on layering multiple “masks”, each of which is just more data in that same 0.0–1.0 range. These are processed through node-based methods that take inputs and spit out outputs—like a pipeline of tiny floating-point machines. And each one has variables. Many, many variables.
I quickly discovered:
‘Even a single change in a method’s variable can ruin the whole build-up’, leaving me stuck, wondering which tweak was the fix—or the cause.
Specific Roadblocks and “Aha!” Moments
The Misunderstood Blend Node
One of my first major missteps was with Blending. My initial mistake?
I had a mentor/team lead while I was transitioning from Unity to Unreal during one of my school internships (which led to my first game dev junior position), he would always say:
Stop trying to understand Unreal Engine based off what you know in Unity, they have different architectures and conventions.
This tripwire, I eventually encountered here: my assumption about blend order. Coming from Blender, in the Mix Color Node, it is expected that the output is a result of:
A op B
Where op is the blend mode.
But in Substance Designer?
On Background, apply Foreground using op — eventually leading to B op A.
That’s to say that the background pin is the primary input(the one with the dark dot). That taught me the concept of primary input.
Restricting my thoughts to the image… There is more than you see.
I learned the hard way that SD doesn’t operate on “images” the way we perceive them—it operates on values. You might see a clamped preview, but underneath?
“The actual negative values seem to be persistently negative.”
At least from my experience.
What motivated this post? - The Battle of Values
Learning Substance Designer started with a YouTube tutorial, and from there on to an Adobe course. By the time I got halfway through the course, I found out I would eventually bury myself in tutorial hell, even though I was consciously trying to learn.
I took a look at the overall result of the course and jumped into a new graph, hoping to replicate the results myself. It seemed quite easy since the tutorial had earlier guided me through most of the height detailing.
I didn’t hesitate in my attempt, made the base thread for my fabric, combined them into a weave and then onto… wait… why is my weave so dark?
The most frustrating creative challenge this week was getting my fabric weave to appear light, thready, and woven, not dark, flat, or worse… plasticky, as it is at the time.

I tried to brute-force brightness by scaling things up:
If you’ve ever made materials or worked with grayscale, you’d understand that the darker your grayscale, the less the intensity of the effect you are trying to apply. I knew this was not supposed to be the case; I could see the difference between my result and the tutorial.
I had this entry in my journal on one of those days.
I ended up trying huge scale factors just to get a bright image, but the results began to look more plastic than thready.
Nothing felt right.
Then came the turning point—I went back to basics. I revisited my base thread result and started over with learning about nodes used for basic image manipulation, like the levels node. The good old Photoshop theory of image manipulation, levels, threshold, adjustments, etc...
Yeah, I know I mentioned how SD works with values, and not actual images… It’s still quite in line.
My loop of Confusion - How SD cooked me...
I had several notions that kept me in a loop of confusion. Yet, I still chose not to go back to the tutorial for help. Not because of pride, but because I felt through many trials, I could figure out many new things, and get to learn more than a 2-hour or 5-hour tutorial will teach.

One of my notions was:
Adding more gradient to the bell by scaling it would give me more transition for the overall image. The idea was that a smoother gradient would help the Tile Generator produce fewer harsh black spots. I even started using more controlled opacity blends:

I wrote in my journal:
It’s to keep some of those gradient values, so the surroundings of the thread are eventually not all black.
At least, that way, using tiling and thinking in "values", I could produce an image that has mostly non-black values...

And, it was finally looking better… until I touched other node variables or changed the blend op, and everything broke.
Worst, the image reverted to its now standard dark mode the moment I bumped my thread's quality up to 4K.

No matter what I did, I couldn’t seem to maintain that balance. Clearly, something else was wrong.
…
Trust me, in the midst of all this chaos, I was learning. I kept learning as I failed.
Until...
Why you should understand your outputs.
One lonely afternoon, about 5 days into my crazy adventure... I kept thinking about materials... "If eventually I was to complete this material... import it into Blender and so begin piecing my textures together into the Principled BSDF shader, how do I make use of all these outputs?"
I knew the Normal Map could be used to inform lighting on the surface of the object/material. The Roughness map is used to add roughness/smoothness to the surface of the material. Bump and Displacement maps, too, are for height and displacement information on surfaces and meshes, respectively. You get it right?
Well, I began to ask myself a question:
Wait!, what's this AO output? Oh Ambient occlusion... I know that, it's meant to... wait a minute!!!
Yeah, all along... my ambient occlusion map was like this: Focus on the properties...

Looking at my graph, this node, the Ambient Occlusion Ray-Tracing (RTAO), sits close to the Base Material outputs, far from my actual node working environment. This node is where my issue stems from, and I never once thought to look at it.
I had bumped up the Height Scale on the map all the way to 0.1. Yes, you read it right... Zero, Point, One. Well, it turns out the node works best with very small, extremely small float values for its Height Scale.
This is to prove my earlier statement about values. They are all that matter, and slightly messing with one can keep you pulling your afro hairs out week-long.
Eventually, I realised that the tutorial had it like this...

See the Height Scale is set to 0.03?... Yeah, that's all I was missing, all along...
Mostly, because the Ambient Occlusion map is used for shadows, creases and those little details that give ambience and life to your overall material, you would want it to be very bright and less dense to get your texture looking right.
Like this (WIP):

See the difference?... To be safe, I just kept it all the way low. Would have tried 0.001 if the slider would allow it.
This journey had taught me more than I could have learned from sitting with the entire tutorial and then boasting of some finely detailed material that I might not be able to replicate. But this is a great boost to my confidence. Not because I figured out what the ambient occlusion map does, but because of the many things I learned while trying on my own.
Like every real learning experience I have purposely embarked on with documentation to back them, this was by far the toughest journey, but a worthwhile learning experience. Bittersweet yet extremely rewarding.