Normal mapping works by replacing the interpolated surface normal by the one evaluated from an RGB texture, where each channel (Red, Green, Blue) corresponds to the X, Y and Z coordinates of the surface normal. It can be faster than bump mapping since bump mapping requires evaluating the shader underneath at least three times.


The map, usually exported from Mudbox or ZBrush.


The tangent map. Together with the shading normal, it defines the tangent coordinate system that the input vector applies to. If available from your sculpting tool, you should connect here the tangent map that the normal map relies on. If 0, the shader attempts the following actions to build the frame:

  1. Look for vector user data named "tangent" and "bitangent".
  2. Use the UV derivatives.
  3. Build its own local frame.

The shader works in tangent space only. If your tangent map was exported in either world or object space, you could instead use the more generic space_transform shader.


The normal and tangent parameters can be optionally linked to define a custom tangent coordinate system that the input is transformed from. If the normal is not linked, it will use the default surface normal.


Increase or decrease the normal map effect.


Lets you shuffle the input channels order.

Invert X

If enabled, inverts (1-channel) the x input channel.

Invert Y

If enabled, inverts (1-channel) the y input channel.

Invert Z

If enabled, inverts (1-channel) the z input channel.

Color To Signed

For 8-bit maps. If enabled, the input is remapped to the [-1, 1] range.

In general, if you want to use a 16/32 format that can contain negative values, you should avoid the [-1..1] -> [0..1] conversion, and so that map would contain already the normal value, in which case color-to-signing back should be avoided in the shader.

The default values of these parameters (order, invert, color_to_signed) let you correctly import a map generated in Mudbox in Tangent coordinate space.

Tangent Space

Specifies if the input is in world space or tangent space.




Workflow example

  • No labels