Normal Map

Texture RGB qui simule des détails de relief sans ajouter de géométrie. Chaque pixel encode une direction de normale, créant l'illusion de bosses et creux.

Normal Map : simule des détails de surface sans modifier la géométrie

Une Normal Map est une texture spéciale qui simule des détails de surface (bosses, creux, gravures, pores) sans modifier la géométrie réelle du Mesh. Elle encode des directions de normales dans les canaux RGB de l’image, permettant à la lumière de réagir comme si la surface avait du relief.

Le principe

Chaque face d’un mesh possède une normale : un vecteur perpendiculaire qui indique sa direction. C’est cette normale qui détermine comment la lumière se réfléchit.

Une Normal Map « triche » en modifiant ces normales pixel par pixel :

  • La géométrie reste plate
  • Mais la lumière réagit comme si la surface avait du relief
  • L’illusion est convaincante sous la plupart des angles

Comment ça fonctionne

Les trois canaux de couleur encodent les trois axes de la normale :

CanalAxeDirection
Rouge (R)XGauche ↔ Droite
Vert (G)YHaut ↔ Bas (ou Avant ↔ Arrière selon convention)
Bleu (B)ZVers l’extérieur (perpendiculaire)

Une surface plate sans détails apparaît violet/bleu (RGB: 128, 128, 255) car la normale pointe directement vers l’extérieur (Z maximum).

Normal Map vs Bump Map vs Displacement

TechniqueDonnéesGéométrie modifiéeSilhouette affectée
Normal MapDirections (RGB)NonNon
Bump MapHauteur (niveaux de gris)NonNon
DisplacementHauteur (niveaux de gris)OuiOui
  • Bump Map : plus ancien, moins précis, converti en normal map à la volée
  • Normal Map : standard actuel, plus de contrôle directionnel
  • Displacement : seul à créer du vrai relief géométrique

Tangent Space vs Object Space vs World Space

Trois types de Normal Maps existent :

Tangent Space (le plus courant)

  • Teinte violette/bleue caractéristique
  • Relatif à la surface de l’objet
  • Fonctionne même si l’objet bouge/se déforme
  • Standard pour les personnages et objets animés

Object Space

  • Couleurs variées (arc-en-ciel)
  • Relatif à l’orientation de l’objet
  • Ne fonctionne pas si l’objet se déforme
  • Parfois utilisé pour les objets statiques

World Space

  • Rarement utilisé
  • Relatif à la scène entière
  • Utilisé dans certains cas spécifiques (terrain)

Dans 99% des cas, vous travaillerez avec des Tangent Space Normal Maps.

Convention DirectX vs OpenGL

Attention à la convention du canal vert (Y) :

ConventionVert = HautUtilisé par
OpenGLY+ pointe vers le hautBlender, Maya, Substance (par défaut)
DirectXY+ pointe vers le basUnreal, Unity, 3ds Max

Si vos détails semblent inversés (bosses au lieu de creux), il faut inverser le canal vert. Dans Blender, cochez l’option correspondante dans le node Normal Map.

Dans les logiciels 3D

La Normal Map est universelle :

  • Blender : Node Normal Map → Normal du Principled BSDF
  • Maya/Arnold : aiNormalMap → Normal Camera
  • Substance Painter : Canal Normal, bake automatique
  • Unreal Engine : Normal input du Material
  • Unity : Normal Map slot du shader
  • 3ds Max/V-Ray : VRayNormalMap

Focus Blender

Connecter une Normal Map

  1. Ouvrez le Shader Editor
  2. Ajoutez un node Image Texture
  3. Chargez votre normal map
  4. Color Space : Non-Color (crucial !)
  5. Ajoutez un node Normal Map (Shift+A → Vector → Normal Map)
  6. Connectez Image Texture → Color vers Normal Map → Color
  7. Connectez Normal Map → Normal vers Principled BSDF → Normal

Paramètres du node Normal Map

Strength

  • 1.0 = intensité normale
  • < 1.0 = effet atténué
  • 1.0 = effet exagéré (peut créer des artefacts)

Space

  • Tangent (par défaut, le plus courant)
  • Object
  • World

Inverser le canal vert (DirectX → OpenGL)

Si la normal map vient d’un logiciel DirectX :

  1. Ajoutez un node Separate RGB après l’Image Texture
  2. Ajoutez un node Invert sur le canal Vert
  3. Recombinez avec un node Combine RGB
  4. Connectez au node Normal Map

Ou plus simple : reconvertissez la texture dans Substance/Photoshop.

Créer une Normal Map

Par baking (High Poly → Low Poly)

La méthode pro pour les assets de jeu :

  1. Créez un modèle High Poly très détaillé
  2. Créez un modèle Low Poly simplifié
  3. Bakez les détails du high sur le low
  4. Le résultat est une Normal Map

Dans Blender :

  1. Sélectionnez le Low Poly
  2. Render Properties → Bake → Bake Type : Normal
  3. Activez Selected to Active
  4. Sélectionnez High Poly puis Low Poly (actif)
  5. Cliquez Bake

Dans Substance Painter

  1. Importez votre mesh avec une texture de référence
  2. Le logiciel génère automatiquement la normal map
  3. Ajoutez des détails via les brushes et smart materials
  4. Exportez la normal map finale

À partir d’une image (moins précis)

Des outils convertissent une image en normal map :

  • Materialize (gratuit)
  • CrazyBump
  • Photoshop (Filter → 3D → Generate Normal Map)
  • GIMP (plugin normalmap)
  • Blender (node Bump converti)

Résultat moins précis qu’un vrai bake, mais utile pour du prototypage.

Procédural dans Blender

  1. Créez une texture procédurale (Noise, Voronoi, Brick…)
  2. Connectez-la à un node Bump
  3. Le node Bump convertit la hauteur en perturbation de normale
  4. Connectez Bump → Normal vers Principled BSDF → Normal

Combiner plusieurs Normal Maps

Pour superposer des détails (macro + micro détails) :

Méthode simple (Blender)

  1. Utilisez un node Mix en mode Overlay ou Soft Light
  2. Mixez les deux normal maps
  3. Passez le résultat dans le node Normal Map

Méthode précise (UDN Blending)

Pour un résultat mathématiquement correct :

  1. Séparez les canaux RGB des deux normal maps
  2. Additionnez R1+R2-0.5 et G1+G2-0.5
  3. Gardez le B de la normale de base
  4. Recombinez

Des nodes groups tout faits existent pour cette opération.

Erreurs courantes

Color Space en sRGB

  • La normal map apparaît trop forte ou incorrecte
  • Solution : toujours Non-Color

Seams visibles

  • Les coutures UV créent des discontinuités
  • Solution : bake avec cage, ajustez les UVs, padding suffisant

Détails inversés

  • Bosses au lieu de creux (ou inversement)
  • Solution : inversez le canal vert (problème DirectX/OpenGL)

Artefacts aux angles rasants

  • Normal maps ne peuvent pas simuler de vraies occlusions
  • Solution : combinez avec Ambient Occlusion

Silhouette plate

  • La normal map ne modifie pas le contour de l’objet
  • Solution : pour les gros détails, utilisez du vrai Displacement ou de la géométrie

Strength trop élevée

  • Effet plastique, irréaliste
  • Solution : gardez Strength entre 0.5 et 1.5

Normal Map et performances

Les Normal Maps sont très efficaces en termes de performances :

  • Un mesh de 500 polygones avec normal map peut ressembler à 500 000
  • Quasi gratuit en calcul (simple lookup de texture)
  • Standard absolu dans les jeux vidéo
  • Permet des détails impossibles à modéliser (pores de peau, gravures fines)

Résolution recommandée

UsageRésolution
Mobile / VR512 × 512 – 1024 × 1024
Jeu PC standard1024 × 1024 – 2048 × 2048
AAA / Héros asset2048 × 2048 – 4096 × 4096
Cinéma / Close-up4096 × 4096 – 8192 × 8192

La normal map peut souvent être à plus basse résolution que l’Albedo car l’œil est moins sensible aux détails de relief qu’aux détails de couleur.

Pour aller plus loin