Suggestion: Built in Normal Map Blending/Layering Nodes

Hey everyone,
I came across a functionality that I needed quite a few times already and believe many others did aswell based on what I saw on other forums.

It’s blending/layering multiple normal maps together. As you probably know this is a bit tricky and you can’t simply “Mix” normal maps with a MixRGB node and expect good results.

Even though there is arguably no “perfect” way of combining normal maps, there is a beautiful way that is described in this blog post.
tldr: the second normal map is applied to a rotated tangent space, modified by the first normal map. For example this allows a detail normal to be applied on top of a macro normal map and conform to the surface of the macro normal.
This is also the method implemented in the “BlendAngleCorrectedNormals”- Function in Unreal Engine’s Material Editor.

The Math can be done with already existing Blender nodes (Math, VectorMath) and put into a custom node, but since it’s such a common functionality it would be nice to be included into blender or maybe some addon per default.

I came up with two ways of doing this:
One is to have a separate Normal Mix Node, that takes in two world space normals and combines them in world space like so:

The second one is to combine two normal maps in tangent space like so:


This way could be neatly implemented as an additional blend mode in the mixRGB node and doesn’t need it’s one separate node.

I’ve provided the custom nodes in this blend file
The included textures are CC0. The current setting of blending the macro normal (strength 1) with the detail normal (strength 0.5) in world space is identical to the blending in tangent space with Fac 0.5. This can be verified by looking at the difference MixRGB node of the two normals.

I hope this can add meaningful extra funtionality without bloating blenders default node library too much

Greetings
David

4 Likes