Although normal maps are widely used they are not commonly understood. The description below is provided as assistance to emerging CG artists to allow them to better use normals to their advantage when lighting the elements of a scene.
The term, normal, or better yet, surface normal, is the mathematical name for a vector (an arrow) pointing away from the surface. This surface normal is used in lighting calculations. The orientation of the surface normal when compared to the position of the viewer and the position of the light source will result in the pixels in the image being rendered brighter or darker. Models created by 3D software store a normal with each vertex which is used by the rendering software and referred to as the vertex normal.
A normal map is a file like a texture map, except that rather than storing colours, it stores the surface normals that are used when rendering the pixels in the image. By using the normal from the normal map, rather than the vertex normal, the renderer is effectively fooled into behaving as if there is a lot more detail than what the vertex data actually provides.
The normal data is stored in an image file using RGB data. However, that RGB data is actually interpreted as XYZ positional information.
When viewed as an image, normal maps often appear somewhat desaturated, with a bluish cast (look at the images below). This is because while there are large variations in the values of X (red) and Y (green), the Z (blue) value is always pointing directly away from the surface and doesn't vary much.
Most normal maps used in 3D rendering are stored as tangent space values, which means that the normals are always pointing away from the surface (perpendicular to the local tangent), similar to the vertex normal. This type of normal map is also referred to as being in object space. Normal maps can also be stored as world space normals but this is less common and not described here.
Although you can view a normal map as an image, it is very difficult to paint them by hand. There are many ways to create normal maps including within most modelling programs and by using specialized 3D sculpting software.
It is often desirable to combine two normal maps to get a richer result. For example: To create a dragon skin look you might want to add a leather-like normal map to skin fold normals you've created using Z-brush or Mudbox.
The method for properly combining normal maps to create such a complex looks is not obvious and is often done wrong. Simply blending the two normal map images together gives a result that might appear OK at first glance, but used in a render will produce incorrect results. The fact is that the normals are mathematical vectors (not the colours you see) and to be combined correctly they be added together or subtracted from each other to get a correct result.
To properly combine maps, we need to add the positive values (> 128) together and subtract the negative values (< 128). Fortunately this can be done inside Photoshop using the channel mixer to properly combine each vector.
To the Add layer: In the Levels window, adjust each channel separately, setting the red and green input levels to 128, 1, 255 and the red and green output levels to 128, 255. Set the blue output levels to 0, 0 to mute this channel.