Normal mapping explained | Posted by jonchappell on Aug 23rd 05 04:00 PM
Normal mapping is a technique used in several games such as Doom 3, Deus Ex: Invisible War, Far Cry, Halo 2 and Unreal 3 to create highly detailed character models with a minimal performance cost.
At design time, developers will create highly detailed models with about 2 million polygons, use these to create pre-rendered cutscenes, box art, etc and then reduce the number of polygons to about 1000-2000 for the in-game model. Normal mapping allows in-game models to be just as detailed as the cutscene models with a minimal performance hit (at least, compared to the performance hit of a 2 million polygon model).
They create a high poly model and a low poly model, and then create a normal map which lists the differences between the two. At run time, the game loads the low poly model into memory and uses the normal map to make the low poly model look like the high polygon one.
A "normal" is a line pointing away from a vector (basically a straight line in a certain direction) along the z-axis. The normal is at right-angles to the vector. The lighting of a model is determined by the angle between the light and the normal. If the angle is small, the light will be almost head-on with the vector and it will be brightly lit and vice versa.
High polygon models have more vectors than low poly ones, and these will be shorter. This means that the normals will be pointing in different directions on each model and so they will be lit differently. By determining at which angle the normal should be facing on the high poly model and applying it to the low poly one, you can create the illusion that the model has more polygons than it actually does. Whilst this requires more calculation than simply loading the low poly model by itself, it requires significantly less processing power than loading the whole high poly model into memory.