Tutoriel Krita : comment créer une normal map et des déplacement, hauteur maps etc.
Dans ce tutoriel pour Krita en français (mis à jour vers Krita 4.4.8), nous verrons comment créer des cartes de déplacement (displacement map), de hauteur (height map), des normales (normal map), de rugosité (roughness map) et spéculaire (specular map) à partir d'une photo. Ces maps sont très importantes dans le monde 3D car à travers une texture elles renseignent sur la manière dont la surface d'un objet doit être effectivement modifiée (carte de déplacement), ou sur la façon de simuler de manière non réelle des petits détails peu en relief ( carte des hauteurs, carte des normales), ou pour spécifier précisément quelles zones d'une surface, et comment, doivent refléter la lumière et d'autres non (carte spéculaire, carte de rugosité).
Une précision : il y a toujours un peu de confusion dans l'utilisation des noms des différentes cartes, par exemple une carte des hauteurs peut parfois être utilisée directement dans les fonctions de déplacement car les différentes nuances de gris peuvent aider à reproduire fidèlement le maillage réel de un objet; d'autre part, une carte de déplacement peut facilement être appelée carte des hauteurs car elle peut définir, par exemple, la hauteur d'un terrain/d'une montagne. Cependant, une carte des hauteurs peut également être utilisée comme carte de relief (bump map) à la place d'une carte des normales (normal map), lorsque celle-ci n'est pas disponible.
Dans notre cas, cependant, nous ne pouvons pas utiliser une simple carte des hauteurs pour le déplacement, obtenue directement à partir de la photo qui est également bonne comme une carte de relief, nous appelons donc les deux cartes différemment: carte de déplacement celle qui est utilisée dans la fonction de déplacement et carte des hauteurs celle qui est utilisée comme carte de relief, afin de ne pas se confondre avec la carte des normales (normal map).
Ceci est le premier d'une série de tutoriels qui vont nous montrer comment transformer une photo en un ensemble de cartes à utiliser avec le programme Blender, pour créer un mur plus ou moins réaliste, équipé d'écritures, coli, moules, lierre et tout ça fait paraître un mur plus "vécu".
Commençons par télécharger une photo d'un mur (du site pixabay.com) en Krita, ceux qui ne connaissent pas le logiciel Krita peuvent regarder l'introduction sur https://www.graphicsandprogramming.net/fra/tutorial/krita/guide-de-base-de-krita/krita-tutoriel-introduction, et nous appelons la couche correspondante "diffuse" (une carte "diffuse", aussi appelée "albedo" ou "couleur", est une carte qui doit être obtenue en lumière diffuse, sans angle particulier, idéalement, il devrait représenter les couleurs de la surface sans aucun éclairage)
Par sécurité, mais aussi pour éventuellement réutiliser l'image, on sélectionne le calque "diffuse", on le duplique en appuyant sur les touches "Ctrl+J" et on renomme la copie avec "diffuse base"
Dans notre cas, nous avons utilisé une photo non retouchée, mais une bonne carte de départ diffuse ne devrait pas avoir d'ombres, ni de zones plus claires et de zones plus sombres (ce qui pourrait affecter la création des autres cartes), et devrait être améliorée avant d'être utilisée.
Qu'est-ce qu'une carte de déplacement:
La carte de déplacement est une carte en niveaux de gris (elle est généralement codée en 8 bits, correspondant à 256 nuances de gris, mais pour plus de détails il existe également des cartes en 16 et 32 bits) où les parties neutres, qui ne doivent pas être affectées par la fonction déplacer, restent grises (couleur hexadécimale:#808080), celles qui doivent couler sont noires, tandis que les parties qui doivent ressortir davantage doivent être "colorées" en blanc. Les différentes nuances de gris correspondent aux niveaux de hauteur intermédiaires.
La carte de déplacement modifie, dans les programmes de modélisation 3D, les objets de manière réelle et surtout doit donner une forme plus ou moins approximative aux reliefs produits, qui seront alors mieux définis par la carte des hauteurs et la carte des normales (normal map), donc dans notre cas les briques de la carte de déplacement doivent être presque uniformément blanches, tandis que la partie recouverte du mortier doit être presque uniformément noire. Pour ce faire, nous essayons de séparer en quelque sorte le mortier des briques, afin d'agir sur elles de manière indépendante.
Construire la carte de déplacement en Krita:
On utilise l'outil "Contiguous Selection Tool" (Sélection d'une zone de couleur continue) qui va nous permettre de sélectionner des éléments contigus ayant plus ou moins une certaine couleur
et dans le panneau "Tool Options" (Préférences d'outils) nous définissons une valeur de "Fuzziness" (Imprécision) égale à 23,
nous parvenons donc à sélectionner la plupart du mortier sans briques
cependant, là où les briques projettent leur ombre de manière plus cohérente, le mortier n'a pas été sélectionné
changeons ensuite la valeur "Fuzziness" (Imprécision) toutes les parties ombrées du mortier ou, pour d'autres raisons, non encore sélectionnées. (Si, par contre, la sélection faite précédemment a incorporé une partie de quelques briques, en maintenant la touche "ALT" enfoncée, nous pouvons effectuer une sélection soustractive, éliminant ainsi les zones superflues)
En maintenant toujours la touche "SHIFT" enfoncée, nous pouvons utiliser d'autres types d'outils, tels que le rectangle ou la sélection à main levée, pour accélérer les opérations.
Ou pour améliorer la sélection, nous pouvons utiliser les pinceaux ; en fait si on regarde les niveaux on voit qu'un nouveau a été créé automatiquement, correspondant à la sélection qui vient d'être faite
si nous cliquons sur le calque, les parties non sélectionnées deviendront rouges et à l'aide d'un pinceau (comme Basic-1 ou Airbrush_Soft, en choisissant la couleur blanche et l'opacité à 100%) ou une gomme, nous pouvons ajouter ou supprimer des parties à la sélection, simplement en peignant
rendons la sélection moins irrégulière en faisant un clic droit sur la partie sélectionnée et en utilisant la fonction "Transform > Smooth" (Transformer > Lissage)
Nous allons obtiendre
Les bords des briques de la carte doivent être légèrement flous, donc avant de cliquer avec le bouton droit de la souris et d'appeler la fonction "Transform > Feather Selection" (Transformer > Adoucir la sélection) avec "Feather Radius" (Rayon du bord doux) avec la valeur 2 (éventuellement en utilisant "Shrink" (Réduire la sélection) et "Grow" (Agrandir la sélection) pour ajuster la taille de la sélection)
Après la construction, avec cette procédure, une sélection propre des briques
qui correspond au calque "Selection Mask" (Masque de sélection)
nous pouvons modifier indépendamment le mortier et la brique.
Mais d'abord on désature, de manière non destructive, la photo dans "diffuse base" en ajoutant un filtre approprié: cachez le masque de sélection
et sélectionnez le calque "diffuse base" et, dans le menu déroulant en bas à gauche, sélectionnez "Filter Layer" (Calque de filtrage)
et dans la fenêtre contextuelle sélectionnez le filtre "Adjust > Desaturate" (Ajuster > Dé-saturer) avec méthode de désaturation "Average" (Moyenne) (la méthode de saturation doit être sélectionnée en fonction de l'image à modifier et du travail en cours)
nous confirmons et obtenons
dupliquez le "Selection Mask" (Masque de sélection) et rendez-le visible en cliquant sur l'icône en forme d'œil
cliquez sur le bouton "+" en bas à gauche
nous créons un "Paint Layer" (Calque de dessin) que nous appelons "Dark Mortar" (Mortier foncé), en réécrivant le nom après avoir appuyé sur la touche F2, et en faisant glisser le masque de sélection dupliqué dans ce calque
sélectionnez le calque "Dark Mortar", sélectionnez l'outil pot de peinture (situé dans le panneau de gauche) en appuyant sur la touche "F"
nous sélectionnons la couleur noire
et nous colorons tout le calque.
Nous sélectionnons "Copy of Selection Mask" et le transformons d'un masque de sélection en masque de transparence, en cliquant avec le bouton droit de la souris et en sélectionnant "Convert > To Trasparency Mask" (Convertir > en un masque de transparence)
Le masque de transparence garantit que la peinture noire de "Dark Mortar" n'est présente que sur le mortier et non sur les briques.
Nous donnons à l'opacité du "Dark Mortar" une valeur de 80%, soit juste assez, pour faire ressortir les reliefs et ondulations les plus importants présents dans le mortier.
Nous sélectionnons le calque "Dark Mortar" et le masque relatif "Transparency Mask 1" et dupliquez-les en appuyant sur les touches "CTRL+J". Nous renommerons le nouveau calque en "Light Bricks", tandis que le nouveau masque en "Transparency Mask 2"
cliquez sur "Transparency Mask 2" et inversez les couleurs en appuyant sur les touches "CTRL+I"; de cette façon les briques seront visibles tandis que le mortier sera transparent. Ensuite, nous peignons avec le seau le calque "Light Bricks" avec la couleur blanche, en portant l'opacité à une valeur de 60% pour montrer les reliefs les plus intéressants des briques.
On obtient ainsi la carte de déplacement
Maintenant il faut flouter l'image, en effet une carte de déplacement avec des bords trop nets fera émerger les éléments les plus hauts verticalement à 90 degrés, étirant ainsi la carte diffuse avec des effets indésirables, alors que nous avons besoin d'un résultat plus doux qui ne génère pas d'artefacts. la carte des couleurs. Peu importe si certains détails sont supprimés, car la carte de déplacement est utilisée pour façonner les briques, tandis que pour les détails, nous utiliserons les cartes de relief.
Ajoutons donc un "Filter Layer" (Calque del filtrage) "Blur > Gaussian Blur" (Flou > Flou gaussien), avec "Horizontal radius"(Rayon horizontal) et "Vertical Radius"(Rayon vertical) avec des valeurs proches de 20px
et nous obtiendrons une carte de déplacement comme celle-ci
que nous exportons, avec "File > Export" (Fichier > Exporter), en tant que "displacement_map.jpg" qui, utilisé dans un logiciel de modélisation 3D (dans notre cas Blender) avec un modificateur de déplacement, résultera
nous sauvegardons le fichier, avec "File > Save As" (Fichier > Enregistrer sous), en tant que "displacement_map.kra".
Qu'est-ce qu'une carte de relief (Bump Map):
Nous allons maintenant créer la carte des hauteurs et la carte des normales (normal map), toutes deux considérées comme des cartes de relief. Les deux contiennent des données pour ne représenter que des détails apparents sur la surface d'un maillage dans un programme de modélisation et de rendu 3D, par conséquent, ils ne créent pas de vrais reliefs mais des illusions de relief à travers un jeu d'ombre et de lumière; cela vous permet de créer des modèles avec relativement peu de polygones, mais avec de nombreux détails, comme ceux utilisés dans les jeux électroniques. Étant donné que le détail qu'ils créent est faux et qu'aucune résolution réelle n'est ajoutée, la forme de la géométrie à laquelle la carte de relief est appliquée ne sera pas affectée par la carte.
Qu'est-ce qu'une carte des hauteurs (Height Map):
Comme mentionné, elles sont similaires au format de fichier des cartes de déplacement, mais pas dans les graphiques, car elles doivent être beaucoup plus détaillées, car elles doivent décrire les objets qu'elles représentent de manière très précise.
Elles sont également enregistrés au format 8 bits en 256 nuances de gris, du noir au blanc, dans lequel chaque pixel représente la quantité par laquelle le point de la surface doit apparaître en relief : le blanc correspond aux reliefs, le noir aux zones en profondeur, le gris intermédiaire a un effet neutre.
Les cartes de hauteur sont très affectées par l'angle de la lumière et de la caméra, dans un environnement 3D, il faut donc être prudent dans leur utilisation, en les associant éventuellement à une carte spéculaire adéquate, pour pallier les problèmes des zones semi-ombragées.
Comme nous l'avons dit précédemment, par rapport à une carte de déplacement dans une carte des hauteurs vous devez voir plus de détails et la carte ne doit pas être utilisée à l'intérieur d'une fonction de déplacement pour déformer la géométrie du maillage pour créer les briques, donc il ne doit pas y avoir de si gros différence de nuances de gris entre le mortier et la brique que nous avions essayé d'obtenir plus tôt.
Création d'une carte des hauteurs en Krita:
Commençons donc par l'exemple de la carte de déplacement, créée auparavant, nous supprimons le calque "Filter Layer 1 (Gaussian Blur)", et donnons maintenant à l'opacité du calque "Dark Mortar" une valeur de 40%
et au calque "Light Bricks" une valeur de 25% pour l'opacité
obtenant ainsi la carte des hauteurs
que nous exportons en tant que "height_map.jpg".
Nous sauvegardons ensuite le fichier, avec "File > Save As" (Fichier > Enregistrer sous), sous le nom "height_map.kra".
Qu'est-ce qu'une carte des normales (normal map):
Comme mentionné précédemment pour les cartes de relief et les cartes de hauteur, une carte des normales (normal map) est destinée aux petits reliefs à plus haute fréquence, tels que les rainures, les rayures, la porosité de la peau et partout où des détails de surface fins sont nécessaires. Cependant, il s'agit en fait d'une illusion, car cette procédure n'affecte pas la géométrie proprement dite, mais la manière de gérer la lumière captée, économisant ainsi sur le nombre de polygones à utiliser.
Un objet dans un environnement 3D est éclairé à l'aide des normales de surface des différents polygones qui le composent : en fonction de l'angle entre le vecteur de la normale de surface et celui de la lumière incidente, le polygone peut être plus ou moins ombré. Une carte des normales (normal map) renseigne sur une "perturbation" virtuelle (colorée en bleu sur la figure suivante) "au-dessus" de la surface "réelle" du modèle (colorée en noir),
Une carte des normales (normal map) est une texture RVB, où chaque pixel représente la différence dans la direction dans laquelle la normale de surface doit faire face, par rapport à sa normale de surface non modifiée. Mathématiquement, pour chaque point de la surface on considère un plan tangent à ce point (en fait on l'appelle aussi "normal map of tangent space"), représenté par un vecteur perpendiculaire à celui-ci. Une correspondance est alors faite entre les vecteurs unitaires, dans l'espace tridimensionnel X Y Z, et les canaux RVB des couleurs de chaque pixel de la carte. Chaque couleur représente donc un axe différent de direction relative. En utilisant la règle de la main gauche et en n'affichant que les vecteurs face à l'utilisateur, nous obtiendrons ces correspondances :
X : de -1 à +1 -> Rouge : de 0 à 255
Y : de -1 à +1 -> Vert : de 0 à 255
Z : 0 à -1 -> Bleu : 128 à 255
Ces textures ont donc tendance à avoir une prédominance bleu-violet, en raison de la façon dont le vecteur est stocké dans les valeurs RVB et traité ultérieurement.
Un vecteur normal pointant directement sur l'observateur (0,0, -1) est mappé sur (128,128,255). Ainsi, les parties de l'objet faisant directement face au spectateur sont bleues, la couleur d'une carte des normales (normal map) représentant la surface non déformée, qui correspond plusieurs fois à la majeure partie de la texture.
Création d'une carte des normales (normal map) en Krita:
On lance Krita et charge la photo du mur dans un calque que l'on appellera "diffuse"
en cliquant, comme précédemment, dans le menu déroulant à droite du bouton "+" en bas, nous ajoutons le "Filter Layer" (Calque de filtrage) "Edge Detection > Height to Normal Map" (Détection des bords > Hauteur vers un carte normale) et la fenêtre contextuelle apparaît
Dans lequel nous pouvons voir quelques options à choisir:
- trois méthodes différentes : Prewitt (qui génère un effet plus fort), Sobel (effet plus subtil), Simple (calculé plus rapidement). Nous choisissons l'option "Sobel" car nous n'avons pas besoin de reliefs très nets.
- Le canal à partir duquel obtenir la carte des hauteurs sur lesquelles travailler. Dans notre cas, nous laissons "Bleu" sélectionné, car il accentue suffisamment les fissures dans les briques mais sans faire ressortir d'autres parties indésirables. (Examinez toujours l'aperçu pour voir quel canal convient le mieux à votre texture, cela peut dépendre de la couleur dominante de la texture et des divers éléments présents)
- On ne change même pas le rayon horizontal et vertical, dont l'augmentation pourrait avoir pour effet d'accentuer le relief généré par la carte.
- Une attention particulière plutôt nécessite le choix des axes pour la réalisation de la normal map; en fait si nous laissons inchangée la triade X+, Y+ et Z+, en appuyant sur le bouton "OK" nous obtiendrons une carte des normales (normal map) comme suit
qui, cependant, met en évidence le mortier à la place des briques comme en relief, comme on peut aussi le voir en appliquant la carte sur un plan dans le programme de modélisation 3D Blender, après avoir enregistré le fichier, avec "File > Save As" (Fichier > Enregistrer sous), en tant que "normal_map.kra" et exporté comme "normal_map.jpg"
Alors faites un clic droit sur le calque "Calque de filtrage" que vous venez de créer, ou appuyez sur F3, et choisissez "Propriétés"
Nous modifions de manière appropriée l'axe Y en choisissant la triade X+, Y- et Z +
et nous obtenons la carte
en vérifiant dans Blender, on découvre qu'une carte avec ce choix d'axes représente plus correctement le mortier et les briques
nous sauvegardons le fichier sous "normal_map.kra" et exportons le fichier au format jpeg "normal_map.jpg".
Qu'est-ce qu'une carte de rugosité (Roughness Map):
Les surfaces des objets ne sont pas toutes les mêmes, certaines sont plus lisses, d'autres plus ridées, d'autres ont une surface constituée d'objets encore plus petits et très proches les uns des autres. Ainsi, lorsqu'un rayon de lumière frappe une surface plus rugueuse, les petites bosses reflètent la lumière dans plusieurs directions différentes et le rayon précédemment concentré est globalement réfléchi de manière plus diffuse. La carte de rugosité est une carte en niveaux de gris, qui contrôle la netteté des reflets, c'est-à-dire s'ils doivent être plus concentrés ou plus diffus (dans ce cas, ils sont plus flous, de manière granuleuse).
Dans certains sites, qui permettent de télécharger des textures, vous pouvez parfois trouver des cartes "Gloss" au lieu de "Roughness", mais en pratique elles sont conceptuellement identiques, mais l’une est l’inverse de l’autre (il suffit donc d'ajouter un nœud d'inversion à vallée de texture)
Création de la carte de rugosité en Krita:
En ce qui concerne notre cas, concernant un mur, le mortier est très poreux et donc avec une valeur de rugosité assez importante, de même que les briques, d'autant plus qu'elles ne sont pas neuves, mais anciennes et abîmées. La poussière du mur en ruine pourrait également amplifier l'effet.
Rechargeons l'exemple concernant la texture de déplacement "displacement_map.kra" et nous supprimons le calque "Filter Layer 1 (Gaussian Blur)"
pour avoir une rugosité élevée, il est nécessaire d'alléger à la fois le mortier et les briques, nous changeons donc le calque "Light Bricks" avec une opacité de 58%, tandis que nous donnons à l'opacité "Dark Mortar" une valeur presque égale à 0% et nous obtenons
nous sauvegardons le fichier sous "roughness_map.kra" et exportons le fichier au format jpeg "roughness_map.jpg"
Qu'est-ce qu'une carte spéculaire (specular map):
Il est utilisé en infographie en temps réel, pour déterminer l'intensité de la réflexion spéculaire, mais en sauvegardant certains calculs avec les lumières présentes sur la scène, ou pour forcer la réflexion d'une surface dans des situations particulières (par exemple une canette d'un boisson tirée à l'extérieur du réfrigérateur, un peu embuée et avec des jets d'eau condensée), où les zones les plus brillantes sont peintes en blanc et les plus opaques en noir, ou pour souligner certaines zones qui devraient être intéressantes (qui, par exemple, ne serait pas vu).
Une carte spéculaire indique essentiellement où une réflexion doit ou ne doit pas apparaître, pour cette raison son utilisation peut être considérée comme incorrecte dans un matériau basé sur la physique (PBR), pour lequel une carte de rugosité serait plus appropriée.
Construire une carte spéculaire en Krita:
Dans notre cas, il n'y a pas de réflexions particulières à remarquer, il ne serait donc pas nécessaire de construire une carte de réflexion. La carte pourrait être utilisée si le mur était humide, car dans ce cas les briques réfléchissent beaucoup plus que le mortier, dans ce cas donner une valeur uniforme pour la spécularité à l'ensemble du mur ne serait pas correct et une carte serait nécessaire pour distinguer les différentes zones (le mortier des briques).
Ouvrons le fichier "height_map.kra"
Si vous souhaitez donner plus de reflet aux briques, nous augmentons la différence avec le mortier en donnant à l'opacité de "Dark Mortar" une valeur de 53%
et ajoutez un filtre "Niveaux", en ajoutant un "Filter Layer" (Calque de filtrage) "Filter Layer > Adjust > Levels" (Calque de filtrage > Ajuster > Niveaux) pour fournir également un peu de contraste, en déplaçant les curseurs vers la droite, en donnant la valeur des ombres 16 et les tons moyens 0.506,
On ajoute ensuite un filtre de calque "Adjust > HSV/HSL Adjustment" (Ajuster > Ajustement HSV/HSL) avec "Lightness"(Luminosité): -45 pour adoucir un peu les reflets.
nous sauvegardons le fichier sous le nom "specular_map.kra" et exportons le fichier au format jpeg sous le nom "specular_map.jpg".
Vous pouvez télécharger les cartes créées ici :
diffuse_map.jpg
displacement_map.jpg
height_map.jpg
normal_map.jpg
roughness_map.jpg
specular_map.jpg
Avec ce tutoriel, la première partie du mini-cours est terminée, dans le prochain épisode, nous parlerons du déplacement dans Blender, où nous commencerons à utiliser l'une des cartes créées ici, la "carte de déplacement" Blender: comment créer les briques du mur avec le modificateur de déplacement. À bientôt!
Retour au cours "Cours Blender: d'une photo à un mur 3D"