← All ideas
  • Published 17 Oct 2019

"Mix Normals," node

Currently in cycles there is no way to mix together 2 normal maps like you can with texture maps. Some nodes, such as the bevel node, allow a normal input which sort of does the same thing, but it's hardly a substitute.

It would be nice if there was a "Mix Normals," node that allows you to mix between or combine normals using a couple different methods. One method might just be a simple "mix," but in case the two normal maps conflict with eachother, there might be some mathimatical operators to allow you to decide which map is "on top."

92.3%

Development Status: Open

Upvote 12 Downvote 1
zhixson.xbdi
17 Oct 2019

14 Comments

Josephbburg

I've actually made a node group for that. I'm planning on making a video about it soon.

It's possible to do this entirely with math nodes. But it's good enough in most cases to use an overlay node.

1
beaug

Hey, it is good to know people are asking for this. I let the developers know and a conversation has started. We are preferably looking for a developer (from the community) that is interested in implementing this!

Take a look at the post here: projects.blender.org/blender/blender/issues/133984

thomas.fessler

take a look at the blendit add on youtube.com/watch

Josephbburg

Take a look at the video I made on the topic .

meutzitzu

You can already to this

well it, depends on how,exactly do you want your normalx mixed : if you just use MIX RGB on the normal map, you want to, say project a fine detail normal map onto a large detail normal map and get the curvature right, this will actually do the trick if, however you want to create more complex compound operations like you can have waves interfere, for example and interact with eachother like water, or behave in a different way when aligned vs when not aligned, you can use vector dot and cross products to achieve this

nanomanpro

In this link you will find a blend file containing a group of nodes intended for proper mixing of normal maps, created by Bartek Skorupa

polskikursblendera.pl/forum/index.php

I also include a link to the playlist on you tube (in Polish but maybe the automatic translation will work) youtube.com/watch

Josephbburg

* @nanomanpro * I'm going to make a similar English language video soon!

1
Quinten.Pillen

How about adding Normal Combine blend mode to the MixRGB node.

zhixson.xbdi Author

* @Quinten.Pillen * I think you would end up needing more than 1 option. For example, if I had a normal map of a bumpy surface, and a normal map of a flat surface with bolts on it, there are probably different ways to combine them so it prefers the detail of one image over the other IE:

  • OP1: Put bumpy surface on everything that is not affected by the bolts
  • OP2: Put bumpy surface only on the parts that are affected by the bolts
  • OP3: Make everything including the bolts bumpy.
Josephbburg

* @Zach Hixson * What you'd do in that case is use a mask to control OP3. You'd make a way of blending normal maps in a nice way, then use a texture to control which normal map is used in any given place. This way, you can get a nice smooth blend between them.

There isn't a way of knowing what part of a normal map is one thing or another. All the computer sees is a bunch of vectors. It's a lot more predictable to give the math jobs to the computers (in this case, combining vectors) and the decision making to humans (Choosing which part is the bolt, which part is the bumpy bit, and which part is a blend of the two).

zhixson.xbdi Author

* @Josephbburg * Actually it should be pretty simple. I used bolts and bumps as just a description, but technically speaking it should be as simple as a difference matte. Considering normals describe vector directions, you could use all sorts of different math to "choose," which parts come from what maps IE: Blending based on dot product

Josephbburg

* @Zach Hixson * Yes, but in any case the human has to make the matte. In this example, you'd be using a vector math node to create the texture.

zhixson.xbdi Author

* @Josephbburg * What I'm suggesting is that the matte could be generated automatically within the node by using vector math. The human would simply choose an option like "A over B," or "B over A" and based on the dot product the node could decide which details end up "on top."

While you could certainly do this using vector math, I think this method would be much more artist friendly.

Josephbburg

* @Zach Hixson * I'd like to see it implemented as a node group.