Material: Scale "Strength" of Normal Map?

Hi. This should be very simple I guess. Let’s say I have a normal map for a muscular, old and wrinkly, skinny and ripped or whatever type of body and I want to scale the effect with a constant in material instances from barely visible to extreme. I guess it’s a kind of contrast I need.

I tried simply multiplying the output of the normal map sample with that scaling factor from zero to one before connecting it to the normal-output. But there’s no effect, except when I set the value to zero, in which case the normal map seems to be disabled completely. Anything greater zero produces the original normal map :confused:

thats because normal maps are normalized, meaning the 3D vectors that the image describes will always be unit vectors, with a length of 1. so if you multiply all the channels by 1000, they are still proportionally the same, and get normalized back to 1. its like you are scaling the vectors, but not changing their rotation, and the lighting only cares about the direction, not the size of the vectors.

the trick is to multiply the blue channel, and leave the red and green alone. then the proportions will change, pointing the light rays in different directions.

so brighten or darken the blue channel, and leave the other channels alone. (or the other way around: multiply the red and green channels and leave the blue channel alone. either way affects the relative proportions of the RGB channels, which adjusts the angle of the light rays.)

1 Like

Thanks a lot! I always suspected there was a reason why normal maps are so colorful. That’s one mystery solved.

I’ve got a follow up question. How would you blend two normal textures together without having them decrease their “intensity”?

I mean, if I have a normal map for muscular and one for old, and I want to be able to scale their effects more or less independently from zero to one, how should I go about it?
If I just take the average of both normal maps, it will result in a flatter surface overall, because muscle tone and wrinkles aren’t necessarily on top of each other and smooth areas in one texture will flatten “rough” areas in the other. So that can’t be it.
I was thinking, maybe I can convert the normal maps to “delta-normal-maps” compared to a reference body normal map or just a completely flat surface. I guess then I could add the delta values together and after automatical normalization, the intensity of one texture can’t be decreased by a zero-delta of the other.
But maybe I can save myself the trouble and there’s some blend node I can use instead? I would try and find one that takes the greater of two values, but that could only work for scalar/grayscale.

Thanks again :slight_smile:

I will try that.

Hi guys, I’m desperately searching for a slow transitory between two normal maps. Your example is the only one that me closer to what I want. Can someone help me please?

Isn’t the normal map blending, like posted by ScottSpadea in the pictures below, exactly what you are looking for?

It’s a lot easier to simply mask the Red and Green channels from your normal then Multiply this by a scalar value (Normal Strength) and then Append back on a value of 1 for the blue channel.

TorQueMoD You will get a different result than original normal map by doing this with NormalStrenght=1 I would not recommend this method.
You will get a better result by scaling a blue channel and normalization.