En imagerie numérique, le normal mapping est une technique utilisée pour feindre le relief d'une texture.
Cette technique est utilisée pour simuler graphiquement des détails géométriques, sans ajouter de polygones à la géométrie réelle. Elle permet donc d'améliorer la qualité graphique avec un faible coût en matière de ressources utilisées et est donc destinée à une utilisation en 3D temps réel pour la prévisualisation d'objets complexes ou, plus communément, dans les jeux vidéo.
Une "normal map" (carte de normales) est habituellement une image RVB où les composantes fournissent les coordonnées X, Y et Z de la normale du texel de la texture correspondante. Dit autrement, chaque pixel de la normal map est en réalité un vecteur fournissant l'information d'élévation et d'inclinaison de sa surface, c'est-à-dire, de la surface du texel sur lequel sera appliqué la normal map. On l'utilise donc telle une texture, en complément de la texture diffuse (et éventuellement de textures d'autres types - tels que les lightmap).
On reconnait généralement ces textures à leur prédominance de magenta. Il est à noter qu'elles peuvent être de résolution différente de leur texture de destination selon les besoins.
Techniquement, les informations qu'elles fournissent peuvent être utilisées dans différents algorithmes de rendu, dont les principaux sont le bump mapping et le parallax mapping. Le rendu final pourra donc être différent selon les moteurs graphiques et leurs spécificités (typiquement, l'inversion de coordonnées). Le bump mapping utilisera ces informations afin d'émuler l'ombrage des surfaces (les rendant ainsi rugueuses) tandis que le parallax mapping émulera graphiquement l'épaisseur (en procédant à un décalage du texel selon Z). Les deux techniques étant souvent cumulatives puisque n'agissant pas sur les mêmes principes (XY pour le primitif bump mapping, Z pour la parallaxe).
Si l'idée de base est de donner du relief aux textures, cette technique permet également d'économiser des polygones. En effet, certains logiciels permettent de créer une normal map d'un objet complexe afin de l'appliquer sur le même objet mais à la géométrie simplifiée (cf. l'illustration) et donc, d'en conserver graphiquement tous les détails. Ceci permet donc de réduire drastiquement le nombre de polygones de l'objet à gérer en temps réel, sans une trop grande perte de qualité. Ou, inversement, d'améliorer la finesse graphique d'un objet 3D avec peu de polygones (donc, sans en augmenter son maillage).
Le normal mapping n'est donc pas une technique de rendu, mais une technique de capture (de l'information "relief"). Ainsi, on la retrouve autant dans les jeux vidéo que dans l'industrie à travers, par exemple, les scanner 3D. Elle a également révolutionné les méthodes de travail des infographistes 3D qui, grâce à elle, a vu l'émergence de logiciels de sculpture virtuelle (tel que le célèbre ZBrush). Très gourmands en polygones lors de la création d'objets, ces logiciels ont permis une certaine libération de l'expression artistique en réduisant les contraintes techniques liées à la création. Et ceci, tout en garantissant des performances excellentes en sortie (via la simplification géométrique des objets ainsi créées, en couple "objet low-poly + normal map") dans l'optique d'intégrer ces objets à des scènes plus complexes sans dépasser les contraintes techniques (liées à l'évolution des matériels informatiques).
Il est à noter que nVidia a mis gratuitement à la disposition du public un plugin dédié au logiciel Photoshop pour générer des normal maps à partir de textures, selon différents paramètres, mais essentiellement fondé sur les variations colorimétriques. La création manuelle de normal map passera généralement d'abord par la création (ou l'utilisation) de leur height map (carte des hauteurs Z, généralement en nuances de gris) avant d'être convertie (en prenant en compte l'inclinaison entre chaque niveau des texels).
Il est également à noter que l'utilisation d'une normal map conjointement avec les techniques de rendu du bump et du parallax mapping constitue une alternative plus performante (en matière de vitesse de rendu) mais qualitativement (i.e. graphiquement) moins bonne à la technique du displacement mapping (n'utilisant qu'une height map, la jointure des niveaux Z s'effectuant par le moteur de rendu).