3 votes

Le stencil buffer est-il encore pertinent dans l'OpenGL moderne ?

Avec un ami, nous nous disputons depuis longtemps au sujet du tampon pour pochoir. En bref, je n'ai pas été capable de trouver une situation où le tampon de pochoir fournirait un avantage quelconque par rapport aux outils de pipeline programmables dans OpenGL 3.2+. Y a-t-il des utilisations possibles du stencil buffer dans l'OpenGL moderne ?

[EDIT]

Merci à tous pour vos contributions sur le sujet.

11voto

Andon M. Coleman Points 20258

Il est plus utile que jamais depuis que vous pouvez échantillonner des textures d'index de stencil à partir de shaders de fragment. On ne peut même pas dire que le tampon de pochoir ne fait pas partie du pipeline programmable.

Le tampon de profondeur est utilisé pour le simple rejet des fragments (succès/échec), ce que le tampon de stencil peut également faire, comme suggéré dans les commentaires. Cependant, la mémoire tampon du pochoir peut également accumuler des informations sur les résultats des tests sur plusieurs passages. Il existe toutes sortes d'applications logiques et de comptage, telles que la mesure de la complexité de la profondeur d'une scène, la géométrie constructive des solides, etc.

8voto

karyon Points 611

Pour ajouter un exemple récent à la réponse d'Andon, GTA V utilise le stencil buffer un peu comme un ID buffer pour marquer le personnage du joueur, les voitures, la végétation, etc.

Il utilise ensuite la mémoire tampon du pochoir pour, par exemple, appliquer la diffusion sous la surface uniquement au personnage ou l'exclure du flou de mouvement.

Voir le Étude graphique de GTA V (fortement recommandé, c'est une excellente lecture !)

Edit : bien sûr, vous pouvez le faire dans un logiciel. Mais on peut tout aussi bien faire de la rastérisation ou de la tessellation dans un logiciel... En fin de compte, c'est une question de performance, je pense. Avec depth24stencil8 vous avez un format supporté par le matériel, et le test de stencil est probablement plus rapide que de faire des discards dans le fragment shader.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X