La tessellation est une technologie plutôt récente sur les cartes
graphiques. L'idée de base est assez simple : générer des vertices afin
d'augmenter leur nombre et ainsi augmenter la finesse de la surface
dont ils font partie.
Pour ce faire, la partie du GPU qui s'occupe de la tessellation (le
tessellateur) n'a besoin que de deux informations : la position du
vertex, et la normale. Si vous avez bien compris la page sur les
vertices, vous savez qu'une normale représente simplement un vecteur
perpendiculaire au vertex. Le tessellateur va interpoler la position et
la normale afin de générer de nouvelles vertices entre deux vertices
existantes.
Il existe plusieurs algorithmes de tessellation, qui vont définir où et
quand il faut augmenter le nombre de vertices. Le plus simple est
évidemment un tessellateur qui augmente le nombre de vertices jusqu'à
arriver à une certaine résolution, mais ce n'est pas très utile : les
objets distants seraient très détaillés mais les détails ne seraient
pas visibles. Bref, du gâchis.
Une méthode plus adéquate consiste à faire varier le nombre de vertices
afin que les objets proches en possèdent beaucoup et que les objets
distants en possèdent peu. L'idéal serait augmenter le nombre de
vertices afin que chaque vertex corresponde à un pixel à l'écran, mais
cela demanderait enormément de ressources.
Sur l'image ci-dessous, on peut voir l'effet des triangles PN
(Point-Normal). Ces derniers ont été initialement présentés par ATI et sont également
appelés N-Patches (Normal Patches). NVIDIA a préféré l'utilisation de
primitives appelées les RT-Patches (Real-Time Patches). Cependant, bien
que DirectX supporte toujours ces deux types de primitives, ils ont
tous les deux plus ou moins abandonné le support de la tessellation,
même sur leurs cartes les plus récentes.

Les triangles PN (ou N-Patches) d'ATI
Le chiffre en haut de chaque triangle représente le niveau de détail. Le niveau 0 est le niveau de "base", c'est à dire qu'il n'y a aucune tessellation. Ensuite, pour chaque niveau, le tessellateur interpole les vertices et augmente ainsi le nombre de triangles.
Dans le cas d'une surface plane comme sur l'illustration, la différence entre le niveau 0 et le niveau 5 ne sera pas visible, puisque la surface sera toujours plane. Si la surface est courbe, cependant, la différence sera très visible, comme vous pouvez le voir sur l'illustration suivante.
La tessellation d'un modèle plus complexe
Il s'agit cette fois-ci d'une mesh (en français maille), un ensemble de primitives. En plus d'interpoler les coordonnées, le tessellateur a également interpolé les normales qui, souvenez-vous, font partie de l'équation qui calcule la lumière. C'est pourquoi l'éclairage de la surface s'adapte correctement au fur et à mesure que le nombre de triangles augmente.

La tessellation d'un modèle plus complexe
Bien que la tessellation ait été introduite il y a déjà quelques temps, elle est toujours très peu utilisée. D'abord, les constructeurs semblent avoir abandonné leur support. Ensuite, seul DirectX supporte la tessellation - ou de façon plus générale les surfaces de haut niveau - depuis sa version 8, alors qu'OpenGL ne possède toujours pas de support standardisé pour ces fonctionnalités. ATI et NVIDIA avaient à une époque introduit des extensions propriétaires afin d'utiliser ces possibilités, mais les pilotes actuels ne possèdent plus les extensions en question. Matrox avait également annoncé une carte exploitant la tessellation (la Parhelia), mais a fini par retirer ces informations de son site et désactiver le support de la tessellation dans le pilote.
|
|
Données primitives | Le Vertex Pipeline |
|
Imprimer
Envoyer
3 Réactions
103 Approbations





Flux RSS
Dernières réactions
N'y a t'il rien a faire pour pouvoir lire cet article ? Il est pointe par plusieurs site mais ... est impossible a lire
J'ai essaye avec firefox et chrome sous linux ...
Merci d'avance.