Ingmar Franz (duerer)

2 answers · asked @ video mark 1:31 · Lesson: Using Normal Maps · Course: Fundamentals of Blender Materials and Shading

What is the exact function of a "Normal Map" node?

I'm wondering what is the exact function of a "Normal Map" node? The normal map is a color texture with three values for each pixel and the normal vector is also also defined by three values for the direction. But I suppose that it's not only the texture space that has to be specified directly in this node but also internally the mapping of each color component to a specific axis and whether it points into the positive or negative direction on that axis: In Blender it's R for X+, G for Y+ and B for Z+. This last mentioned mapping is called the "Swizzle" which differs from software to software as you can see here at the end of the page. I'm still confused about which normal map color space has which benefits. The normal map baking is partly also a mystery for me since most tutorials on Youtube are rather like cooking instruction and lack of background information on how this works behind the scenes.

  • crew

    If you look at the result of the Normal output of the Geometry node, you'll see that the colors refer to the directions the faces are pointing in Blender's XYZ space. If you look at just a normal map texture, it does have the XYZ information in the RGB channels, but not in Blender's XYZ space. 

    Pipe the normal map texture through a Normal Map node and then compare that result to the Geometry's Normal. That should make it clear how the node is interpreting the texture (as whichever space is selected on the node) and transforming it so that it correctly corresponds with Blender's XYZ space which is what the render engine can actually use. 

    Maybe think of it like this:

    • Normal map texture: "Curve things left!"
    • Shader: "No idea which way is left because it depends on which way you're facing. North, south, east, or west? Be more specific."
    • Normal Map node: "He means east. Left is east." 

    This course is a little dusty but should still be helpful: