Tessellation vs Geometry Shader

11

Corrigez-moi si je me trompe, mais les tâches Shader de géométrie et Tessellation Shader doivent générer des sommets dans le pipeline graphique. Ce que je voudrais savoir, c'est comment ils sont différents et quand dois-je les utiliser l'un par rapport à l'autre?

César
la source
6
Je me sens trop paresseux pour rédiger une réponse complète, mais l'essentiel est que Geometry Shader est pour un très petit niveau d'amplification fixe, où les étapes de tessellation sont destinées à une amplification polygonale massive et dynamique
MickLH

Réponses:

14

En fait non, le «travail» du shader de géométrie (GS) est l'évaluation primitive.

Les shaders de géométrie peuvent tesseler, mais ils sont limités par a) une limite supérieure en cours sur le nombre d'éléments de sortie, et b) l'exécution dans un shader unique ... bien sûr, l'instanciation du shader atténue le 2ème problème, mais les shaders de géométrie globaux sont plus efficace à l'évaluation primitive et / ou à l'interpolation de valeurs qu'à la tessellation.

En comparaison, les shaders de tesselation (TS) ont été introduits spécifiquement pour effectuer une densification géométrique afin qu'ils fonctionnent bien, sont robustes à un éventail toujours plus large d'algorithmes, (jeu de mots prévu) et ils sont moins limités par des tampons bornés en sortie.

Daniel Rákos a un bon article sur l'évolution de GS / TS: Histoire de la tessellation matérielle

Quand appliquer chacun est un cas d'utilisation du bon outil pour le travail et voici comment: Construire un pipeline à ébauche sans tesselator pour obtenir des primitives évaluant correctement dans VS / GS / FS. Étendez séparément la tessellation basée sur la vue ou la scène, puis insérez le TS devant la GS pour densifier les primitives qui sont ensuite transmises à votre GS déjà conçue. Si vous voulez essayer un TS différent, créez une alternative et échangez-la dans le pipeline ... vous pouvez même utiliser une GS instanciée pour sélectionner dynamiquement le bon TS en fonction des propriétés d'une primitive!

JasonInVegas
la source