Rastérisation conservatrice Direct3D 11.3
La rastérisation conservatrice ajoute une certaine certitude au rendu de pixels, ce qui est utile en particulier pour les algorithmes de détection de collision.
- Vue d’ensemble
- interactions avec le pipeline
- Détails de l’implémentation
- résumé de l’API
- rubriques connexes
Aperçu
La rastérisation conservatrice signifie que tous les pixels qui sont au moins partiellement couverts par une primitive rendue sont raté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 certitude dans la détection de collision, le culage d’occlusion et la détection de 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 » : région où les erreurs d’arrondi et d’autres problèmes ajoutent une certaine incertitude aux dimensions exactes du triangle. Les triangles rouges à chaque sommet montrent 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 les pixels rendus à l’aide de la « règle supérieure 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’ont pas dû être) que le système va normalement, mais pas toujours cull.
Interactions avec le pipeline
Pour plus d’informations sur la façon dont la rastérisation conservatrice interagit avec le pipeline graphique, reportez-vous à ratérisation conservatrice D3D12.
Détails de l’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 une primitive rendue sont rastérisés. Les informations de rastérisation conservatrice sous-estimées sont disponibles via le nuanceur de pixels par le biais de l’utilisation des données de couverture d’entrée, et seule la rastérisation conservatrice surestimée est disponible en mode de rastérisation.
Si une partie d’une primitive chevauche un pixel, ce pixel est considéré comme couvert, puis ratérisé. Lorsqu’un bord ou un angle d’une primitive tombe le long du bord ou de l’angle d’un pixel, l’application de la « règle en haut à 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 angle 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 la croissance primitive ou l’alignement d’erreurs inhérentes aux coordonnées de vertex à point fixe utilisées dans la rastérisation. La raison pour laquelle les faux positifs (par rapport aux coordonnées de vertex à point fixe) sont valides, car une quantité de faux positifs est nécessaire pour permettre une implémentation d’effectuer une évaluation de couverture par rapport aux sommets post-alignés (c’est-à-dire les coordonnées de vertex qui ont été converties de virgule flottante au point fixe 16,8 utilisé dans le rastériseur), mais respectez 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-alignement non dégénérées : si une partie d’une primitive chevauche une partie d’un pixel, ce pixel est ratérisé.
Triangles dégénérés (indices dupliqués dans une mémoire tampon d’index ou colline en 3D) ou deviennent dégénérés après la conversion à point fixe (sommets collineaires dans le rastériseur), peuvent ou ne pas être abattus ; les deux sont des comportements valides. Les triangles dégénérés doivent être considérés comme étant orientés vers l’arrière. Par conséquent, si un comportement spécifique est requis par une application, il peut utiliser le culage back-face ou le test pour l’avant. Les triangles dégénérés utilisent les valeurs attribuées au sommet 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 pixels et aucune dégénérée post-alignement. Cela est utile pour le rendu en mosaïque, un atlas de texture, une génération de carte légère et des cartes d’ombre de sous-pixels.
- Le niveau 2 ajoute des dégénérés post-alignements et des régions d’incertitude 1/256. Il ajoute également la prise en charge de l’accélération de l’algorithme basé sur le processeur (par exemple, voxelization).
- Le niveau 3 ajoute 1/512 régions d’incertitude, la couverture d’entrée interne et prend en charge le culage d’occlusion. La couverture d’entrée ajoute la nouvelle valeur
SV_InnerCoverage
au langage hlSL (High Level Shading Language). Il s’agit d’un entier scalaire 32 bits qui peut être spécifié lors de l’entrée d’un nuanceur de pixels et représente les informations de rastérisation conservatrice sous-estimées (autrement dit, si un pixel est garanti-to-be-entièrement couvert).
Résumé de l’API
Les méthodes, structures, énumérations et classes d’assistance suivantes font référence à la rastérisation conservatrice :
- D3D11_RASTERIZER_DESC2 : structure contenant la description du rastériseur, notant la classe d’assistance CD3D12_RASTERIZER_DESC2 pour la création de descriptions de rastériseur.
- D3D11_CONSERVATIVE_RASTERIZATION_MODE : valeurs d’énumération pour le mode (activé ou désactivé).
- D3D11_FEATURE_DATA_D3D11_OPTIONS2 : structure contenant le niveau de prise en charge.
- D3D11_CONSERVATIVE_RASTERIZATION_TIER : valeurs d’énumération pour chaque niveau de prise en charge par le matériel.
- ID3D11Device ::CheckFeatureSupport : méthode pour accéder aux fonctionnalités prises en charge.
Rubriques connexes
- fonctionnalités Direct3D 11.3