Qu'est-ce que la cartographie UV et UVW?


26

J'essaie de comprendre certains concepts de base de la 3D, en ce moment j'essaie de comprendre comment les textures fonctionnent réellement. Je sais que la cartographie UV et UVW sont des techniques qui mappent des textures 2D à des objets 3D - Wikipedia m'en a dit autant. J'ai recherché des explications sur Google, mais je n'ai trouvé que des didacticiels qui supposaient que je savais déjà ce que c'était.

D'après ma compréhension, chaque modèle 3D est composé de points, et plusieurs points créent un visage? Chaque point ou face a-t-il une coordonnée secondaire qui correspond à la position ax / y dans la texture 2D? Ou comment le déballage manipule-t-il le modèle?

De plus, que fait vraiment le W dans UVW, qu'offre-t-il par rapport aux UV? Si je comprends bien, W correspond à la coordonnée Z, mais dans quelle situation aurais-je des textures différentes pour le même X / Y et un Z différent, la partie Z ne serait-elle pas invisible? Ou est-ce que je comprends complètement cela?


1
poser deux questions séparément
Noob Game Developer

1
Je déteste tellement les gars comme @NoobGameDeveloper, tout le monde répond à la question et tout ce qu'il fait, c'est essayer de trouver des choses qui ne vont pas avec la question. Allez laissez-les poser des questions, je ne dis pas que personne ne devrait suivre les règles, mais ces questions comme celle-ci sont tout à fait correctes d'être affichées ici.
Daniyal Azram

Réponses:


23

Votre compréhension est proche. Chaque modèle 3D est composé de sommets. Chaque sommet définit généralement l'emplacement d'un point dans l'espace, une normale (utilisée dans les calculs d'éclairage) et 1 ou plusieurs coordonnées de texture. Celles-ci sont généralement désignées comme u pour la partie horizontale de la texture et v pour la verticale.

Lorsqu'un objet est texturé, ces coordonnées sont utilisées pour rechercher le texel ou le pixel à tracer à partir de la texture. Je trouve plus facile de les considérer comme des pourcentages ou des rapports entre le bord gauche de la texture ( u = 0) et le bord droit de la texture ( u = 1.0) et depuis le haut de la texture ( v = 0) et le bas de celui-ci ( v= 1,0). Ils sont interpolés entre les sommets et recherchés pour chaque pixel à l'écran rendu. Ils peuvent être supérieurs ou inférieurs à ces plages et l'état de rendu défini lors du rendu de l'objet spécifie ce qui se passe. Les options pour cela sont CLAMP et REPEAT. Le serrage limite les coordonnées à 0 ou 1, ce qui fait que la texture se tache à l'extérieur de la plage. Répéter fait que la texture se répète lorsqu'elle est en dehors de la plage; c'est la même chose que de saisir uniquement la partie décimale de la coordonnée et de l'utiliser à sa place.

Avant que les coordonnées de texture ne soient appliquées à un objet, elles sont multipliées par une matrice de texture pour leur appliquer une transformation (comme la mise à l'échelle, la translation ou la rotation). Cet effet est parfois animé dans les jeux pour le faire apparaître comme si quelque chose se déplace sur un objet sans avoir à déplacer l'objet lui-même ... la texture défile simplement dessus. Lorsque la matrice de texture est multipliée par les coordonnées de texture, elle produit 2 valeurs qui sont utilisées pour rechercher le texel à tracer (appelons-les s et t ). Celles-ci sont générées automatiquement à partir de u et v même lorsque la matrice de texture n'est pas définie; c'est l'équivalent de multiplier u et v par une matrice d'identité.

C'est là que la coordonnée w entre en jeu, bien qu'elle ne soit pas utilisée très souvent. Il s'agit d'un paramètre supplémentaire pour multiplier la matrice de texture et est généralement utilisé lorsque vous souhaitez prendre en compte la perspective (comme dans le Shadow Mapping ). Cela fonctionne de la même manière que lorsque vous transformez un emplacement dans l'espace objet en espace écran via une matrice de projection de vision du monde. En multipliant l'UVW par une transformation de projection, vous vous retrouvez avec 2 coordonnées, les s et t qui sont ensuite mappés sur une texture 2D.


Il vaut la peine de mentionner que OpenGL traite v0 comme le bas et v1.0 comme le haut. Cela m'a coûté beaucoup de temps dans le passé lorsque je ne pouvais pas trouver le bug lorsque mes textures étaient étranges.
tkausl

8

Prenons un triangle.

Chaque coin a une coordonnée UV. Vous interpolez entre celles-ci pour obtenir un ensemble de coordonnées UV pour chaque pixel. (Il y a aussi de la perspective en jeu ici, mais ignorons cela pour le moment).

Ensuite, vous récupérez un texel de la texture à partir des coordonnées U et V. C'est-à-dire, un pixel à partir de la coordonnée de texture x, y - même chose, une terminologie légèrement différente puisque nous parlons de textures.

Si votre texture est vraiment tridimensionnelle, vous aurez également besoin d'une troisième coordonnée, W.

Une façon de visualiser cela est de penser à un bloc de bois. Si vous le hachez d'une manière ou d'une autre, vous verrez que chaque plan à l'intérieur du bloc contient une sorte de texture 2D.

Les textures 3D sont si rares que vous pouvez les oublier pour le moment.


Rare? Pour quoi sont-ils utilisés? Pouvez-vous montrer un exemple dans le contexte des titres AAA.
Quazi Irfan

Non, car ils ne sont généralement pas utilisés. Il y a toujours une façon moins chère de faire la même chose. Pensez aux objets hachés dans wii sports plus; vous pouvez casser les articles comme vous le souhaitez et voir les "internes". Ils auraient pu gaspiller d'énormes quantités de mémoire en leur faisant des textures 3D (en supposant que le matériel le supporte même), mais il est beaucoup moins cher de simuler cela avec quelques textures 2D à la place.
Jari Komppa

Alors, ils ne sont pas exclusifs? ou ce n'est pas une fonctionnalité bien nécessaire pour les choses bien connues du moteur de jeu?
Quazi Irfan,

Je ne comprends pas ce que tu veux dire. Les textures 3D peuvent être utiles dans d'autres utilisations que simplement des textures; Si certaines données dont un shader a besoin sont mappées de manière pratique dans un tableau 3D, ce serait une utilisation. Mais en tant que texture "normale", ils ne sont généralement qu'une perte de mémoire.
Jari Komppa

Une application d'une texture 3D est la cartographie à distance, bien que comme le dit Jari, elles sont très rares dans un jeu en raison de leur complexité. [lien] http.developer.nvidia.com/GPUGems2/gpugems2_chapter08.html
Jackalope

7

Pensez à l'origami.

Une carte UV est comme une peau 2D aplatie (non enveloppée) de votre maillage 3D (coque).

Si vous deviez découper la carte et la plier le long des lignes de maillage, le résultat serait votre modèle 3D.

Les valeurs en virgule flottante (U, V) vont de (0,0) à (1,1) Le coin supérieur gauche de la carte UV est (0,0) Le coin inférieur droit est (1,1)

Chaque sommet d'un maillage de polygones (tris / quads) a une valeur (U, V) qui indique au moteur de rendu quelle partie de la carte utiliser.

Dans le pipeline GPU, les vertex shaders calculent les projections 2D de chaque pixel dans ces polygones 3D, puis les fragment shaders les colorent à l'aide de la carte UV.

Cela ne peut être pleinement apprécié sans une image comme celle-ci, ce qui le rend évident:

UV Mesh

Comme les autres commentateurs l'ont mentionné, le composant W est utilisé par le moteur de rendu pour des effets plus sophistiqués comme le mapping d'ombres, mais le mapping UV est la base de la compréhension.

Notez qu'un vertex shader doit appeler un fragment shader au moins une fois pour chaque pixel qui doit être coloré. C'est pourquoi les GPU sont des processeurs parallèles avec des dizaines de cœurs - le pipeline de shader est très exigeant.

Veuillez également noter que les GPU intégrés au CPU sont conçus pour les appareils mobiles et sont limités à moins d'un dixième du nombre de cœurs que ceux des GPU externes de génération similaire. Ceci en raison des contraintes d'alimentation et de refroidissement mobiles. La loi de Moore semble avoir ralenti, mais les performances continuent de s'améliorer (avec l'étrange fusion ici et là ..)

Le mappage UV de milliards de pixels à plus de 240 images par seconde peut provoquer un véritable gâchis!


0

Une carte uv mappe un point (x, y, z) dans le maillage à un point (u, v) dans l'image de texture. Puisqu'une image correspond (u, v) à une couleur, les deux cartes peuvent être chaînées, ce qui donne une carte de l'espace maillé à l'espace couleur.

         uv map       color map
 (x,y,z)   ->   (u,v)    ->     color
 mesh           Texture
 space          space
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.