Partager via


Configuration de la fonctionnalité de profondeur-gabarit

Cette section décrit les étapes de configuration de la mémoire tampon du gabarit de profondeur et de l’état du gabarit de profondeur pour l’étape de fusion de sortie.

Une fois que vous savez comment utiliser la mémoire tampon de profondeur-gabarit et l’état de profondeur-gabarit correspondant, reportez-vous aux techniques avancées de gabarit.

Créer un état de profondeur-gabarit

L’état du gabarit de profondeur indique à l’étape de fusion de sortie comment effectuer le test de profondeur-gabarit. Le test de profondeur-gabarit détermine si un pixel donné doit être dessiné ou non.

Lier des données de profondeur et de gabarit à l’étape om

Lier l’état du gabarit de profondeur.

Lier la ressource de gabarit de profondeur à l’aide d’une vue.

Les cibles de rendu doivent toutes être du même type de ressource. Si l’anticrénelage multisample est utilisé, toutes les cibles de rendu liées et les mémoires tampons de profondeur doivent avoir le même nombre d’échantillons.

Lorsqu’une mémoire tampon est utilisée comme cible de rendu, les tests de profondeur-gabarit et plusieurs cibles de rendu ne sont pas prises en charge.

  • Autant que 8 cibles de rendu peuvent être liées simultanément.
  • Toutes les cibles de rendu doivent avoir la même taille dans toutes les dimensions (largeur et hauteur, et profondeur pour la taille de tableau ou 3D pour les types *Array).
  • Chaque cible de rendu peut avoir un format de données différent.
  • Écrire des masques contrôlent les données écrites dans une cible de rendu. Le contrôle de masque d’écriture de sortie sur une cible par rendu, au niveau par composant, des données écrites dans la ou les cibles de rendu.

Techniques avancées de gabarit

La partie gabarit de la mémoire tampon de gabarit de profondeur peut être utilisée pour créer des effets de rendu tels que la composition, la mise à l’échelle et le plan.

Compostage

Votre application peut utiliser le tampon stencil buffer pour composite des images 2D ou 3D sur une scène 3D. Un masque dans la mémoire tampon de gabarit est utilisé pour masquer une zone de la surface cible de rendu. Les informations 2D stockées, telles que du texte ou des bitmaps, peuvent ensuite être écrites dans la zone bloquée. Vous pouvez également afficher des primitives 3D supplémentaires dans la région masquée par gabarit de la surface cible de rendu. Elle peut même restituer une scène entière.

Les jeux composent souvent plusieurs scènes 3D ensemble. Par exemple, les jeux de conduite affichent généralement une vue arrière miroir. La miroir contient la vue de la scène 3D derrière le pilote. Il s’agit essentiellement d’une deuxième scène 3D composite avec la vue avant du pilote.

Mise à l’échelle

Les applications Direct3D utilisent la mise à l’échelle pour contrôler quels pixels d’une image primitive particulière sont dessinés vers l’aire cible de rendu. Les applications appliquent des décalcomanies aux images de primitives pour permettre aux polygones coplanaires de s’afficher correctement.

Par exemple, lors de l’application de marques de pneus et de lignes jaunes à une route, les marquages doivent apparaître directement au-dessus de la route. Toutefois, les valeurs z des marquages et de la route sont identiques. Par conséquent, la mémoire tampon de profondeur peut ne pas produire de séparation propre entre les deux. Certains pixels de la primitive arrière peuvent être rendus sur la primitive avant et vice versa. L’image résultante semble scintiller du cadre au cadre. Cet effet est appelé z-fighting ou scintillement.

Pour résoudre ce problème, utilisez un gabarit pour masquer la section de la primitive arrière où la décalcomanie s’affiche. Désactivez la mise en mémoire tampon z et affichez l’image de la primitive frontale dans la zone masquée de la surface cible de rendu.

Plusieurs fusions de textures peuvent être utilisées pour résoudre ce problème.

Contours et silhouettes

Vous pouvez utiliser le tampon stencil buffer pour des effets plus abstraits, tels que la structure et la définition de la silhouette.

Si votre application effectue deux passes de rendu : une pour générer le masque de gabarit et la seconde pour appliquer le masque de gabarit à l’image, mais avec les primitives légèrement plus petites sur la deuxième passe, l’image résultante contiendra uniquement le contour de la primitive. L’application peut ensuite remplir la zone masquée par gabarit de l’image avec une couleur unie, ce qui donne à la primitive une apparence en relief.

Si le masque de gabarit est de la même taille et de la même forme que la primitive que vous affichez, l’image résultante contient un trou où la primitive doit être. Votre application peut ensuite remplir l’espace avec du noir pour produire une silhouette de la primitive.

Gabarit à deux côtés

Les volumes d’ombres sont utilisés pour dessiner des ombres avec le tampon stencil buffer. L’application calcule les volumes d’ombre projetés par la géométrie d’obturation, en calculant les bords de silhouette et en les extrudant de la lumière en un ensemble de volumes 3D. Ces volumes sont ensuite rendus deux fois dans le tampon stencil buffer.

Le premier rendu dessine des polygones vers l’avant et incrémente les valeurs de tampon stencil buffer. Le deuxième rendu dessine les polygones arrière du volume d’ombre et décrémente les valeurs du tampon stencil buffer.

Normalement, toutes les valeurs incrémentées et décrémentées s’annulent. Toutefois, la scène a déjà été rendue avec une géométrie normale, ce qui entraîne l’échec du test de mémoire tampon z lorsque le volume de l’ombre est affiché. Les valeurs laissées dans le tampon stencil buffer correspondent aux pixels qui se trouvent dans l’ombre. Ces autres contenus de tampon stencil buffer sont utilisés comme masque, pour fusionner un quad noir large et englobant dans la scène. Avec le tampon stencil buffer agissant en tant que masque, le résultat consiste à assombrir les pixels qui se trouvent dans les ombres.

Cela signifie que la géométrie de l’ombre est dessinée deux fois par source de lumière, ce qui entraîne une pression sur le débit de vertex du GPU. La fonctionnalité de gabarit à deux côtés a été conçue pour prévenir cette situation. Dans cette approche, il existe deux ensembles d’états de gabarit (nommés ci-dessous), un ensemble pour les triangles frontaux et l’autre pour les triangles arrières. De cette façon, une seule passe est dessinée par volume d’ombre, par lumière.

Lecture de la mémoire tampon de profondeur-gabarit en tant que texture

Une mémoire tampon de profondeur inactive peut être lue par un nuanceur sous forme de texture. Une application qui lit une mémoire tampon de profondeur de gabarit en tant que texture est restituée en deux passes, la première passe les écritures dans la mémoire tampon de profondeur-gabarit et la deuxième passe lit à partir de la mémoire tampon. Cela permet à un nuanceur de comparer les valeurs de profondeur ou de gabarit précédemment écrites dans la mémoire tampon par rapport à la valeur du pixel en cours de rendu. Le résultat de la comparaison peut être utilisé pour créer des effets tels que le mappage d’ombres ou les particules douces dans un système de particules.

Étape de fusion de sortie (OM)

Pipeline graphique

Étape de fusion de sortie