Rastérisation conservatrice de Direct3D 11.3

La rastérisation conservatrice ajoute une certaine certitude au rendu des pixels, ce qui est utile en particulier pour les algorithmes de détection de collision.

Vue d’ensemble

La rastérisation conservatrice signifie que tous les pixels qui sont au moins partiellement couverts par une primitive rendue sont rastérisés, ce qui signifie que le nuanceur de pixels est appelé. Le comportement normal est l’échantillonnage, qui n’est pas utilisé si la rastérisation conservatrice est activée.

La rastérisation conservatrice est utile dans un certain nombre de situations, notamment pour la détection de collision, l’élimination de l’occlusion et la détection de la visibilité.

Par exemple, la figure suivante montre un triangle vert rendu à l’aide d’une rastérisation conservatrice. La zone brune est connue sous le nom de « région d’incertitude », une région où les erreurs d’arrondi et d’autres problèmes ajoutent une certaine incertitude aux dimensions exactes du triangle. Les triangles rouges de chaque sommet indiquent comment la région d’incertitude est calculée. Les grands carrés gris affichent les pixels qui seront rendus. Les carrés roses affichent des pixels rendus à l’aide de la « règle en haut à gauche », qui entre en jeu lorsque le bord du triangle traverse le bord des pixels. Il peut y avoir des faux positifs (pixels définis qui n’auraient pas dû être) que le système éliminera normalement, mais pas toujours.

affiche la règle en haut à gauche

Interactions avec le pipeline

Pour plus d’informations sur la façon dont la rastérisation conservatrice interagit avec le pipeline graphique, reportez-vous à la rastérisation conservatrice D3D12.

Informations d’implémentation

Le type de rastérisation pris en charge dans Direct3D 12 est parfois appelé « rastérisation conservatrice surestimée ». Il existe également le concept de « rastérisation conservatrice sous-estimée », ce qui signifie que seuls les pixels entièrement couverts par un rendu primitif sont rastérisés. Les informations de rastérisation conservatrice sous-estimées sont disponibles via le nuanceur de pixels grâce à l’utilisation de données de couverture d’entrée, et seule la rastérisation conservatrice surestimée est disponible en mode rastérisant.

Si une partie d’une primitive chevauche un pixel, ce pixel est considéré comme couvert et est ensuite rastérisé. Lorsqu’un bord ou un coin d’une primitive tombe le long du bord ou de l’angle d’un pixel, l’application de la « règle supérieure gauche » est spécifique à l’implémentation. Toutefois, pour les implémentations qui prennent en charge les triangles dégénérés, un triangle dégénéré le long d’un bord ou d’un coin doit couvrir au moins un pixel.

Les implémentations de rastérisation conservatrices peuvent varier sur différents matériels et produire des faux positifs, ce qui signifie qu’elles peuvent décider incorrectement que les pixels sont couverts. Cela peut se produire en raison de détails spécifiques à l’implémentation, tels que les erreurs de croissance primitive ou d’alignement inhérentes aux coordonnées de vertex à point fixe utilisées dans la rastérisation. La raison pour laquelle les faux positifs (en ce qui concerne les coordonnées de vertex à point fixe) sont valides parce qu’une certaine quantité de faux positifs est nécessaire pour permettre à une implémentation d’effectuer une évaluation de la couverture par rapport aux sommets post-snaped (c’est-à-dire les coordonnées de vertex qui ont été converties du point flottant au point fixe 16,8 utilisé dans le rastériseur), mais respectent la couverture produite par les coordonnées de vertex à virgule flottante d’origine.

Les implémentations de rastérisation conservatrices ne produisent pas de faux négatifs par rapport aux coordonnées de vertex à virgule flottante pour les primitives post-snap non dégénérées : si une partie d’une primitive chevauche une partie d’un pixel, ce pixel est rastérisé.

Les triangles qui sont dégénérés (doublons d’index dans une mémoire tampon d’index ou collinear en 3D), ou qui deviennent dégénérés après la conversion à point fixe (sommets collineaires dans le rastériseur), peuvent ou non être éliminés; les deux sont des comportements valides. Les triangles dégénérés doivent être considérés comme orientés vers l’arrière. Par conséquent, si un comportement spécifique est requis par une application, elle peut utiliser l’élimination de face arrière ou le test pour la face avant. Les triangles dégénérés utilisent les valeurs attribuées au Vertex 0 pour toutes les valeurs interpolées.

Il existe trois niveaux de prise en charge matérielle, en plus de la possibilité que le matériel ne prend pas en charge cette fonctionnalité.

  • Le niveau 1 prend en charge les régions d’incertitude de 1/2 pixel, et aucune dégénération post-snap ne dégénère. C’est utile pour le rendu en mosaïque, un atlas de texture, la génération de cartes claires et les cartes d’ombres de sous-pixels.
  • Le niveau 2 ajoute des dégénérations post-snap et 1/256 régions d’incertitude. Il ajoute également la prise en charge de l’accélération d’algorithme basée sur le processeur (par exemple, la voxelisation).
  • Le niveau 3 ajoute 1/512 régions d’incertitude, la couverture d’entrée interne et prend en charge l’élimination de l’occlusion. La couverture d’entrée ajoute la nouvelle valeur SV_InnerCoverage à HLSL (High Level Shading Language). Il s’agit d’un entier scalaire 32 bits qui peut être spécifié lors de l’entrée dans un nuanceur de pixels, et qui représente les informations de rastérisation conservatrice sous-estimées (autrement dit, si un pixel est garanti pour être entièrement couvert).

Résumé des API

Les méthodes, structures, énumérations et classes d’assistance suivantes font référence à la rastérisation conservatrice :