Comment fonctionne la tessellation de matériel?


34

Je voudrais juste que quelqu'un explique en termes relativement clairs comment fonctionne la tessellation de matériel en considérant que c'est le nouveau mot à la mode avec DX11.

Merci.

Réponses:


42

Je vais vous donner la version "simple" et laisser quelqu'un d'autre vous renseigner sur les détails si cela vous intéresse :).

Il existe essentiellement deux façons de modéliser des objets 3D. La première est celle que l'on ne voit pas beaucoup dans les jeux et qui implique l'utilisation de courbes précises et définies mathématiquement pour définir la forme d'un objet. En utilisant cette méthode, le niveau de détail est (pratiquement) "infini". Prenons un cylindre par exemple. Un cylindre peut être défini en termes mathématiques très simples: tout ce que vous avez besoin de savoir, c’est le rayon aux extrémités et la longueur du cylindre. En termes de géométrie, ces informations sont tout ce dont nous avons besoin pour rendre le cylindre dans une scène 3D. De plus, nous pouvons facilement redimensionner le cylindre pour le rendre plus grand ou plus petit; tout ce que nous avons à faire est de maintenir le rapport longueur / rayon. Nous pouvons utiliser les mêmes formules pour représenter la géométrie, mais avec des paramètres différents. Nous pouvons représenter un tore ("beignet") forme) aussi facilement: nous avons simplement besoin de connaître le rayon intérieur et le rayon extérieur. À partir de cela, nous pouvons calculer le diamètre (et donc le rayon) du corps du beignet (le "gâteau") en soustrayant le rayon intérieur du rayon extérieur. Le corps circulaire s'enroule le long de l'arc défini par le rayon intérieur. Ce type de définition 3D est intéressant car il est relativement simple (il en résulte un fichier de modèle réduit) et qu’il n’ya pas de limite significative au niveau de détail. L'inconvénient est que le matériel vidéo actuel n'est pas conçu pour traiter efficacement ces types de modèles (voire pas du tout). Le corps circulaire s'enroule le long de l'arc défini par le rayon intérieur. Ce type de définition 3D est intéressant car il est relativement simple (il en résulte un fichier de modèle réduit) et qu’il n’ya pas de limite significative au niveau de détail. L'inconvénient est que le matériel vidéo actuel n'est pas conçu pour traiter efficacement ces types de modèles (voire pas du tout). Le corps circulaire s'enroule le long de l'arc défini par le rayon intérieur. Ce type de définition 3D est intéressant car il est relativement simple (il en résulte un fichier de modèle réduit) et qu’il n’ya pas de limite significative au niveau de détail. L'inconvénient est que le matériel vidéo actuel n'est pas conçu pour traiter efficacement ces types de modèles (voire pas du tout).

L’autre méthode consiste à combiner une géométrie simple pour approximer la forme que nous voulons représenter. Nous faisons cela avec un processus appelé tessellation . Nous pourrions tesseler un cylindre en le décomposant en formes plus primitives: deux cercles et une série de longs rectangles qui s'enroulent autour du bord extérieur. Les cercles peuvent être décomposés en plusieurs petits triangles, de même que les rectangles le long des bords. Le résultat final est un modèle composé uniquement de triangles:

Image d'un cylindre triangulé

Ou, pour le tore:

Image de tore triangulé

La bonne nouvelle est que le matériel vidéo est optimisé pour gérer ce type de géométrie. Les GPU actuels n'ont aucune difficulté à produire des tonnes et des tonnes de triangles à la seconde. Cependant, il y a un problème évident: nous essayons de représenter des surfaces courbes en utilisant des formes à bords plats. Pour que notre cylindre ressemble à un cylindre (par opposition à un cube), nous voulons le décomposer en beaucoupde petits triangles. Combien en voulons-nous? Ça dépend. Quel type de matériel sera utilisé pour rendre la scène? Un matériel plus rapide peut rendre les triangles plus rapidement qu'un matériel plus lent, produisant des taux de trame plus rapides. Il y a d'autres facteurs à prendre en compte, comme le nombre d'autres objets présents dans la scène et leur complexité. Dans les jeux, il y a généralement beaucoup d'objets dans une scène donnée. De plus, les objets peuvent voyager à travers différentes scènes, chacune avec différents niveaux de complexité visuelle. Il est difficile de déterminer le niveau de détail à utiliser lorsque nous tessellons nos modèles.

Un autre problème est celui de la complexité géométrique: alors qu'une définition de cylindre basée sur une courbe est très simple (rayon et longueur), une définition en mosaïque combine probablement des centaines de triangles, dont chacun doit être défini indépendamment. Par conséquent, notre fichier modèle en mosaïque sera beaucoup plus volumineux. Disons que nous avons un modèle mathématiquement défini de quelque chose de complexe, comme une personne. Notre fichier modèle peut avoir une taille de 24 Ko seulement. Une fois que ce modèle est en mosaïque, le fichier résultant pourrait faire 24 Mo (24 000 Ko). C'est toute une différence.

La tessellation matérielle tire parti des shaders de géométrie pour effectuer la tessellation assistée par matériel en temps réel (ou presque). Il fournit essentiellement un mécanisme pour prendre un modèle 3D défini mathématiquement et le transformer en un format mosaïque que la carte vidéo peut restituer efficacement. Traditionnellement, les développeurs de jeux effectuaient la tessellation en studio et expédiaient les modèles avec le jeu. La tessellation matérielle nous permet de différer ce processus jusqu'à ce que le jeu soit réellement exécuté sur l'ordinateur du joueur. Cela a de sérieux avantages:

  1. La taille du contenu 3D du jeu diminue considérablement (moins de disques ou moins de téléchargements, et moins d'espace disque requis).

  2. Nous pouvons contrôler le niveau de détail en temps réel . Sommes-nous en train de courir sur une bête de pointe d'une machine de jeu? Si c'est le cas, nous pouvons utiliser un niveau de détail très élevé. Sommes-nous en cours d'exécution sur un ancien ordinateur portable avec des graphiques intégrés? Aucun problème; nous pouvons simplement réduire le niveau de détail pour améliorer les performances.

Voilà donc l'essentiel. Ce n'est probablement pas précis à 100%, car je ne suis pas un programmeur 3D, mais cela devrait vous donner une meilleure idée de ce dont il est question dans le monde :).

Cordialement,
Mike


Wow ... génial! Le plus long 'survol' que j'ai jamais lu: P

6
Un autre facteur détermine le niveau de tessellation requis: la taille de l'objet à l'écran. La tessellation Runtime vous permet d’avoir le niveau de détail correct partout, sans créer plusieurs versions de chaque objet.
Adam

Est-ce un peu lourd en CPU?
jcora

@Bane, vouliez-vous dire intensif en GPU? Le processeur s'en fout.
Nate Zaugg

0

Dommage, ce n'est pas ainsi que la plupart des développeurs utilisent tessellation maintenant ou dans un avenir proche. Tout ce qu’ils utilisent pour le moment, c’est de déplacer la plupart des surfaces plates conformément à son heightmap. Cela donne également une belle apparence, mais je pense toujours que c’est une mauvaise utilisation d’une technologie beaucoup plus performante.


Les outils et les pipelines de production doivent être repensés et reconstruits (comme vous le savez sûrement mieux que la plupart, @SamHocevar, ce commentaire ne vous concerne donc pas), et le nouveau matériel doit proliférer à un pourcentage significatif.
Rob Craig

@RobCraig Notez que je viens de corriger l'orthographe dans ce commentaire; Je ne suis pas l'auteur original.
Sam hocevar

@ SamHocevar Yup, j'ai pensé - merci pour la clarification, cependant!
Rob Craig
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.