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?
la source
Réponses:
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.
la source
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.
la source
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:
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!
la source
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.
la source