Intro :
Le principe de la tessellation est simple : on transforme un polygone et on le décompose en morceaux plus petits.
Prérequis :
– Savoir comment fonctionne un programme HLSL
– Savoir comment utiliser DirectX 11
Explications :
Si on prend un carré et qu’on le coupe en deux le long de sa diagonale, on opère une « tessellation » en deux triangles.
Dans DirectX 11, la tessellation est opérée directement par le GPU (c’est-à-dire par le processeur de la carte graphique).
Elle peut être utilisée dans le rendu en faisant du « Displacement Mapping ». Au lieu de précharger, dans la mémoire vidéo, un modèle très détaillé : on peut augmenter ses détails par le GPU ; en effet le Displacement Mapping va de paire avec la tessellation.
Par exemple au lieu d’implémenter une grille plate très détaillée, à la place, on peut augmenter les détails d’un polygone carré par le procédé de tessellation.
En conséquence et d’autre part, il devient possible de faire varier progressivement le niveau de détail géométrique des modèles.
Les avantages :
– Réduit la mémoire et la bande passante utilisées
– Permet de complexifier des modèles basse résolution en des modèles très détaillés et ceci à la volée
– Déplace le calcul classique de modification géométrique effectué par le CPU vers un calcul effectué par le GPU
– Facilite le LOD (Level of Detail) des objets distants. En effet la tessellation permet de faire varier dynamiquement le niveau de détail d’un modèle
– On peut effectuer le calcul physique de collision ou d’animation avec un modèle non détaillé en mémoire centrale tout en affichant un modèle très détaillé au rendu
– Possibilité d’affichage de meilleurs modèles détaillés
Trois nouvelles étapes de shader :
DirectX 11 implémente la tessellation par 3 nouvelles étapes de chaîne de rendu : l’étape Hull Shader, l’étape Tessellator et l’étape Domain.
Ces trois étapes suive l’étape Vertex Shader et précède l’étape Geometry Shader.
Avant tout, définissons quelques concepts liés à la tessellation par DirectX 11 :
– Patch :
– Control Point :
– Tessellation factor :
– Input primitive :
Lorsque ces deux étapes (Hull Shader & Domain Shader) sont définis dans un fichier shader « .fx », l’étape Vertex Shader ne renvoie pas spécialement un vertex mais renvoie ce qu’on appel un « control point » qui représente le vertex d’un triangle ou d’une face. Ce sera la dernière étape de la « Pipeline » qui se chargera de renvoyer le vertex au Pixel Shader.
Hull Shader :
Est invoqué une fois par « control point » et renvoie des « tessellator factors ». Cette étape est programmable. Cette étape de shader permet de faire savoir à l’étape suivante Tesselator comment opérer la tesselation sur les données d’entrées.
Tessellator Stage :
Génère de nouvelles vertices. Plus les « tessellator factors » reçues sont élevés plus il y a de triangles créés. Cette étape est non-programmable.
Domain Shader :
Cette étape est programmable. Est exécutée une fois par vertex. Convertis et fait correspondre les données (u, v) vers les données d’attributs (x, y, z, w).
Exemples :
1) Un carré subissant une « tessellation »
2) Puis utilisation d’une « displacement map »
3) Enfin utilisation d’une texture et bump mapping
Résumé :
Références :
– http://www.nvidia.fr/object/tessellation_fr.html
– https://msdn.microsoft.com/en-us/library/windows/desktop/ff476340%28v=vs.85%29.aspx
– http://www.rastertek.com/dx11tut38.html
– http://richardssoftware.net/Home/Post/28
– 3D Game Programming with DirectX 11 – Franck D. Luna






