Cartes normales idéales pour Unity (et d'autres programmes)

... et comment découvrir ce qui ne va pas avec votre pipeline de création de contenu.


Supposons que vous ayez un incroyable modèle en polyéthylène sur lequel l'artiste a travaillé et que vous souhaitiez l'intégrer dans le jeu. L'artiste a montré des captures d'écran du modèle dans son programme et elles sont incroyables. Même après avoir préparé des cartes normales pour la version low-poly, cela a toujours fière allure.


Découvrez la grandeur de ce modèle traditionnel pour tester des cartes normales!

Puis l'artiste la met dans le jeu, et elle a l'air ... un peu mal.


Ces visages ne devraient-ils pas être plats?

Les surfaces, qui devraient être planes, sont encore un peu arrondies, certaines sont même déprimées, et pire encore, d'étranges rayures les longent. Situation familière? Certains d’entre vous sont probablement tombés dessus, se sont dit: «Eh bien, probablement, ça ne marchera pas mieux», et ils ont continué. Peut-être qu'un peu de saleté a été appliqué pour masquer les cas les plus graves.

Mais il y a en fait quelque chose qui ne va pas avec votre pipeline de création de contenu. Ce n'est pas toujours évident, mais le problème peut être résolu! *

* Si vous supposez que dans certains cas, vous pouvez apporter des modifications au pipeline de contenu.

Préface


Cet article explique comment exporter des cartes normales idéales à partir d'autres applications pour les utiliser dans Unity 5.3 et versions ultérieures. Il ne décrit pas comment obtenir des cartes normales de haute qualité, il existe de nombreux autres didacticiels pour cela, donc je ne vais pas aborder ce sujet.



Base d'espace tangent


Le problème est de savoir comment fonctionnent les cartes normales de l'espace tangent. En particulier, comment fonctionne l' espace tangent (ou base tangente). Je n'irai pas trop loin dans les aspects techniques de ce qu'ils font. Comme d'autres auteurs, j'ai déjà parlé de cela , mais en bref, l'espace tangent détermine ce que devrait représenter l'orientation de la direction dans la carte normale. Quelle direction sur la carte normale est en fait "vers l'avant", "vers le haut" ou "vers la droite". En gros, cette orientation est l'orientation des coordonnées UV de la texture et des normales des sommets.

Il est plus important de comprendre que le programme utilisé pour faire cuire la carte normale du maillage highpoly au maillage lowpoly doit calculer son espace tangentexactement le même que le programme dans lequel les cartes normales seront utilisées . Étant donné que différents programmes peuvent utiliser l'espace tangent de différentes manières, les mappages normaux standard pour un maillage ne seront pas nécessairement les mêmes pour toutes les applications. Même pour les applications utilisant le même espace tangent!

Connais ton ennemi


Coup d'Etat dû à une erreur évidente


L'erreur la plus courante est le problème «OpenGL vs Direct3D». Ils sont également appelés cartes normales Y + et Y-. Je les ai inclus ici juste pour être complet. Très probablement, la plupart des personnes qui ont rencontré ce problème le savent déjà, ou au moins ont appris comment le résoudre. Étant donné que les cartes normales sont générées dans une orientation, elles sont essentiellement inutiles pour une utilisation dans une application conçue pour en utiliser une autre.


Cartes normales en orientation Direct3D dans le moteur Unity, qui attend une orientation OpenGL.

Cela peut être compris par le fait que l'éclairage semble être inversé ou tomber de l'autre côté, mais uniquement dans certaines directions d'éclairage. Certains coins ou visages peuvent sembler complètement normaux jusqu'à ce que vous déplaciez la source de lumière.

Et avec ce problème, tout est assez clair. La plupart des applications normales de création de cartes ont un joli grand bouton ou menu pour basculer entre les options d'orientation OpenGL / Direct3D ou Y. Découvrez quelle orientation l'application cible utilise et créez des cartes. Unity utilise OpenGL et Y +. Unreal utilise Direct3D et Y-. Cela peut être clairement compris en regardant la texture de la carte normale elle-même. S'il semble que dans le canal vert, ils sont allumés "d'en haut", alors c'est l'orientation OpenGL. Si par le bas, c'est Direct3D.

Bizarreries avec sRGB


Une autre erreur courante consiste à utiliser une texture marquée comme texture sRGB. Cela change la façon dont la texture du GPU est échantillonnée, la forçant à convertir les valeurs de couleur de l'espace sRGB, à partir duquel les gens sélectionnent généralement les valeurs de couleur, en un espace de couleur linéaire. Pour les cartes normales, ce n'est pas nécessaire. Si vous définissez le type sur «Carte normale» pour la texture dans Unity, le moteur désactivera automatiquement cette option, mais vous pouvez également désactiver manuellement l'option «sRGB (Texture couleur)», et la texture fonctionnera comme une carte normale. Au moins dans Unity 2017.1 et plus récent.


Carte normale avec type de texture par défaut et sRGB activé.

Ce problème peut être reconnu par le fait que les cartes normales sont fortement biaisées dans une direction. Dans ce modèle, presque tous les visages semblent dirigés vers une source de lumière. De toute évidence, ce ne sera pas toujours le cas. Dans une carte normale plus détaillée, toutes les parties réagissent à l'éclairage presque correctement, mais se déplacent légèrement sous un certain angle. Parfois, il peut sembler que toute la surface du maillage est déformée.

Trop différent pour être normal


Un autre problème courant est l'utilisation de différents maillages de cuisson normaux dans l'actif du jeu. Comme pour les tangentes, pour que tout fonctionne, elles doivent correspondre exactement . Cette erreur se produit souvent si les artistes exportent des maillages avec des normales de sommet incorrectes. Dans ce cas, toute application qui ouvre le maillage devra les calculer vous-même. Il n'y a pas de bonne façon de le résoudre, tout dépend du maillage, alors assurez-vous que vous (ou les artistes) exportez le modèle avec les normales finales!


Cartes normales cuites sur un maillage lissé, affichées comme sur un maillage aux arêtes vives


Cartes normales cuites sur un maillage aux arêtes vives, affichées comme sur un maillage lissé

C'est un autre problème facile à repérer. Si le modèle doit ressembler à des arêtes vives, mais que l'ombrage se plie à partir de ces arêtes, cela signifie que vous avez cuit la carte normale avec des normales lisses, mais elles sont rendues sur un maillage avec une arête vive. Si l'ombrage se penche vers le bord, cela signifie que la carte a été cuite avec un bord net et rendue sur un bord lisse. En fait, dans un modèle, les deux cas peuvent être présents, car il est possible d'indiquer le lissé ou la netteté des bords individuels, et même le degré de lissé. Mais en fait, ils sont garantis être erronés si vous autorisez une autre application à deviner comment cela devrait être. Le modèle présenté ci-dessus est un cas extrême, et souvent tout n'est pas si évident, car de grandes parties du modèle peuvent sembler tout à fait normales. Mais dans le cas général,si vous avez plusieurs arêtes qui semblent particulièrement étranges, cela est probablement dû à un décalage dans les normales des sommets.

MikkTSpace vs Autodesk


Un problème moins visible est que lors de la cuisson de cartes normales 3ds Max ou Maya, elles seront toujours incorrectes dans le moteur Unity. Ils auront tort dans Unreal et dans presque tous les autres programmes, à l'exception de celui dans lequel ils ont été cuits. Les cartes normales de 3ds Max ne fonctionnent pas dans Maya, et vice versa! Chacune de ces applications calcule l'espace tangent à sa manière, ce qui ne correspond pas à d'autres applications. Lorsqu'ils sont utilisés indépendamment, ils ont l'air parfaits , et si vous générez des cartes normales à utiliser dans ces programmes, essayez de faire des cartes normales en eux. Presque aucun autre programme n'est capable de préparer les cartes normales correctes pour ces applications, vous ne semblez donc pas avoir le choix.

La seule solution dans ce cas est de ne pas créer de cartes normales avec ces applications si vous souhaitez les utiliser ailleurs. Si vous avez besoin d'un programme gratuit, utilisez xNormal . Il s'agit d'un outil standard de l'industrie. Si vous utilisez Substance quelque part dans le pipeline de création de contenu, utilisez-le.


3ds Max a cuit la carte normale utilisée par Unity La

façon la plus simple de remarquer ce problème est de voir que les faces planes ont de petites bosses ou courbures. Dans certains cas, cela peut être très discret, en particulier dans les objets organiques. Par conséquent, des problèmes de ce type passent souvent inaperçus.

De nombreuses applications non Autodesk sont passées à une méthode de calcul d'espace tangent appelée MikkTSpace.. XNormal et Substance, ainsi que Blender, Unity, Unreal, Godot, Marmoset, Houdini, Modo et quelques autres, utilisent par défaut MikkTSpace ou au moins le supportent d'une manière ou d'une autre, ce qui améliore considérablement leur compatibilité. En fait, au cours des dix dernières années, il est devenu la norme de l'industrie dans tous les cas lorsque des cartes normales de l'espace tangent sont utilisées. Vraisemblablement, à un moment donné, 3ds Max ajoutera leur support, mais il n'est pas clair si les développeurs prévoient d'autoriser la cuisson de cartes normales à l'aide de MikkTSpace ou tout simplement de fournir un support pour l'affichage / rendu avec leur aide.

Exporter les maillages et le peintre de substances


Un autre problème avec 3ds Max et Maya est que lors de l'exportation de maillages à partir d'eux, il existe une option d'exportation avec «tangentes et binormales». Ils ne seront pas dans les tangentes réelles de MikkTSpace, mais seront basés sur eux. Certaines applications recalculent de force le MikkTSpace correct par défaut (par exemple, xNormal, Unity et Unreal), mais d'autres applications utilisent des maillages tangents (le cas échéant) «tels quels» et calculent MikkTSpace uniquement si le maillage n'a pas de tangentes. Par exemple, Substance Painter utilise des maillages tangents s'ils sont présents tels quels, c'est-à-dire que Painter crée des cartes normales très similaires à 3ds Max! Similaire, mais pas tout à fait la même chose, donc si vous les réimportez dans 3ds Max, ils ne seront pas aussi bons que cuits dans Max.

MikkTSpace vs MikkTSpace?


Le problème suivant est qu'il existe plusieurs versions de MikkTSpace! Oui, ce ne serait pas la norme si, d'une manière ou d'une autre, cela n'entraînait pas de confusion. MikkTSpace détermine comment les données doivent être stockées dans le maillage pour chaque sommet et comment les données sont utilisées pour le rendu. Toutes les applications compatibles MikkTSpace calculent les mêmes données de maillage pour les sommets. Mais il existe deux façons différentes d' utiliser ces données dans le rendu. MikkTSpace définit comment calculer le vecteur tangent et signer pour chaque sommet en fonction de l'orientation UV. Mais lorsque vous utilisez un espace tangent, la tangente à deux points (bitangente) est recalculée soit pour chaque sommet soit pour chaque pixel. Ce paramètre doit également être le même pour la cuisson et la visualisation.

xNormal et Substance ont la possibilité de créer des cartes normales en utilisant les deux méthodes. Ces options sont appelées «calculer l'espace tangent par fragment» dans Substance et «calculer binormal dans le pixel shader» dans xNormal. Vous n'avez pas besoin de l' utiliser si vous utilisez les méthodes de rendu Unity intégrées. Cependant, cela peut valoir la peine de le faire pour SRP, selon le type que vous choisissez!


XNormal «pixel shader binormals» avec rendu intégré intégré Unity

Visuellement, cela ressemble à l'utilisation d'un espace tangent complètement différent, mais il est généralement beaucoup moins prononcé. Certains visages peuvent sembler un peu déformés et ne présenteront pas de bosses importantes. La solution ici est très simple - ne sélectionnez pas cette option si vous utilisez les méthodes de rendu intégrées d'Unity. Cochez la case si vous faites cuire des moteurs Unreal ou Unity pour HDRP.

De nombreuses sources disent que Blender et Unity sont identiques, mais en fait ce n'est jamais vrai! Blender, comme Unity, utilise l'orientation MikkTSpace et OpenGL, mais, comme Unreal, utilise des binormals pour chaque fragment binomals.

La bonne nouvelle est que les shaders LWRP, URP et Shader Graph utilisent désormais des binormaux pour chaque sommet et les shaders HDRP intégrés pour chaque pixel. Dans une future mise à jour de Shader Graph (7.2.0), la transition vers le calcul pixel par pixel sera effectuée, et après un certain temps, les shaders URP intégrés passeront également à celui-ci. Et les méthodes de rendu standard peuvent être modifiées à l'aide de vos propres shaders, si vous choisissez un tel itinéraire.

Trianguler, trianguler, trianguler!


Le dernier problème concerne différentes manières de trianguler. Si vous exportez des maillages sans triangulation préalable, rien ne garantit que d'autres applications trianguleront le modèle de la même manière. Cela nuit également aux cartes normales! Par conséquent, triangulez les maillages, soit à l'aide des options d'exportation, soit via le modificateur de triangulation.


Substance Painter , Unity , 3ds Max (quads)

Cela semble très similaire à un espace tangent complètement faux, comme si des cartes normales étaient cuites dans 3ds Max. Mais dans le cas général, ils sont un peu plus nets, presque courbés et ne ressemblent pas à une concavité lisse. Dans ce maillage, une forme en X est visible sur les faces externes. Ce problème peut être difficile et ennuyeux lorsque plusieurs personnes travaillent avec le modèle dans le pipeline de production de contenu dans différentes applications, car il est souvent utile de ne pas trianguler le maillage et d'enregistrer de beaux polygones. Dans ce cas, vous devez soit accepter les inconvénients, soit créer le dernier outil du pipeline avant d'exporter le modèle dans le jeu également utilisé pour générer un maillage utilisé pour la cuisson des normales. Comme un espace tangent avec des normales de sommets (qui font partie de l'espace tangent),la triangulation doit également correspondre exactement.

Liste pour créer des cartes normales parfaites pour Unity


Voici donc des conseils pour générer des cartes normales d'espace tangent pour les maillages lowpoly à partir des modèles originaux highpoly à utiliser dans Unity:

  • Pas besoin de faire cuire des cartes normales en utilisant 3ds Max, Maya ou toute autre application qui n'a pas l'option tangente MikkTSpace .
  • Exportez les maillages sous forme de triangles , avec des normales et sans tangentes.
  • Choisissez OpenGL ou X + Y + Z + comme orientation de la carte normale lors de la cuisson (ainsi que lors de la création d'un projet pour Substance Painter).
  • Vous n'avez pas besoin d' activer les options de tangentes aux deux points " par pixel " / " par fragment " lors de la cuisson pour les méthodes de rendu intégrées (proactives ou différées) ou LWRP.
  • Inclure des options pour les tangentes aux deux points «par pixel» / «par fragment» lors de la cuisson pour HDRP, et bientôt pour URP.
  • Laissez les options d'importation de modèle par défaut pour Unity, avec les normales définies sur "Importer" et les tangentes sur "Calculer Mikktspace".

C'est tout! Chaque fois que vous obtenez des cartes normales parfaitement cuites!


Hourra! La carte normale parfaite!


... avec des reflets? Ahem ..

Eh bien, le dernier, nous l'ignorons. Aussi «parfait» que possible avec des formats de texture compressés à 8 bits par canal. Une carte normale tramée peut sembler un peu meilleure que les rayures, mais, malheureusement, peu d'outils offrent cette option. Sinon, vous pouvez utiliser des cartes normales 16 bits. Mais c'est un sujet pour un autre article.

En savoir plus sur MikkTSpace.


Le site semi-officiel de mikktspace.com explique bien les principaux avantages de MikkTSpace. En particulier, cet espace fonctionne bien à la fois pour le recomptage et pour le transfert de données tangentes entre des programmes avec un traitement de maillage différent, tout en maintenant l'intégrité des résultats. Le texte du site est une copie de la page wiki de Blender déjà disparue écrite par Morten S. Mikkelsen lui-même. Malheureusement, il ne mentionne que la version avec des tangentes à deux points pour chaque pixel, mais pas la version pour chaque sommet, la valeur par défaut utilisée par Unity et xNormal. Puisque Blender utilise des dérivées de tangentes par pixel, il est logique que seules elles soient mentionnées.

Voici des commentaires sur ces deux options du fichier mikktspace.h d' origine :

, /.

bitangent = fSign * cross(vN, tangent);



(/ ) , .

, , , «» , : vT, vB vN.

( )

vNout = normalize( vNt.x * vT + vNt.y * vB + vNt.z * vN );

vNt — . «» , , .



, , , .

Ainsi, dans l'exemple d'origine, la tangente à deux points est recréée dans le vertex shader et transmise au pixel shader comme une autre valeur interpolée. C'est ainsi que les shaders Unity normaux gèrent actuellement les maps normales. Un exemple d'exécution de cette tâche dans un pixel shader est plus un exemple impromptu qu'un exemple «principal». De plus, puisque l'implémentation pour Unity 5.3 (et xNormal?) A été créée par Morten S. Mikkelsen lui-même, et que les deux utilisent des tangentes pour chaque sommet, c'est une autre preuve de notre théorie. Mais Blender a ensuite utilisé des tangentes pixel par pixel, et Morten était également impliqué. Probablement, en fait, c'était juste une option qui a provoqué de petits changements dans les shaders Unity finis, et tandis que pour les graphiques en temps réel, aucune des méthodes n'était considérée comme bien meilleure que l'autre.

L'avantage de l'implémentation pixel par pixel est l'élimination de deux valeurs interpolées au prix d'un petit surcoût pour ALU (pixel shader math). Cela signifie qu'au lieu des trois valeurs de Vector3 (tangente, tangente à deux points et la normale), nous n'avons besoin que de Vector4 et Vector3 (tangente avec un signe et normale). Sur les GPU modernes, c'est un peu plus rapide. Et il est nettement plus rapide lorsqu'il est exécuté dans le CPU, car il peut être utilisé pour des rendus non en temps réel. De ce point de vue, il est logique que la plupart des industriels aient décidé de recréer la tangente à deux points dans le pixel, et non au sommet.

C'est drôle que lorsque j'ai écrit cet article, Morten ait promu la transition dans Unity SRP vers des tangentes pixel par pixel à deux points! C'est juste une malchance que les méthodes de rendu intégrées d'Unity aient un héritage de choix incommodes.



Espace tangent dans différentes applications


Bien que cet article se concentre principalement sur Unity, car aujourd'hui ce moteur est devenu courant, je voulais que mon étude soit plus détaillée. Par conséquent, j'ai créé une liste de diverses applications avec des informations sur l'utilisation de l'espace tangent.

Unité (5.3+)


Orientation: OpenGL Y +
Espace tangent: MikkTSpace
Calcul des tangentes à deux points pour MikkTSpace: pour les sommets ou pour les pixels *

Notes:par défaut, le moteur redéfinit de force les tangentes du maillage lors de l'importation pour utiliser MikkTSpace. Pour les utilisateurs avancés, il a des options pour utiliser le maillage tangent, mais cela ne garantit pas la compatibilité avec les cartes normales cuites dans d'autres outils, en particulier lors de l'utilisation de shaders intégrés. Ils peuvent être remplacés par des shaders entièrement propres. Et pour ses shaders intégrés, HDRP utilise des tangentes pixel par pixel à deux points. Au moment de la rédaction de cet article, il était prévu que les shaders URP et Shader Graph passeraient également en tangentes pixel par pixel sur deux points. Avant Unity 5.3, le moteur utilisait des tangentes Lengyel , qui peuvent toujours être utilisées en sélectionnant l'option Tangents hérités dans l'importateur de maillage, mais les shaders intégrés ne prennent plus en charge cet espace tangent.

Ajout: avant URP 7.2.0, le traitement des cartes normales dans Shader Graph était complètement interrompu! Ni MikkTSpace ni même l'espace tangent de Lengyel ne sont utilisés correctement, et il est impossible de résoudre ce problème dans le Shader Graph. Si possible, passez à 7.2.0.

Moteur irréel 4


Orientation: Direct3D Y-
Espace tangent: MikkTSpace
Calcul des tangentes à deux points pour MikkTSpace: pixel par pixel
Remarques: par défaut, le moteur redéfinit les tangentes du maillage lors de l'importation à l'aide de MikkTSpace. Pour les utilisateurs avancés, il a des options pour utiliser un maillage tangent, mais cela ne garantit pas la compatibilité avec les cartes normales cuites dans d'autres outils.

Godot


Orientation: OpenGL Y +
Espace tangent: MikkTSpace
Calcul des tangentes à deux points pour MikkTSpace: pour chaque sommet
Notes: s'il n'y a pas de données tangentes, il peut calculer des maillages tangents dans MikkTSpace lors de l'importation. La documentation du moteur suggère d'exporter des maillages tangents, mais comme la plupart des outils n'exportent pas le maillage tangent correct, j'ignorerais cette astuce. Même si vous utilisez le maillage tangent d'origine, rien ne garantit que les cartes normales auront l'air correctes.

Playcanvas


Orientation: OpenGL Y +
Espace tangent: Lengyel / Schüler *
Calcul des tangentes à deux points: pour chaque sommet / basé sur les dérivées
Notes: fournit plusieurs méthodes de traitement de l'espace tangent. Les tangentes générées par le code n'utilisent pas MikkTSpace. Il a des options pour utiliser une tangente à deux points pour chaque sommet qui normalise les vecteurs d'espace tangent dans le pixel shader «fastTbn» sans normaliser l' espace tangent dans le shader de fragment (dont nous avons besoin, car cela correspond à l'implémentation de MikkTSpace avec un calcul pour chaque sommet), ou bien ils utilisent le TBN dérivé, emprunté à Christian Schuler ; il ignore complètement la tangente du maillage et calcule l'espace tangent dans le pixel shader. Maintenant, par défaut, des cartes normales basées sur des dérivés sont utilisées, pour lesquelles, pour autant que je sache, il n'y a pas d'outils pour créer des cartes normales exactes. Il est possible que vous puissiez importer des maillages avec des données normales et tangentes existantes à partir de MikkTSpace, puis utiliser l'option de matériau «fastTbn» pour faire correspondre les méthodes de rendu intégrées d'Unity, mais je pense que cela devrait être fait en code, pas via l'interface de l'éditeur.

Filament


Orientation: OpenGL Y +
Espace tangent: MikkTSpace
Calcul des tangentes à deux points pour MikkTSpace: pour chaque sommet
Remarques: selon les performances futures, le moteur peut basculer en tangentes pixel par pixel à deux points.

3ds max


Orientation: Direct3D Y- *
Espace tangent:
options natives d' exportation de maillage: exportez les fichiers FBX avec Triangulate activé mais Tangents et Binormals désactivés. Les normales doivent toujours être exportées. Les normales divisées par sommet peuvent être désactivées.
Remarques: Par défaut, 3ds Max suppose que l'orientation Direct3D est utilisée dans les cartes normales, mais dispose d'options pour inverser les orientations X et Y lors de l'utilisation de textures de carte normales sur les matériaux. La cuisson utilise toujours l'orientation Direct3D. La prise en charge de MikkTSpace apparaîtra dans les futures versions.

Maya


Orientation: OpenGL Y +
espace tangent:
options natives d' exportation de maillage: exportation de fichiers FBX avec Triangulate activé, mais Tangents et Binormals désactivés. Les normales sont toujours exportées. Les normales divisées par sommet peuvent être désactivées.
Remarques: certaines personnes m'ont dit que Maya prend déjà partiellement en charge MikkTSpace, mais je ne sais pas dans quelle mesure.

Mélangeur (2.57+)


Orientation: OpenGL Y +
Espace tangent: MikkTSpace
Calcul des tangentes à deux points pour MikkTSpace: pour chaque pixel
Options d'exportation de maillage : exportez des fichiers FBX avec une valeur de lissage "Normales uniquement". Vous pouvez exporter avec ou sans Tangent Space si l'application cible utilise également MikkTSpace, comme Unity ou Unreal.
Remarques: Blender n'a pas d'option de triangulation lors de l'exportation vers FBX, utilisez donc d'abord le modificateur Trianguler. Les cartes normales cuites dans Blender ne seront pas 100% compatibles avec Unity, mais si vous inversez le canal vert dans une application tierce ou dans du matériel personnalisé, elles fonctionnent parfaitement dans Unreal.

xNormal (3.17.5+)


Orientation:
espace tangent personnalisé : MikkTSpace *
Calcul des tangentes à deux points pour MikkTSpace: personnalisé (pour chaque sommet ou pixel)
Options pour la cuisson de cartes normales:a des options pour inverser les trois axes de la carte normale pendant l'exportation. L'unité a besoin de X + Y + Z +. Il existe également la possibilité d'utiliser des tangentes à deux points pour chaque sommet ou pixel (c'est-à-dire fragment). Par défaut, xNormal utilise des tangentes à deux points pour chaque sommet, mais cela peut être modifié dans le menu Plugins Manager (icône de prise d'alimentation dans le coin inférieur gauche) en cliquant sur le "Calculateur de base tangente", "Mikk - TSpace" et en cliquant sur Configurer. Une fenêtre contextuelle apparaîtra avec la seule option «Calculer binormal dans le pixel shader». Il doit être désactivé pour Unity et activé pour Unreal.
Remarques:bien que xNormal ne prenne en charge que MikkTSpace, son système de plugin prend en charge théoriquement tout espace tangent. Jusqu'à présent, le seul plugin d'espace tangent que je connaisse est conçu pour cuire l'espace tangent Unity 4 et est déjà inutile. Autrement dit, si elle est abordée de manière réaliste, l'application prend uniquement en charge MikkTSpace.

Peintre de substance


Orientation: personnalisable (OpenGL ou Direct3D)
Espace tangent: MikkTSpace
Calcul des tangentes à deux points pour MikkTSpace: personnalisable (pour les sommets ou pixels)
Options de cuisson pour les cartes normales: a des options de cuisson en orientation OpenGL ou Direct3D. Et une option pour utiliser des tangentes à deux points pour chaque sommet ou pixel (fragment), qui est configurée par le paramètre "Calculer l'espace tangent par fragment". Lors de l'exportation pour les méthodes de rendu Unity intégrées, vous devez sélectionner OpenGL et désactiver le calcul de l'espace tangent par fragment dans le projet et les options d'exportation, et lors de l'exportation vers Unreal ou Unity HDRP, faites le contraire.
Remarques:Par défaut, Substance Painter utilise les données tangentes utilisées par le maillage importé. Sauf si vous exportez depuis Blender, vous n'en avez pas besoin! Mais il n'y a pas d'options pour désactiver cette fonctionnalité. Avant d'importer dans Substance Painter, exportez les maillages sans tangentes. Plus tôt dans la documentation de Substance, il a été affirmé à tort que les calculs de tangentes à deux points
dans Blender correspondent à Unity, mais maintenant l'erreur a été corrigée!

Marmoset Toolbag 3


Orientation:
espace tangent personnalisé :
calcul personnalisé des tangentes à deux points pour MikkTSpace: pixel par pixel
Remarques: il semble que le programme dispose d'options pour afficher ou créer des cartes normales dans presque toutes les configurations existantes. Y compris les paramètres prêts à l'emploi pour les espaces tangents 3ds Max et Maya! Cependant, l'option d'espace tangent «Mikk / xNormal» utilise des tangentes pixel par pixel sur deux points, et cela ne peut pas être modifié. C'est-à-dire que le Marmoset Toolbag 3 ne peut pas afficher correctement ou créer des cartes normales pour les méthodes de rendu Unity intégrées. Peut-être que dans les versions futures, la situation changera, car les développeurs sont conscients du problème.

3DCoat


Orientation: coutume
espace Tangente: coutume
calcul des tangentes à deux points pour MikkTSpace :?
Remarques: Il dispose de nombreuses options pour afficher et créer des cartes normales. Il est parfaitement capable de faire correspondre Blender et UE4, il prend donc en charge les tangentes pixel par pixel à deux points, mais je ne sais pas si les tangentes de sommet à deux points sont utilisées dans le préréglage Unity.

Houdini (16.0.514+)


Orientation:
espace tangent personnalisable : personnalisable *
Calcul des tangentes à deux points pour MikkTSpace: pixel par pixel
Notes: prend en charge sa propre base de tangentes ou MikkTSpace, à la fois pour l'affichage et pour la cuisson, mais uniquement dans la version pixel par pixel. Il semble que par défaut, il n'utilise pas MikkTSpace pour le rendu, mais à partir de Houdini 17.5. Les maillages peuvent être modifiés avec des nœuds intégrés pour utiliser le MikkTSpace tangent.

Modo (10+?)


Orientation:
espace tangent personnalisé :
calcul personnalisé des tangentes à deux points pour MikkTSpace: personnalisé (sommet ou pixel par pixel) *
Remarques: il semble qu'il prend en charge le rendu et la cuisson dans différents espaces tangents, ainsi que l'option de tangentes pixel par pixel à deux points pour l'exportation. Je n'ai pas testé cela.

Knald


Orientation:
espace tangent personnalisé : MikkTSpace
Calcul des tangentes à deux points pour MikkTSpace: pixel par pixel
Remarques: Par défaut, il utilise MikkTSpace et redéfinit les tangentes des maillages importés, mais si nécessaire, il existe une option pour utiliser les maillages tangents existants. L'orientation des cartes normales peut être inversée avec un paramètre qui s'applique à l'ensemble du projet.



finalement


Un aspect important est que si le modèle low-poly sur lequel vous faites cuire n'est qu'un plan (par exemple, pour la texture de carrelage), alors tout ce qui est écrit est sans conséquence et vous pouvez cuire en utilisant n'importe quel outil ... si vous gardez tout simplement dans la bonne orientation ou retournez ensuite les canaux de texture correspondants.

En outre, la plupart des problèmes répertoriés dans l'article ne sont visibles que sur les modèles solides. Les formes organiques peuvent masquer les différences les plus subtiles, par exemple, la différence entre les tangentes vertex et pixel par pixel à deux points.

Source: https://habr.com/ru/post/undefined/


All Articles