La cartographie UV génère-t-elle pour certains points du modèle 3D plusieurs points dans la projection 2D?

8

Supposons que mon modèle 3D soit une pyramide avec une base rectangulaire et je numérote les quatre coins de la base avec 1, 2, 3, 4 et donne 5 au point supérieur. Si je projette cette pyramide dans un objet en forme d'étoile 2D, les quatre points extérieurs de l'étoile ne seraient-ils pas tous associés au point numéro 5 dans le modèle 3D?

Image dessinée à la main d'une pyramide à base carrée et son filet 2D en forme d'étoile

Abdul Al Hazred
la source
Il semble que vous pensiez que "projeter cette pyramide dans un objet en forme d'étoile 2D" est une opération définie. Ce n'est pas le cas jusqu'à ce que vous le fassiez.
Jessy
2
Afin de mapper UV de cette manière, vous devez considérer (5) comme quatre sommets différents qui ont les mêmes coordonnées XYZ.
Russell Borogove

Réponses:

10

De la manière dont il est généralement défini, chaque sommet d'un maillage correspond à une coordonnée UV, et il doit exister exactement une coordonnée de ce type par sommet, car c'est ainsi qu'un moteur de rendu récupère les texels. Il est donc impossible d'avoir plusieurs coordonnées UV pour un seul sommet à moins d'avoir plusieurs paramétrisations pour votre maillage.

Cependant, les maillages sont souvent divisés lors du paramétrage et les mêmes sommets peuvent se retrouver à plusieurs endroits, comme dans votre exemple. Le plus souvent, ces sommets sont simplement répliqués lors du chargement / rendu, de sorte que le mappage vertex-uv reste 1-to-1 ou many-to-1. Ainsi, un moteur de rendu interprétera probablement votre exemple comme suit (la v5 est divisée en 4):

entrez la description de l'image ici

ap_
la source
4

J'ai juste besoin d'ajouter un peu à la réponse de ap_.
Bien sûr, vous pouvez avoir plusieurs UV pour un sommet, c'est ce qu'on appelle les couches UV. C'est ainsi que les moteurs ont affiché des cartes lumineuses et des cartes d'albédo en même temps, depuis l'avènement des cartes lumineuses. (moteur de tremblement de terre en 1996 peut-être?)
Vous pouvez avoir plus de couches UV, si vous voulez faire du multitexturing comme pour les terrains, lightmap, albedo large, albedo detail, normal map ...

Malheureusement, le rastériseur ne choisira jamais une couche UV en fonction de la primitive qu'il rend. Un tel rendu pourrait être fait avec un tampon d'index supplémentaire (primitif au tampon de mappage de couche UV) mais aucune carte graphique et aucune API graphique ne le prennent en charge. Il s'agit de toute façon d'une violation inutile de KISS.

Donc, ce que l'on ferait dans ce cas, c'est de séparer votre sommet de la pyramide en 4 sommets distincts pendant la conception. Quoi qu'il en soit, la première raison à cela, ce n'est pas le déballage UV mais la définition généralement normale. Si vous voulez des arêtes vives, vous devez briser l'ombrage, donc vous devez avoir des normales différentes, elles aussi, comme les UV, sont généralement définies 1-1 dans le flux de vertex.

Suggestion finale, peut-être que vous ne voulez pas vraiment utiliser ce déballage, je suggère plutôt ceci:

entrez la description de l'image ici

De cette façon, vous avez une continuité transparente pour le filtrage et regardez sur les bords et sur l'apex.

v.oddou
la source