From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.

"Bump maps" et "Normal maps"

Mode: Tous les Modes

Panneau: Contexte Shading → sous-contexte TextureImage

Raccourci clavier: F6


Description

Les Normal Maps ("cartes de normales") et Bump Maps ("carte de relief"?) ont toutes deux le même objectif: elles simulent une surface au relief très détaillé, en modifiant l'ombrage de cette surface, comme si celle-ci avait beaucoup plus d'angles, de facettes, au lieu d'être plate, lisse. Puisque cela ne modifie que l'ombrage au niveau de chaque pixel, le "relief" ainsi créé ne projettera aucune ombre, et ne cachera aucun objet situé derrière lui. Si l'angle que fait la surface avec la caméra est trop plat, vous remarquerez que la surface n'a pas réellement de relief.

Nos deux types de cartes (bump et normales) fonctionnent en modifiant les normales (les normales sont perpendiculaires à la surface, au point où elles se trouvent, et sont fondamentales dans l'ombrage d'un objet), ce qui modifie la manière dont est éclairé le pixel correspondant. Bien que les termes normal map et bump map soient souvent utilisés comme synonymes, il existe certaines différences entre eux:

  • Les Bump maps sont des textures N&B: elles ne contiennent qu'une valeur intensité par pixel, et ne font donc que modifier la "hauteur" du pixel correspondant, par rapport à la surface de base, sur un axe parallèle à la normale en cet endroit. Vous pouvez donc soit utiliser des textures en niveaux de gris, soit des textures couleur avec No RGB activé pour n'en récupérer que la valeur intensité.
  • Les Normal maps sont des images "couleur" (trois valeurs par pixel) qui stockent la direction de la normale du pixel correspondant. Elles sont donc bien plus précises que les cartes de bump, car elles peuvent simuler un déplacement du pixel dans tous les sens, et pas seulement le long de la normale d'origine. L'inconvénient est que les cartes de normales sont difficilement réalisables "à la main", comme pour les bump maps: il faut généralement les générer d'une manière ou d'une autre, souvent à partir d'un mesh de plus haute définition que celui sur lequel vous appliquerez cette normal map.

Dans Blender, les cartes de normales sont créées à partir des valeurs RGB de la façon suivante:

  • Le rouge (0 - 255) correspond à la composante X (-1.0 - 1.0);
  • Le vert (0 - 255) correspond à la composante Y (-1.0 - 1.0);
  • Le bleu (0 - 255) correspond à la composante Z (0.0 - 1.0).

Puisque les normales pointent toutes vers "l'extérieur", il n'y a pas de valeur Z négative possible (elle serait de toute façon invisible). Dans Blender, nous avons choisi d'utiliser toutes les valeurs de bleu, mais certaines autres implémentations n'utilisent que les valeurs (128 - 255) vers (0.0 - 1.0). C'est par exemple le cas du moteur de "Doom 3".

Processus de travail

Les étapes pour créer et utiliser des cartes bump ou normal sont:

  1. Modelez un modèle très détaillé (haute définition);
  2. "Cuisez" les cartes de bump et/ou de normales;
  3. Créez un modèle moins détaillé;
  4. Assignez votre carte à ce modèle basse définition, en utilisant un système de coordonnées commun.

Consultez la section sur le modelage pour les manières de créer un modèle haute définition avec les outils Mesh. Vous pouvez y mettre le niveau de détail que vous voulez: plus il y en aura (boutons, plis, protubérances, …), plus votre carte sera détaillée.

"Cuire" une carte, pour simplifier, consiste à prendre les détails d'un mesh haute définition, et à les appliquer à un objet similaire. Celui-ci doit être identique au mesh HD, mais avec moins de vertices. Utilisez le "Baking" de rendu de Blender pour réaliser cela.

Modelez un mesh basse définition en utilisant également les outils d'édition Mesh de Blender. En général, il devrait contenir des faces "regroupant", faisant la moyenne de beaucoup des petites faces du mesh HD. Par exemple, le modèle HD d'une oreille pourrait être constitué d'un millier de faces. Dans le mesh BD, l'oreille pourrait n'être constituée que d'un seul plan, orienté dans le même direction générale que l'oreille détaillée.

Le mapping (placage) est le processus consistant à appliquer une texture au mesh basse définition. Voyez les autres pages de ce chapitre pour plus d'informations sur comment appliquer une texture à un matériau. En ce qui concerne les cartes bump et normal:

  • Quand vous utilisez une bump map, assignez la texture à Nor et activez No RGB;
  • Quand vous utilisez une normal map, assignez la texture à Nor.

Les systèmes de coordonnées texture des deux objets doivent correspondre. Par exemple, si vous "cuisez" en utilisant une carte UV du modèle haute définition, vous devez UV-déplier le modèle basse définition, et aligner ses coordonnées UV avec celles du dépliage du mesh HD (voyez "Le dépliage UV expliqué").

Exemples

Pour créer la scène, placez une caméra orthographique à environ 10BU du singe. UV-dépliez celui-ci; dans cet exemple, nous avons utilisé l'option Project from View (Bounds). Réglez la caméra afin que le singe remplisse juste le cadre. Réglez la résolution de votre rendu à 512×512 (les textures carrées de côté puissance de deux sont plus rapidement rendues par les moteurs de jeux, généralement). Aucune lumière, ni quoi que ce soit d'autre, n'est requis.

Utilisez le baking de rendu pour créer une normal map.

Système de nœuds de compositing pour créer une bump map.

Activez ensuite Do Composite et créez le système de nœuds de compositing montré ci-contre. Voilà comment obtenir votre carte de bump: vous réglez votre scène comme précédemment (ici, l'avant du modèle est à 9.2BU de la caméra orthographique, et les parties visibles du singe s'échelonnent sur une profondeur de 1.3BU, d'où les réglages Offset et Size du nœud Map Value – 1/1.3 = 0.77). Si vous enregistrez votre image dans un fichier Jpeg, vous aurez une profondeur de 24 bits (NdT: ???? 8 bits, plutôt, c'est une image en niveaux de gris!). Si vous l'enregistrez dans une fichier OpenEXR demi-précision, vous aurez une profondeur de 16 bits, et dans un fichier OpenEXR complet, une profondeur de 32 bits. Vous pourriez aussi utiliser le plugin "ZUtilz", mais celui-ci ne produit que des images de 8 bits de profondeur, ce qui pourrait être un peu juste pour votre bump map, étant donné l'intervalle relativement important des Z-valeurs.

Nous allons maintenant nous pencher sur quelques exemples. D'abord, le rendu de "Suzanne" (Rendu de Suzanne). La deuxième image nous montre la carte des normales de Suzanne (créée avec le système de "cuisson" des normales de Blender. L'image la plus à droite de la ligne du haut nous montre la carte de bump de Suzanne.

Ces deux cartes sont ici utilisées comme textures d'un plan, d'abord la normal map (Rendu de face de la carte des normales), puis la bump map (Rendu de la carte de bump). Dans les deux cas, la caméra est restée à la même position, celle où les cartes ont été "cuites" (perpendiculaires au plan).

Rendu de Suzanne.
Normal Map de Suzanne.
Bump Map de Suzanne.
Rendu en vue de côté de la carte des normales appliquée à un plan.
Rendu en vue de côté de la carte des normales créée avec une caméra Ortho, appliquée à un plan. La caméra est à la même place que dans l'image précédente, il y a moins de distorsions de perspective.
Rendu de face (perpendiculaire à la surface) de la carte des normales appliquée à un plan.
Rendu de la carte de bump appliquée à un plan.

Le rendu de la normal map n'est que de la pseudo 3D: vous ne pouvez "regarder" sur la côté de la tête (Rendu en vue de côté).

Si vous utilisez une caméra Orthographique pour créer la carte des normales, vous aurez moins de déformations dues à la perspective (Rendu en vue de côté avec une caméra Ortho).

Options de "cuisson"

Le panneau Render Bake.

La cuisson de rendu est détaillée ici. En résumé, Blender supporte la "cuisson" (pré-calcul) de la carte des normales (parmi d'autres choses):

  • Tangent: "cuisson" d'une carte des normales indépendante du point de vue, et qui est donc le meilleur choix pour l'animation;
  • Object: "cuisson" d'une carte des normales dans le système de coordonnées de l'objet: celui-ci peut donc être déplacé, mais pas déformé;
  • Camera: "cuisson" des normales selon la "vieille" méthode, dépendant du point de vue: l'objet ne peut être ni déformé ni déplacé;
  • World: "cuisson" des normales de le système de coordonnées du monde: l'objet ne peut être ni déformé ni déplacé.

Les autres options sont:

  • Selected to Active: Cette option "cuira" les normales du mesh sélectionné vers le mesh actif (par ex., le mesh haute définition est sélectionné, et est "cuit" vers le mesh basse définition, qui est actif).
  • Distance: Un paramètre contrôlant la distance maximale d'un objet à l'autre (???).
  • Clear: Efface l'image courante avant d'y enregistrer la carte des normales.
  • Margin: La taille (en pixel) de la marge autour de la normal map.


Utiliser et créer des cartes de normales

Bouton Normal Map, dans le panneau Image.

Les cartes de normales et de bump sont simples à utiliser. Assurez-vous juste d'assigner la texture à Nor (boutons Material, panneau Map To). La force de l'effet est contrôlée avec le curseur Nor, dans le même panneau.

Si vous voulez utiliser une normal map, vous devez activer le bouton Normal Map, dans le panneau Image des boutons Texture (F6) (Bouton Normal Map).

Puisque seules les normales sont affectées pendant le rendu, vous n'aurez pas d'ombres projetées ni d'AO ou autres effets "3D". Cela reste une texture.

"Cuire" des cartes de normales est un processus assez simple:

1. Créez un mesh.

2. Créez une version peu détaillée de l'objet, en réduisant le niveau de multires (si vous utilisez cette fonctionnalité), en utilisant un modificateur Decimate, ou simplement en modélisant le même mesh avec moins de vertices. Pour simplifier, nous désignerons l'objet basse définition par "mesh BD", et la version haute définition, "mesh HD".

3. Pour que tout cela fonctionne, le mesh BD doit avoir un dépliage UV. Assignez les "coutures" ("seams"), et dépliez ("to unwrap") vers une nouvelle image de la taille désirée (avec la grille de test UV activée – cela sera expliqué plus loin, dans la section "problèmes courants" (???)).

Le mesh BD déplié.

Vous noterez une nouvelle option 32 bit float sous le nouveau panneau Image. Cette option vous permet de créer votre image avec une profondeur de 32 bits, ce qui est utile quand vous générez des displacement maps. Si vous voulez enregistrer une image 32 bits, vous devez utiliser un format qui le supporte, comme l'OpenEXR.

4. Avant de cuire la carte des normales, les deux meshes doivent être placés exactement au même endroit, donc le mesh BD doit être ramené à l'emplacement du mesh HD avec AltG.

5. Si le bouton Selected to Active est activé (et il devrait l'être), vous devrez sélectionner d'abord le mesh HD, puis le mesh BD.

6. Passez au contexte Scene (F10), panneau Bake (à côté du panneau Anim). Sélectionnez Normals, et personnalisez les réglages en fonction de vos besoins. Puis pressez le gros bouton brillant Bake, et regardez votre normal map apparaître dans toute sa gloire.

La carte des normales après "cuisson".

7. Et non, vous n'en avez pas encore fini. Nous avons encore besoin d'ajouter la normal map comme une texture. Il vous faut ensuite passer aux boutons Material (F5), et créer une nouvelle texture. Dans les boutons Texture (F6), sélectionnez le type Image, et sélectionnez votre image-carte des normales (espérons que vous l'avez nommée de manière logique…) dans la liste déroulante.

Image sélectionnée.

8. De retour dans les boutons Material (F5), dans le panneau Map Input, réglez les coordonnées de texture sur UV. Dans le panneau Map To, activez Nor et dé-sélectionnez Col. Réglez le curseur Nor à 1.0 (ou une autre valeur, en fonction de l'intensité de l'effet souhaité). Et voilà! C'est fini!