2017-10-21 11 views
0

J'expérimente avec l'exportation du format Collada à partir de Blender, et avec l'utilisation d'objets plus complexes et de textures, j'ai remarqué dans la section "p" de l'index, mêmes informations de vertex mais en utilisant des normales différentes et des coeurs uv.Pourquoi les modèles 3D ont des positions de vertex dupliquées avec différentes coeurs uv

Deux questions principales que je sens sont assez importantes.

1: Pourquoi? Ne devrait-il pas avoir seulement 1 position vertex et 1 coordonnée UV pour cette position?

2 (la question la plus importante de toutes): Que se passe-t-il si cette information de sommet est mise dans le Vertex Shader dans le désordre? Par exemple, le sommet de l'index 1 et le sommet de l'index 10 partagent la même position, mais ont des normales différentes et des coordonnées UV. Et si l'indice 10 passait en premier, puis l'index 1? Et vice versa, cela change-t-il quelque chose à l'intérieur du Pixel Shader? Comment cela affecte-t-il le reste du pipeline?

Merci!

Répondre

1

Un sommet est défini par la combinaison de toutes les informations qui le définissent. Donc, vos sommets sont en cinq dimensions: (x, y, z, u, v). Pour deux sommets quelconques, si u1! = U2 ou v1! = V2 ils ne sont pas le même sommet. Les GPU à pipeline fixe ne supportaient pas le niveau supplémentaire d'indirection qui viendrait si vous vouliez dire "le sommet est la position A plus la position de la texture B plus le C normal plus ...", et il n'est pas standard d'ajouter ce niveau de indirection avec les GPU programmables car cela revient généralement à dépenser plus sur la bande passante mémoire qu'elle n'en économise. Vous pourriez, mais les gens ne le font généralement pas.

Un vertex shader n'a aucune idée de l'endroit où le sommet qu'il traite est tombé dans l'ordre; Tant que le pipeline de géométrie suit, aucun problème ne se pose.

+0

Bonne réponse, mais qu'en est-il de la question 1? – Mike5050

+0

Les GPU fonctionnent avec des 'données de vertex entrelacées', ce qui signifie que toutes les données par vertex sont groupées dans le même bloc qui est défini par un format et une foulée. Si vous voulez avoir la même position avec différentes normales, UV, indices d'os, ou toute autre donnée par vertex, vous devez la dupliquer (également appelée 'splitting'). Les GPU utilisent des "tableaux de structures", pas des "structures de tableaux". Même lorsque vous utilisez plusieurs flux de tampons de vertex, vous n'avez qu'un seul index pour tous les tampons par le sommet –

+0

Right. Ma réponse à la première question est la suivante: aucun sommet n'est dupliqué. Les sommets (x, y, z, u1, v1) et le sommet (x, y, z, u2, v2) sont des sommets différents, car ils ont des (u, v) s différents. – Tommy