Le baking : procédure avancée

Attention

Il est essentiel, avant de commencer cette étape, de s'assurer qu'on dispose d'un maillage valide, sans normale inversée, sans vertex isolé, sans face mal soudée et sans ilot de polygones inutiles sans quoi l'opération de baking produira des résultats mauvais voire aberrants.

Pour les mêmes raisons, il est également vital d'être sûr que le maillage et les points pivots du LowPoly et du Highpoly sont orientés dans la même direction et que leurs échelles respectives sont concordantes : les problèmes éventuels de baking viennent très fréquemment d'une erreur à ces deux niveaux.

Cette seconde procédure permet d'une part d'utiliser l'outil de Delighting d'Unity qui génère une texture Diffuse de meilleure qualité que celle produite dans la procédure simple en soustrayant la texture d'Ambiant Occlusion. Elle permet d'autre part de finaliser le baking avec Substance Painter afin de produire des textures optimisées en fonction d'un moteur de rendu 3D temps réel précis.

Étapes :

  • Baking des textures Diffuse, Bent Normal, Normal, Ambiant Occlusion, Position, Height, Glossiness avec Substance Designer
  • Ajout d'un masque à la texture Diffuse
  • Delighting de la texture Diffuse avec Unity
  • Création des textures Position, Normal, World Space Normal, Ambiant Occlusion et Curvature avec Substance Designer
  • Exportation

Baking avec Substance Designer :

Ce premier baking a deux objectifs : faire le baking des cinq textures nécessaires pour réaliser le delighting avec Unity, et créer la texture Height et Glossiness. Il n'y a pas de différence avec le baking simple détaillé dans le chapitre précédent : la procédure est la même, à trois exceptions :

  1. Les textures à générer sont : Normal map from mesh, Bent Normal Map from mesh, Color Map from mesh, Ambiant Occlusion from mesh et Position. Il faut également créer la Height map à partir de la Bent Normal map et la texture Glossiness, comme dans la procédure simple.
  2. Pour les textures Normal Map from mesh et Bent Normal from mesh, il faut sélectionner World Space au lieu de Tangent Space (dans la zone "Bakers render list", sélectionner la ligne de la texture pour faire apparaître ses paramètres dans la zone Baker Parameters)
  3. Pour la texture Position, il faut sélectionner un format d'image .EXR. Dans la zone "Bakers render list", cliquez sur la cellule "format" de la texture pour en changer (par défaut il est de type .PNG).

Reglages baking substance designer

Masque avec Photoshop :

Une fois les sept textures générées, il faut ajouter à la texture Diffuse un masque qui délimite la texture du fond noir de l'image et sauvegarder le résultat dans un format qui mémorise la couche alpha (.TGA ou .PNG par exemple)

Diffuse avec masque 01    Diffuse avec masque alpha

A gauche les couches RGB, à droite la couche alpha de la texture Diffuse

Delighting avec Unity

Avant d'ouvrir Unity, il faut renommer les cinq textures nécessaires de la manière suivante (sans quoi l'outil de delighting ne fonctionnera pas) :

  • "Nom Bent Normal Map" --> "Nom Bent Normal Map"_DLBN
  • "Nom Color Map" --> "Nom Color Map"_DLBC
  • "Nom Ambiant Occlusion Map" --> "Nom Ambiant Occlusion"_DLAO
  • "Nom Normal Map" --> "Nom Normal Map"_DLN
  • "Nom Position Map" --> "Nom Position Map"_position

Il suffit ensuite de suivre la procédure décrite dans cette vidéo :

A l'issu de cette étape, on obtient une texture Diffuse quasiment exempt d'ombre : on constate par exemple que la zone du menton a été considérablement éclaircit et qu'il n'y a plus d'ombre dans les cheveux ou au niveau des yeux.

Delighting tool unity

La comparaison entre la procédure simple du chapitre précédent, et l'utilisation du delighting dans Unity montre à quel point la seconde est préférable :

Diffuse no delight   Diffuse delight

A gauche la texture Diffuse après le traitement de la procédure simple, à droite la même texture après le delighting dans Unity

On dispose à présent d'une texture Diffuse meilleure que celle générée avec la procédure simple. A part les textures Diffuse, Height et Glossiness, les autres textures produites jusqu'ici ne sont plus nécessaires.

Baking (bis) avec Substance Painter :

Une fois dans Substance Painter, sélectionnez le menu File puis New.

Substance Painter New project

La fenêtre qui s'ouvre permet de paramétrer le projet.

  1. Le buste en plâtre ne comportant pas de métal, le matériau choisit est de type Specular Glossiness.
  2. Avec le bouton Select... chargez le modèle 3D LowPoly.
  3. En fonction du type de moteur 3D temps réel auquel est destiné le projet, il faut paramétrer le Normal Map Format et éventuellement cocher l'option Compute tangent space per fragment. Pour Unity, il faut sélectionner OpenGL et cocher l'option, pour UnrealEngine, il faut sélectionner DirectX et ne pas cocher l'option.
  4. Cliquez sur le bouton Add puis sélectionnez les trois textures issues des phases précédentes : Diffuse, Glossiness et Height
  5. Une fois les textures chargées, cliquez sur OK pour valider les paramètres du nouveau projet.

Substance Painter affiche les éléments chargés : le LowPoly apparaît dans la vue 3D, et les textures sont placées dans le dossier Project. Sur la droite de l'interface,

  1. sélectionnez Texture Set,
  2. cliquez sur Bake Mesh Map

Substance Painter scene init

La fenêtre qui s'ouvre permet de réaliser le baking mais cette fois avec plusieurs nouvelles textures qui ont de nombreux avantages. Le premier est qu'une fois fait, ce baking est optimisé pour permettre à Substance Painter de bien mieux gérer le LowPoly, particulièrement lorsque les Smart Mask et les Smart Material sont utilisés. Le second est que plusieurs des textures générées peuvent servir a générer de nouveaux effets (transparence, specular, SSS, etc.).

  1. Dans la liste des texture qui doivent être bakées, cochez tout sauf la texture ID (elle ne sert que si des numéros d'identification ont été attribuées à des groupes de faces).
  2. Ajustez la définition des textures
  3. Ajustez la zone de débordement des textures - il est préférable de ne pas la laisser à 0, et d'augmenter d'autant plus cette valeur que la taille des textures est importante
  4. Cliquez sur l'icône en forme de fichier et sélectionnez le HighPoly
  5. Réglez les valeurs de distance entre le LowPoly et le HighPoly (voir la partie 4 : Distance et normales, un peu de théorie)
  6. Réglez la valeur d'antialiasing des textures - la valeur 4x4 est optimale et un bon compromis entre qualité et vitesse de calcul
  7. Cliquez sur le bouton Bake : le calcul se lance pour quelques secondes ou plusieurs minutes en fonction des réglages

Substance Painter Bake parameters

Une fois le calcul terminé, les textures produites sont automatiquement appliquées au LowPoly. On pourrait penser, en observant l'image ci-dessous, que le delighting n'a pas servi à grand chose puisque les ombres sous le menton ou dans les cheveux ont réapparus. En réalité, c'est tout le contraire : les ombres sont produites de façon interne à Substance Painter et ajoutées en temps réel. L'absence d'ombre sur la texture Diffuse permet justement d'éclairer le modèle sans risquer d'incohérence (par exemple une ombre sur la gauche mémorisée dans la texture Diffuse et une autre sur la droite produite par la lumière du moteur 3D temps réel).

Substance painter baking done

  1. Le LowPoly apparaît dans la vue en perspective.
  2. On peut constater que dans l'onglet Texture Set Settings, toutes les textures calculées durant le baking ont été chargées et sont utilisables par le logiciel - en plus de celles qui peuvent être éventuellement ajoutées dans l'onglet Layer
  3. Les textures calculées sont également visibles dans le dossier Projet
  4. Le modèle 3D comporte désormais 9 textures : les trois importées au début et les six calculées par le baking.

Substance Painter Texture Set SettingsPour profiter de certaines textures qui viennent d'être calculées, on peut ajouter des canaux d'effet supplémentaires à ceux existants par défaut dans la liste en haut de l'onglet Texture Set Settings. Dans le cas du buste, puisque la texture Thickness a été générée, un effet de Subsurface Scattering est ajouté :

Cliquez d'abord sur l’icône en forme de + pour faire apparaître la liste de tous les canaux qu'il est possible d'ajouter et sélectionnez Scattering.

Au-dessous des canaux déjà existant apparaît une nouvelle ligne intitulée Scattering. Les mentions à droite des canaux indiquent la façon dont la texture sera encodée : sRGB indique l'utilisation d'une correction gamma, L et RGB un encodage linéaire sur une couche ou trois couches ; 8 ou 16 indiquent la profondeur de l'encodage et le F éventuel à la fin que les valeurs sont mémorisées en virgule flottante.

Si on désire retirer un canal de cette liste, il suffit de cliquer sur le symbole - en face du canal concerné. On pourrait par exemple retirer l'effet Emissive qui ne sert pas a priori pour le buste en plâtre, mais dans le cas de ce chapitre, il sera conservé pour montrer les possibilités et certaines limites de Substance Painter.

On peut à présent utiliser les canaux de l'onglet Layer pour finaliser l'aspect du buste en plâtre :

  1. Après avoir sélectionné l'onglet Layer...
  2. cliquez sur l’icône en forme de pot de peinture pour ajouter un calque de remplissage (Fill layer)
  3. Dans l'onglet Properties - Fill en dessous, sélectionnez ou déselectionnez les canaux d'effets voulut. Dans le cas du buste en plâtre, seuls sont activés les canaux Diffuse, Glossiness, Height et Scattering.
  4. Depuis la bilbothèque, glissez déposez les textures dans leur canaux respectifs - l'ajout du canal Scattering permet d'y ajouter la texture Thickness calculée lors du baking
  5. Éventuellement, avec l'outil en forme de baguette magique, il est possible d'ajouter au calque un histogramme pour doser l'effet de chaque canal.
  6. Les différents filtres et effets ajoutés à un calque apparaissent en-dessous.

Substance Painter full bake

Après avoir ajouté l'ensemble des textures, le buste en plâtre LowPoly trouve sa forme définitive quasi comparable à celle du HighPoly.

On peut encore continuer à retoucher le LowPoly, l'objectif n'étant pas toujours de retrouver la même apparence que l'objet photogrammétrisé.

  1. Sélectionnez le calque déjà existant ou ajoutez-en un nouveau
  2. Dans la partie Matériaux de l'onglet Properties Paint, désélectionnez tous les canaux à l'exception de l'Emissif, puis sélectionnez une couleur
  3. Peignez directement dans la vue en perspective les zones qui doivent émettre de la lumière - les yeux pour le buste en plâtre.
  4. On pourrait ajouter d'autre calques pour ajouter d'autres effets, par exemple de la transparence sur certaines parties, ou pour ajouter une texture Specular.

Substance Painter add emissive map

Certains effets ne sont pas visibles directement dans l'interface de Substance Designer, en particulier les effets de transparence, de SSS et d'émissivité... pour pouvoir les visualiser, il faut sélectionner le menu Mode puis Rendering (IRay) ou appuyer sur F10. Le moteur de rendu IRay permet d'avoir un meilleur rendu des effets au prix d'un calcul un peu long. Il n'est pas idéal malgré tout et on peut lui préférer celui de Marmoset Toolbag qui sera détaillé dans le chapitre suivant.

Substance Painter Iray render

Le rendu final du buste en plâtre dans Iray

Il est possible d'ajuster les effets dans l'onglet MDL Parameters. Les zones en rouge sur le buste sont provoquées par le SSS et dosés en fonction de la texture Scattering / Thickness.

Exportation :

Il est maintenant temps d'exporter l'ensemble des textures pour pouvoir les utiliser dans un moteur de rendu 3D temps réel. Sélectionnez le menu File puis Export Textures...

Substance Painter export

  1. Sélectionnez le dossier d'exportation, le format d'image et la profondeur de l'encodage
  2. Sélectionnez ensuite la configuration de l'exportation, c'est-à-dire le type de moteur 3D auquel les textures sont destinées. Dans l'exemple du buste en plâtre, comme le matériau sélectionné au début du projet est de type Specular Glossiness, l'exportation doit être du même type.
  3. En cliquant sur la flèche, on peut vérifier le détail des textures qui seront exportées
  4. Il ne reste qu'à sélectionner la taille des textures...
  5. Et à exporter.

Il serait possible d'optimiser davantage cette exportation. On remarque que la première texture exportée combine Albedo (ou Diffuse) et Transparency. Comme le buste en plâtre ne comporte aucune transparence, on peut l'éliminer des textures exportées. Pour cela, il faut sélectionner l'onglet Configuration et créer sa propre configuration d'exportation en fonction des textures nécessaires.

Substance Painter export configuration

  1. Sélectionnez l'onglet Configuration
  2. On pourrait directement reprendre une des configurations déjà mémorisées, mais il est préférable d'en créer une nouvelle en cliquant sur l'icone en forme de +
  3. Il suffit ensuite de créer une texture dans la zone Current Preset en choisissant un type de texture
  4. Une fois le type choisit, il suffit de glisser/déposer le type d'effet qui doit y être mémorisé. La procédure complète est détaillée sur ce lien

Le plus important est de sélectionner les bons types de texture. On remarque que sur la droite de la fenêtre de configuration figurent trois listes de textures : les Input maps, les Mesh maps et les Converted maps. Les Mesh Maps correspondent à celles calculées durant le baking, les Input maps sont celles qui ont été ajoutées dans le Texture Set (comme la texture émissive du buste en plâtre) et les Converted maps sont des textures "virtuelles" générées à partir des textures présentes dans le projet.

Pour profiter au maximum de la partie suivante, c'est-a-dire prévisualiser le résultat final avec le moteur 3D de Marmoset Toolbag, plus puissant et précis que celui de Substanec Painter, le lien suivant donne toutes indications sur le processus à suivre.

Modifié le: jeudi 25 juillet 2019, 19:26