Qu'est-ce qu'un tampon de pochoir?

26

Wikipedia indique qu'un tampon de pochoir est un tampon arbitraire qu'un shader peut utiliser.

Cependant, il suggère qu'il est utilisé pour l'écrêtage, ou autrement "lier étroitement" les tampons de profondeur et de pixels, se contredisant légèrement.

Que fait vraiment le tampon de gabarit et comment est-il pratiquement utilisé dans les applications modernes?

Qix
la source

Réponses:

31

La définition du tampon de pochoir par Wikipedia n'est en effet pas excellente, elle se concentre trop sur les détails des implémentations modernes (OpenGL). Je trouve la version sans ambiguïté plus facile à comprendre:

Un pochoir est un modèle utilisé pour dessiner ou peindre des lettres, des symboles, des formes ou des motifs identiques à chaque fois qu'il est utilisé. Le dessin produit par un tel modèle est également appelé pochoir.

C'est ce que signifiait le pochoir avant l'infographie. Si vous tapez pochoir sur Google Images, c'est l'un des premiers résultats:

Masque au pochoir

Comme vous pouvez le voir, c'est simplement un masque ou un motif qui peut être utilisé pour «peindre» le négatif du motif sur quelque chose.

Le tampon de gabarit fonctionne exactement de la même manière. On peut remplir le tampon de gabarit avec un motif sélectionné en effectuant une passe de rendu de gabarit, puis définir la fonction de gabarit appropriée qui définira la façon dont le motif doit être interprété sur les dessins suivants, puis rendre la scène finale. Les pixels qui tombent dans les zones rejetées du masque de pochoir, selon la fonction de comparaison, ne sont pas dessinés.


Lorsqu'il s'agit d'implémenter le tampon de gabarit, il est parfois en effet couplé au tampon de profondeur. La plupart du matériel graphique utilise un tampon de gabarit de 1 octet (8 bits), ce qui est suffisant pour la plupart des applications. Les tampons de profondeur sont généralement implémentés en utilisant 3 octets (24 bits), ce qui est normalement suffisant pour la plupart des types de rendu 3D. Il est donc logique de regrouper les 8 bits du tampon de gabarit avec les 24 autres du tampon de profondeur, ce qui permet de stocker chaque pixel profondeur + gabarit dans un entier de 32 bits. C'est ce que Wikipédia voulait dire par:

Le tampon de profondeur et le tampon de gabarit partagent souvent la même zone dans la RAM du matériel graphique.


Une application dans laquelle le tampon de gabarit était roi était pour le rendu des ombres, dans une technique appelée volumes d'ombres , ou parfois aussi convenablement appelées ombres de pochoirs . C'était une utilisation très intelligente du tampon, mais de nos jours, la plupart du champ de rendu semble s'être déplacé vers des cartes d'ombre basées sur la profondeur.

glampert
la source
C'est un personnage, mais cleaver-> clever. Je ne peux pas le modifier D: Excellente réponse d'ailleurs, cela a le plus de sens jusqu'à présent.
Qix
3
Si vous avez un shader par pixel coûteux, le tampon de pochoir peut également être utilisé pour regrouper des threads similaires, en réduisant les divergences et en augmentant l'occupation comme dans cet article OIT, section 2.6 (avertissement: je suis un auteur).
jozxyqk
@jozxyqk, c'est un peu hors des sentiers battus en pensant juste là! Très agréable.
glampert
13

Le tampon de gabarit est un tampon d'entier non signé, généralement de 8 bits de nos jours, où vous pouvez remplir les informations par pixel comme vous le souhaitez en fonction de l'utilisation de diverses opérations ( OpenGL Ops ici par exemple ) après un test de gabarit.

Le test de gabarit est simplement une opération par pixel dans laquelle la valeur de gabarit de pixel actuelle est testée par rapport au contenu du tampon de gabarit. Vous définissez la condition à laquelle le test de gabarit est réussi (par exemple TOUJOURS, MOINS, etc.).

Vous pouvez décider de ce qui arrive à la valeur du gabarit en fonction du résultat du test (dans OpenGL en utilisant l'opération que je vous ai liée ci-dessus)

Le tampon de pochoir a plusieurs utilisations, les premières qui me viennent à l'esprit sont:

  • Il peut être utilisé comme masque pour rendre sélectivement certaines parties du tampon d'image et supprimer le reste. Ceci, par exemple, est utile pour les réflexions, mais aussi beaucoup plus. Lorsqu'il s'agit d'un rendu à plusieurs résolutions, il peut être utilisé pour marquer les bords qui doivent être rendus à une résolution plus élevée. Il y a vraiment beaucoup d'utilisations de masquage.
  • Un filtre overdraw très simple par exemple. Vous pouvez définir le test de gabarit pour toujours réussir et incrémenter toujours la valeur. La valeur avec laquelle vous vous retrouvez dans le tampon de gabarit représente votre overdraw. [*]

Dans le passé, il a également été utilisé pour des techniques d'observation telles que le volume de l'ombre.

Le pauvre tampon de pochoir est souvent assez sous-estimé, mais peut être une bonne arme dans l'armurerie d'un programmeur graphique.

[*] Valeur à relire dans un post-processus en utilisant le bon SRV!

EDIT: Il convient également de mentionner que dans Shader Model 5.1 (donc D3D11.3 et D3D12), vous avez accès à la valeur de référence du pochoir via SV_StencilRef

cifz
la source
6

Un tampon de gabarit contient des données entières par pixel qui sont utilisées pour ajouter plus de contrôle sur les pixels qui sont rendus.

Un tampon de gabarit fonctionne de manière similaire à un tampon de profondeur. De même, ces données de gabarit sont stockées dans un tampon de profondeur. Alors que les données de profondeur déterminent le pixel le plus proche de la caméra, les données de gabarit peuvent être utilisées comme un masque par pixel plus général pour enregistrer ou supprimer les pixels. Pour créer le masque, utilisez une fonction de gabarit pour comparer une valeur de gabarit de référence - une valeur globale - à la valeur du tampon de gabarit chaque fois qu'un pixel est rendu.

Source: Qu'est-ce qu'un tampon de pochoir? | Réseau de développeurs Microsoft

L'idée générale est que vous pouvez définir une valeur pour chaque pixel, puis régler le fonctionnement ( GREATER, SMALLER, EQUALetc.), lorsque cette valeur True pixel est ombrées et représentés.

Une application est la réflexion en temps réel, lors du rendu de la texture de réflexion, le tampon de gabarit est utilisé pour créer un masque pour l'endroit où la réflexion est appliquée. Par exemple, n'appliquez la réflexion qu'aux triangles ombrés en verre. Il peut également être utilisé pour créer des masques bidimensionnels arbitraires pour l'ensemble du framebuffer.

Maurice Laveaux
la source