Le Baking :

Le travail accomplit jusqu'ici permet de disposer d'une part d'un HighPoly avec ses coordonnées de mapping et une texture et d'autre part d'un objet LowPoly avec ses coordonnées de mapping. Il faut à présent "traduire" (ou "cuisiner", ce que signifie "to bake") la texture générée par la photogrammétrie spécifiquement pour les coordonnées de mapping du HighPoly en une série de textures qui permette au LowPoly de ressembler au HighPoly.

Objectif

L'objectif du baking, peut être décomposé en deux phases différentes. Du point de vue théorique, il faut :

- Convertir la texture haute définition faite pour le mapping du HighPoly pour qu'elle soit adaptée au mapping réalisé sur le LowPoly dans la partie précédente.

- Créer toute une série de textures qui vont permettre de donner au LowPoly le même aspect visuel que le HighPoly : Normal Map, Height Map, Curvature Map, Ambiant Occlusion, etc. La difficulté est de paramétrer correctement le processus de création pour optimiser le résultat, en particulier en ce qui concerne la Normal Map : mal calculée, elle produira des effets de couture visibles le long des lignes de démarcation du mapping UV.

Heureusement, l'ensemble de ces deux phases est quasi complètement automatique et réalisé en une fois par les différents logiciels. Le plus important est de savoir à quoi correspondent les différents types de textures générées afin de sélectionner les plus pertinentes en fonction du résultat voulu. Dans le cas de l'exemple du buste en plâtre, et d'une manière générale lorsqu'il s'agit de redonner au LowPoly le même aspect que l'objet photogrammétrisé, il faut au minimum produire cinq textures. Les étapes de leur création peuvent être très simple - Substance Designer, XNormal ou Knald par exemple, peuvent tous les créer en une seule opération. Mais pour parvenir à un résultat optimal, il est préférable de suivre une procédure plus complexe : l'avantage est qu'il produit une Height Map de meilleure qualité, une Normal Map optimale, ainsi que plusieurs textures qui permettront d'utiliser l'outil Delight d'Unity. Les deux procédures sont détaillées dans la suite du cours, ce chapitre se concentrant sur la théorie.

Logiciels

Substance Designer logoSubstance Painter logoSubstance Designer et Substance Painter

Les deux logiciels de l'éditeur Allegorithmic offrent toutes les fonctionnalités nécessaires pour faire le baking des textures et sont devenus la référence dans le domaine de la gestion des matériaux PBR.

Les plus : pour la seule étape du baking, les deux logiciels sont équivalents aux autres présentés ci-après. Mais leur avantage est d'être aussi très performants pour la partie suivante, ce qui évite d'avoir recourt à plusieurs logiciels. Substance Painter présente un avantage très important sur tous les autres : le calcul interne de plusieurs maps assurant le calcul le plus précis pour la Normal Map et l'assurance qu'elle ne produira aucun effet de couture.

Les moins : pour l'étape du baking les autres logiciels font aussi bien, mais pour un coût souvent inférieur voir nul.

Marmoset logoKnald logoMarmoset Toolbag et Knald

Moins complets que les deux logiciels précédents au niveau de la gestion des textures, ces deux logiciels permettent néanmoins de faire les opérations de baking avec la même qualité. Ils ne permettront pas en revanche de retoucher finement les textures par la suite.

Les plus : une interface simple et facile à maîtriser. Une efficacité aussi bonne que les autres logiciels pour le baking.

Les moins : il n'y en a pas réellement pour le baking proprement dit, mais les fonctions de traitement des textures pour la partie suivante sont beaucoup plus réduites que les deux logiciels précédents.

XNormal logoxNormal

ce logiciel créé par Santiago Orgaz est assez similaire aux précédents en termes d'efficacité et de fonctionnalité, mais il a un atout important, il est gratuit (et téléchargeable à cette adresse). Il est très régulièrement mis à jour et amélioré.

Les plus : la gratuité est sans aucun doute l'atout majeur de ce logiciel, d'autant plus que la qualité du baking est aussi bonne que celle des autres logiciels. Il dispose même d'un plugin permettant d'exporter les données directement depuis 3Dsmax et de plusieurs plugins et outils permettant par exemple de faire des conversions de textures.

Les moins : xNormal ne sert qu'au baking et rien d'autre et son ergonomie est pour le moins discutable !

Houdini logo

Houdini

Le baking dans Houdini est encore en chantier et chaque version améliore les possibilités (certains nodes disponibles sont encore en version béta). Malgré tout, ils sont suffisamment stables et complets pour être fonctionnels.

Les plus : il est possible de télécharger des nodes supplémentaires, spécifiquement dédiés au baking (les Games Dev). Le fait qu'Houdini permette de réaliser la retopologie, la décimation, le mapping UV et le baking est un atout important pour limiter la compléxité du workflow.

Les moins : comme toujours avec Houdini, le plus difficile est de se familiariser avec l'interface nodale et les raccourcis. Il est par ailleurs dommage qu'aucun des deux nodes de baking ne permette de calculer une Bent Normal Map.

Distance et Normales, un peu de théorie

Dans tous les logiciels de baking, le paramètre le plus important pour la création des Normal map, Height map, Curvature Map, etc. est le paramètre "Distance". Il sert à indiquer au logiciel la distance qui sépare les faces du modèle HighPoly (en vert sur le schéma) de leurs équivalents dans le modèle LowPoly (en rouge).

Normal map distance

Il faut estimer une distance maximale (la plus grande des flèches bleues) et minimale (flèches en jaune). Si l'estimation est trop petite, les faces au-delà de la distance seront toutes abaissées à cette distance (ce qui se traduira dans les étapes suivantes par des zones toutes plates dans le LowPoly). La tentation est de donner une valeur élevée aux deux paramètres, afin d'être sûr que toute les faces seront dans la limite donnée... mais une estimation trop forte engendre elle aussi des problèmes : dans les zones concaves, une estimation trop élevée mélangera les faces trop proches.

Dans l'exemple du buste en plâtre, les zones très proches comme les lèvres, le dessous du nez, le menton et le cou sont assez proches et donnent un mauvais résultat avec une valeur de distance trop forte. La zone en rouge montre le résultat avec une distance paramétrée à 0.3 dans Substance Painter

Normal Map mauvaise distance

En réduisant la distance à 0.1, le résultat est bien meilleur - mais pas parfait. Le LowPoly n'est pas assez définit par rapport au HighPoly, et il faut faire un choix : soit diminuer encore la distance au risque de perdre des détails, soit garder les détails mais conserver quelques erreurs.

Normal Map bonne distance

Des différents logiciels présentés, seul xNormal dispose d'un outil (le Ray distance calculator) qui permet d'évaluer précisément la valeur de distance minimale et maximale (il est d'ailleurs également utile pour détecter des problèmes d'orientation, d'échelle ou de maillage non valide car dans ces cas, il renvoie des valeurs aberrantes).

Les textures et matériaux PBR :

Il est fondamental de bien comprendre les différents types de texture utilisés dans le rendu PBR, d'une part pour savoir quels effets ces textures produisent sur le rendu final et d'autre part pour comprendre comment les améliorer et les combiner pour styliser correctement l'apparence du modèle 3D. La suite de ce chapitre indique les grandes lignes mais n'est pas suffisante pour comprendre en profondeur l'importance et la fonction de chaque texture - des liens vers davantage de détails sont référencés dans le dernier chapitre du cours). Certaines explications ont également été simplifiées - les textures Diffuse et Color présentées comme équivalentes, ne le sont en réalité pas totalement.

On distingue deux types de matériaux, qui, pour être rendu en temps réel, utilisent chacun un set de textures différentes :

  • Les matériaux dielectriques : ils regroupent tous les matériaux non métallique (bois, plâtre, plastique, céramique, béton, etc.). Ils sont constituées a minima des textures Albedo, Specular, Glossiness, AO, Normal, Height,
  • Les matériaux métalliques : ils regroupent tous les matériaux métalliques, y compris non ferreux (aluminium, or, bronze, argent, acier, etc.). Ils sont constitués a minima des textures Albedo, Metallic, Roughness, AO, Normal, Height

Les logiciels de rendu PBR font une différence entre les deux car ils réagissent très différemment à la lumière (la lumière éclairant un métal produit une interférence modifiant l'apparence des reflets, ce qui n'est pas le cas des matériaux diélectriques).

Par ailleurs, il existe deux familles de textures différentes : celles qui modifient l'apparence visuelle du matériau de l'objet, et celles qui modifient l'apparence de la structure du maillage 3D, son relief.

Les textures d'apparence

Toutes les textures d'apparence doivent idéalement être mémorisées avec une correction gamma.

- ALBEDO / DIFFUSE / COLOR : cette texture ne doit comporter que les informations de couleur de l'objet, indépendamment de la lumière. Elle ne doit surtout pas intégrer les ombres (d'où la nécessité de faire une prise de vue avec une lumière très diffuse et uniforme ou un flash annulaire) ou les reflets (d'où l'intérêt de faire une prise de vue avec un dispositif de polarisation).

Buste platre texture diffuse

Le buste en plâtre, malgré un éclairage diffus, présente encore des ombres, en particulier sous le menton. Idéalement, la texture Diffuse ne devrait jamais intégrer d'ombres, de brillances ou de reflets.

- METALLIC : Comme son nom l'indique, cette texture indique les zones métalliques d'un objet. Elle doit souvent être créé de toute pièce, la prise de vue ne pouvant pas distinguer les zones métalliques des zones qui ne le sont pas.

- ROUGHNESS / GLOSSINESS : cette texture décrit les zones rugueuses ou lisses, c'est-à-dire les zones dans lesquels la surface renvoie la lumière de façon plus ou moins diffuse. Dans le flux de production photogrammétrique, c'est une texture qui doit être créé de toute pièce, la prise de vue ayant normalement tenté autant que possible d'éliminer les brillances (puisque la texture Diffuse ne doit pas en comporter). La texture Roughness est utilisée pour les métaux et correspond au négatif de la texture Glossiness utilisée pour les matériaux diélectriques.

- AMBIANT OCCLUSION : la texture d'Ambiant Occlusion sert à mémoriser les ombres indirectes directement dans le matériau car elles sont encore trop gourmandes en calcul pour la 3D temps réel. Par définition, elles sont plus marquées dans les zones concaves du modèle 3D. Comme il n'est pas possible d'isoler les ombres indirectes à la prise de vue, celles-ci sont souvent calculées au moment du baking en fonction de la structure du HighPoly.

Buste platre texture AO

Il existe d'autres types de textures optionnelles modifiant l'apparence du matériau, notamment la texture Transparency (qui décrit les zones opaques, transparentes ou semi-transparentes), la texture Emissive (qui décrit les zones émettant de la lumière) ou la texture Thickness (qui permet d'indiquer les différences d'épaisseur du modèle 3D) pour des effets de SubSurface Scattering (SSS).

Buste platre texture Thickness

Exemple de texture Thickness bakée par Substance Designer

Les textures de structure

Elles doivent toutes être mémorisées sans correction gamma, de façon linéaire, car elles stockent des valeurs qui ne doivent surtout pas être altérées.

- HEIGHT / DISPLACE : La texture Height sert à mémoriser les différences de hauteur entre le HighPoly et le LowPoly. Elle est déterminante pour redonner au LowPoly le même aspect que le HighPoly en déplaçant la hauteur des faces (d'où les noms de Height et Displace). Cette texture étant en dégradés de gris, elle ne fait que déformer le maillage le long de ses normales avec plus ou moins d'intensité (d'autant plus que la texture est blanche, d'autant moins qu'elle est noire).

Buste platre texture Height

Les tâches blanches sur la Height map du buste en plâtre sont des zones problématiques dues a un LowPoly mal ajusté par rapport au HighPoly - problème qui se retrouve aussi sur les Normal map.

- NORMAL : La texture Normal a le même rôle que la Height, mais elle sert essentiellement à la restitution des petits détails, pas des différences de structure importantes. Elle est constitué de trois images en dégradés de gris pour chaque axe de déformation (X, Y et Z), qui sont mémorisées dans chaque canal (R, V et B) d'un fichier couleur. Combinée avec texture Height, elle permet de donner au LowPoly quasiment la même quantité de détails que le HighPoly.

La normal map est la plus délicate à générer correctement. Les moteurs de rendu 3D temps réel l'utilisent différemment et une normal map correctement exploitée par un moteur ne le sera pas forcément par un autre. Plusieurs problèmes sont symptomatiques d'une Normal map inadéquate pour un moteur de rendu : relief inversé (les creux deviennent des bosses et inversement), apparition de coutures sur les lignes de démarcation du mapping UV, écrasement du relief sur un axe, etc.

Buste platre texture Normal

- BENT NORMAL : Cette texture est similaire à la texture Normal, mais elle tient compte de l'éclairage de l'objet pour mieux calculer l'occlusion ambiante. Dans certains cas, la texture Height générée durant le baking n'est pas bonne et on obtient un meilleur résultat en transformant la Bent Normal en Height (pour la procédure voir la partie suivante). C'est aussi une des textures nécessaires pour utiliser l'outil de delighting d'Unity.

Buste platre texture Bent Normal

Il existe d'autres textures de structure, notamment la texture Curvature (qui mémorise l'inclinaison des faces du maillage), la texture Cavity (qui ne mémorise que les zones concaves) ou la texture Convexity (qui ne mémorise que les zones convexes) - on en déduit que la première est l'addition des deux autres et qu'elle permet à son tour de créer la texture d'Ambiant Occlusion. Il existe encore les textures Proximity ou ID : la première indique la distance entre les différentes faces du modèle 3D, la seconde les groupes de faces (qu'il faut avoir sélectionné auparavant durant la création du LowPoly).

Les étapes suivantes expliquent comment générer les différentes textures nécessaire pour un rendu PBR optimal.

Modifié le: lundi 22 juillet 2019, 16:05