Étape du nuanceur geometry
L’étape du nuanceur de géométrie (GS) exécute le code de nuanceur spécifié par l’application avec des sommets en entrée et peut générer des sommets en sortie. Contrairement aux nuanceurs de vertex, qui fonctionnent sur un sommet unique, les entrées du nuanceur de géométrie sont les sommets d’une primitive complète (c’est-à-dire deux sommets pour les lignes, trois sommets pour les triangles ou un seul sommet pour un point) plus les données de vertex pour les primitives adjacentes aux bords (autrement dit, deux sommets supplémentaires pour une ligne ou trois sommets supplémentaires pour un triangle). La figure suivante montre des exemples de primitives entrées dans un nuanceur de géométrie.
Une autre entrée du nuanceur de géométrie est un ID primitif généré automatiquement par l’assembleur d’entrée (IA). Un ID primitif permet au nuanceur de géométrie d’extraire ou de calculer, si nécessaire, des données par face.
L’étape du nuanceur de géométrie peut générer plusieurs sommets pour former une topologie sélectionnée unique. Les topologies de sortie GS disponibles sont tristrip, linestrip et pointlist. Le nombre de primitives émises par un nuanceur de géométrie peut varier, bien que le nombre maximal de sommets qu’un nuanceur de géométrie peut émettre doit être déclaré statiquement. Les longueurs de bandes émises par un nuanceur de géométrie peuvent être arbitraires (il existe une commande couper ).
La sortie du nuanceur de géométrie peut être envoyée au rastériseur et à une mémoire tampon de vertex en mémoire. La sortie envoyée à la mémoire est étendue à des listes de points, de lignes et de triangles individuels (de la même façon que la sortie est passée au rastériseur).
L’étape du nuanceur de géométrie peut implémenter les algorithmes suivants :
Point Sprite Tessellation : le nuanceur prend un sommet unique et génère quatre sommets (deux triangles de sortie) qui représentent les quatre coins d’un quad avec des texcoords arbitraires, des normales et d’autres attributs.
Traits larges : le nuanceur reçoit deux sommets de ligne (LV0 et LV1) et génère quatre sommets pour un quad qui représente une ligne élargie. En outre, un nuanceur de géométrie peut utiliser les sommets de ligne adjacents (AV0 et AV1) pour effectuer des mitrissements sur les points de terminaison de ligne.
Génération de fourrure/fin : rendu de plusieurs décalages potentiellement avec différentes textures (visages extrudés) pour simuler les effets parallactiques de la fourrure. Les nageoires sont des bords extrudés qui disparaissent souvent si l’angle n’est pas oblique. Les nageoires sont utilisées pour améliorer l’apparence des objets aux angles obliques.
Génération de volumes d’ombres : informations d’adjudance utilisées pour déterminer s’il faut extruder.
Passage unique du rendu à plusieurs faces de cube de texture : les primitives sont projetées et émises dans un nuanceur de pixels six fois. Chaque primitive est accompagnée d’un index de tableau de cible de rendu, qui sélectionne une face de cube.
Configurez des coordonnées barycentriques en tant que données primitives afin que le nuanceur de pixels puisse effectuer une interpolation d’attribut personnalisée.
Un cas pathologique : une application génère une certaine géométrie, puis n-patche cette géométrie, puis extrude des volumes d’ombres de cette géométrie. Dans ce cas, le multi-passage est la solution qui permet de générer des données de vertex et primitives dans un flux et de faire circuler les données.
Étant donné que chaque appel au nuanceur de géométrie peut produire un nombre variable de sorties, les appels parallèles au matériel sont plus difficiles à ce stade que lors de l’exécution d’autres étapes de pipeline (par exemple, des étapes de vertex ou de nuanceur de pixels) en parallèle. Bien que les implémentations matérielles exécutent des appels de nuanceur de géométrie en parallèle, la mise en mémoire tampon complexe nécessaire pour accomplir des appels de nuanceur de géométrie parallèles signifie que les applications ne doivent pas exiger que le niveau de parallélisme réalisable à l’étape du nuanceur de géométrie soit aussi élevé que les autres étapes de pipeline. En d’autres termes, le nuanceur de géométrie peut devenir un goulot d’étranglement dans le pipeline en fonction de la charge du programme dont dispose le nuanceur de géométrie. Toutefois, l’objectif est que les algorithmes qui utilisent la fonctionnalité du nuanceur de géométrie s’exécutent toujours plus efficacement que l’application qui doit émuler le comportement sur un matériel qui n’est pas en mesure de générer une géométrie par programmation.
Le runtime Direct3D appelle les fonctions de pilote suivantes pour créer, configurer et détruire le nuanceur de géométrie :