La definición del búfer de plantilla de Wikipedia no es realmente buena, se centra demasiado en los detalles de las implementaciones modernas (OpenGL). Encuentro la versión desambiguada más fácil de entender:
Una plantilla es una plantilla utilizada para dibujar o pintar letras, símbolos, formas o patrones idénticos cada vez que se usa. El diseño producido por dicha plantilla también se denomina plantilla.
Eso es lo que la plantilla significaba antes de Computer Graphics. Si escribe stencil en Google Images, este es uno de los primeros resultados:
Como puede ver, es simplemente una máscara o patrón que puede usarse para "pintar" lo negativo del patrón en algo.
El búfer de plantilla funciona exactamente de la misma manera. Se puede llenar el búfer de la plantilla con un patrón seleccionado haciendo un pase de representación de la plantilla, luego establecer la función de plantilla adecuada que definirá cómo se interpretará el patrón en los dibujos posteriores, y luego renderizar la escena final. Los píxeles que caen en las áreas rechazadas de la máscara de plantilla, de acuerdo con la función de comparación, no se dibujan.
Cuando se trata de implementar el búfer de stencil, a veces se combina con el búfer de profundidad. La mayoría del hardware de gráficos utiliza un búfer de plantilla de 1 byte (8 bits), que es suficiente para la mayoría de las aplicaciones. Los buffers de profundidad generalmente se implementan utilizando 3 bytes (24 bits), lo que nuevamente es suficiente para la mayoría de los tipos de renderizado 3D. Por lo tanto, es lógico empacar los 8 bits del búfer de plantilla con los otros 24 del búfer de profundidad, lo que permite almacenar cada píxel de profundidad + stencil en un entero de 32 bits. Eso es lo que Wikipedia quería decir con:
El búfer de profundidad y el búfer de plantilla a menudo comparten la misma área en la RAM del hardware de gráficos.
Una aplicación en la que el búfer de la plantilla solía ser el rey era para el renderizado de sombras, en una técnica llamada volúmenes de sombras , o en ocasiones también llamada sombras de plantillas . Este fue un uso muy inteligente del búfer, pero hoy en día la mayor parte del campo de representación parece haberse desplazado hacia mapas de sombras basados en la profundidad.
cleaver
->clever
. No puedo editarlo D: Gran respuesta por cierto, esto tiene más sentido hasta ahora.El búfer de stencil es un búfer de enteros sin signo, generalmente de 8 bits en la actualidad, donde puede completar la información por píxel como lo desee en función del uso de varias operaciones ( OpenGL Ops aquí, por ejemplo ) después de una prueba de stencil.
La prueba de galería de símbolos es simplemente una operación por píxel en la que el valor actual de galería de píxeles se prueba contra el contenido del búfer de galería de símbolos. Establece la condición a la que se pasa la prueba de plantilla (por ejemplo, SIEMPRE, MENOS, etc.).
Puede decidir qué sucede con el valor de la plantilla según el resultado de la prueba (en OpenGL usando la operación que lo vinculé anteriormente)
El búfer de plantilla tiene bastantes usos, los primeros que vienen a la mente son:
En el pasado se ha utilizado también para técnicas de sombreado como el volumen de sombra.
El pobre búfer de la plantilla a menudo se subestima bastante, pero puede ser una buena arma en el arsenal de un programador de gráficos.
[*] ¡Valor para ser leído en un post-proceso usando el SRV correcto!
EDITAR: Además, vale la pena mencionar que en Shader Model 5.1 (por lo tanto, D3D11.3 y D3D12) tiene acceso al valor de referencia de la plantilla a través de
SV_StencilRef
fuente
Fuente: ¿Qué es un búfer de plantilla? El | Red de desarrolladores de Microsoft
La idea general es que se puede establecer un valor para cada píxel y luego fijar la operación (
GREATER
,SMALLER
,EQUAL
etc.), cuando este se considera verdadero el píxel está sombreada y se muestran.Una aplicación es la reflexión en tiempo real, cuando se procesa la textura de reflexión, el búfer de plantilla se usa para crear una máscara para el lugar donde se aplica la reflexión. Por ejemplo, solo aplique el reflejo a los triángulos sombreados del material de vidrio. También se puede utilizar para crear máscaras bidimensionales arbitrarias para todo el framebuffer.
fuente