Normal Maps

A normal map is just a map (texture) where the values given are the surface normals at each point, rather than the bump height value. We’re taking out the middleman, so to speak. Instead of having graphics software or hardware calculate surface normals from the bump map, these normals are pre-calculated and stored into the normal map, and then used directly by the processor.

The figure below shows this. It is a cross-section of a normal map, 16 pixels wide. No height is shown because the normal map does not store any height information. It just stores directions to be used as surface normals when lighting calculations are done.

A Row of Pixels in a Normal Map

A Row of Pixels in a Normal Map

Cross-section of a normal map sixteen pixels in width. No height information is contained in the normal map, only normal directions. Adjacent normals are completely independent of one another.

This makes things slightly easier for the graphics processor, though that isn’t usually important. More importantly, normal maps have certain technical advantages over bump maps, which in many instances can lead to better surface detail. In particular: