Búferes de galerías de símbolos
Un búfer de galería de símbolos se usa para enmascarar píxeles en una imagen, para producir efectos especiales. La máscara controla si el píxel se dibuja o no. Estos efectos especiales incluyen composición; calcado; disolución, atenuación y barrido; contornos y siluetas; y galería de símbolos a doble cara. A continuación se muestran algunos de los efectos más comunes.
El búfer de galería de símbolos habilita o deshabilita el dibujo en la superficie de destino de representación en una base de píxel a píxel. En su nivel más fundamental, permite a las aplicaciones enmascarar secciones de la imagen representada para que no se muestren. Las aplicaciones suelen usar búferes de galería de símbolos para efectos especiales, como disolución, calcado y contornos.
La información del búfer de galería de símbolos se inserta en los datos del búfer z.
Funcionamiento del búfer de galería de símbolos
Direct3D realiza una prueba sobre el contenido del búfer de galería de símbolos en una base de píxel a píxel. Para cada píxel de la superficie de destino, realiza una prueba con el valor correspondiente en el búfer de galería de símbolos, un valor de referencia de galería de símbolos y un valor de máscara de galería de símbolos. Si se supera la prueba, Direct3D realiza una acción. La prueba se realiza mediante los pasos siguientes.
- Realiza una operación AND bit a bit del valor de referencia de la galería de símbolos con la máscara de galería de símbolos.
- Realiza una operación AND bit a bit del valor de búfer de la galería de símbolos para el píxel actual con la máscara de galería de símbolos.
- Compara el resultado del paso 1 con el resultado del paso 2 mediante la función de comparación.
Los pasos anteriores se muestran en la siguiente línea de código:
(StencilRef & StencilMask) CompFunc (StencilBufferValue & StencilMask)
- StencilRef representa el valor de referencia de la galería de símbolos.
- StencilMask representa el valor de la máscara de la galería de símbolos.
- CompFunc es la función de comparación.
- StencilBufferValue es el contenido del búfer de la galería de símbolos para el píxel actual.
- El símbolo de la y comercial (&) representa la operación AND bit a bit.
El píxel actual se escribe en la superficie de destino si se supera la prueba de la galería de símbolos y de lo contrario se omite. El comportamiento de comparación predeterminado es escribir el píxel, independientemente de cómo se convierta cada operación bit a bit. Puedes cambiar este comportamiento cambiando el valor de un tipo enumerado para identificar la función de comparación deseada.
La aplicación puede personalizar el funcionamiento del búfer de la galería de símbolos. Puede establecer la función de comparación, la máscara de la galería de símbolos y el valor de referencia de la galería de símbolos. También puede controlar la acción que realiza Direct3D cuando la prueba de la galería de símbolos se supera o produce un error.
Composición
La aplicación puede usar el búfer de galería de símbolos para componer imágenes 2D o 3D en una escena 3D. Se usa una máscara en el búfer de galería de símbolos para ocluir un área de la superficie de destino de representación. La información almacenada en 2D, como texto o mapas de bits, se puede escribir en el área ocluida. Como alternativa, la aplicación puede representar primitivos en 3D adicionales en la región enmascarada de la galería de símbolos de la superficie de destino de representación. Incluso puede representar una escena completa.
Los juegos suelen componer varias escenas 3D juntas. Por ejemplo, los juegos de conducción suelen mostrar un espejo retrovisor. El reflejo contiene la vista de la escena 3D detrás del conductor. Básicamente, es una segunda escena 3D compuesta con la vista hacia delante del conductor.
Calcado
Las aplicaciones direct3D usan el calcado para controlar qué píxeles de una imagen primitiva determinada se dibujan en la superficie de destino de representación. Las aplicaciones aplican calcados a las imágenes de primitivos para permitir que los polígonos coplanares se representen correctamente.
Por ejemplo, al aplicar marcas de neumáticos y líneas amarillas a una carretera, las marcas deben aparecer directamente en la parte superior de la carretera. Sin embargo, los valores z de las marcas y la carretera son los mismos. Por lo tanto, es posible que el búfer de profundidad no genere una separación limpia entre los dos. Algunos píxeles del primitivo posterior se pueden representar en la parte superior del primitivo frontal y viceversa. La imagen resultante parece centellear de fotograma a fotograma. Este efecto se denomina z-fighting o flimmering.
Para resolver este problema, usa una galería de símbolos para enmascarar la sección del primitivo trasero donde aparecerá el calco. Desactiva el almacenamiento en búfer z y representa la imagen del primitivo frontal en el área enmascarada de la superficie de destino de representación.
Aunque se pueden usar varias mezclas de texturas para resolver este problema, hacerlo limita el número de otros efectos especiales que la aplicación puede producir. El uso del búfer de galería de símbolos para aplicar calcos libera etapas de mezcla de texturas para otros efectos.
Disolución, fundido y deslizamiento
Cada vez más, las aplicaciones emplean efectos especiales que se usan habitualmente en películas y vídeos, como disoluciones, deslizamientos y fundidos.
En una disolución, una imagen se reemplaza gradualmente por otra en una secuencia suave de fotogramas. Aunque Direct3D proporciona métodos de uso de mezcla de texturas múltiples para lograr el mismo efecto, las aplicaciones que usan el búfer de galería de símbolos para las disoluciones pueden usar funcionalidades de mezcla de texturas para otros efectos mientras realizan una disolución.
Cuando la aplicación realiza una disolución, debe representar dos imágenes diferentes. Usa el búfer de galería de símbolos para controlar qué píxeles de cada imagen se dibujan en la superficie de destino de representación. Puedes definir una serie de máscaras de galería de símbolos y copiarlas en el búfer de galería de símbolos en fotogramas sucesivos. Como alternativa, puedes definir una máscara de galería de símbolos de base para el primer fotograma y modificarla incrementalmente.
Al principio de la disolución, la aplicación establece la función de galería de símbolos y la máscara de galería de símbolos para que la mayoría de los píxeles de la imagen inicial superen la prueba de galería de símbolos. La mayoría de los píxeles de la imagen final deben producir un error en la prueba de galería de símbolos. En fotogramas sucesivos, la máscara de galería de símbolos se actualiza para que menos píxeles de la imagen inicial superen la prueba. A medida que progresan los fotogramas, menos y menos de los píxeles de la imagen final producen un error en la prueba. De esta manera, la aplicación puede realizar una disolución mediante cualquier patrón arbitrario de disolución.
El fundido de entrada o fundido de salida es un caso especial de disolución. Cuando se hace un fundido de entrada, el búfer de galería de símbolos se usa para disolver de una imagen en blanco o negro a una representación de una escena 3D. El fundido de salida es lo contrario: la aplicación comienza con una representación de una escena 3D y se disuelve a blanco o negro. El fundido se puede realizar mediante cualquier patrón arbitrario que se desee emplear.
Las aplicaciones de Direct3D usan una técnica similar para deslizamientos. Por ejemplo, cuando una aplicación realiza un deslizamiento de izquierda a derecha, la imagen final parece deslizarse gradualmente sobre la imagen inicial de izquierda a derecha. Como en una disolución, debes definir una serie de máscaras de la galería de símbolos que se cargan en el búfer de la galería de símbolos en fotogramas sucesivos o modificar sucesivamente la máscara de la galería de símbolos inicial. Las máscaras de la galería de símbolos se usan para deshabilitar la escritura de píxeles desde la imagen inicial y habilitar la escritura de píxeles desde la imagen final.
Un deslizamiento es algo más complejo que una disolución en el sentido de que la aplicación debe leer píxeles de la imagen final en el orden inverso del deslizamiento. Es decir, si el deslizamiento se mueve de izquierda a derecha, la aplicación debe leer píxeles de la imagen final de derecha a izquierda.
Contornos y siluetas
Puedes usar el búfer de la galería de símbolos para obtener efectos más abstractos, como contornos y siluetas.
Si la aplicación aplica una máscara de galería de símbolos a la imagen de un primitivo que tiene la misma forma pero ligeramente más pequeña, la imagen resultante solo contiene el contorno del primitivo. A continuación, la aplicación puede rellenar el área enmascarada de la galería de símbolos de la imagen con un color sólido, lo que proporciona al primitivo un aspecto en relieve.
Si la máscara de galería de símbolos tiene el mismo tamaño y forma que el primitivo que está representando, la imagen resultante contiene un agujero donde debería estar el primitivo. Tu aplicación puede rellenar el agujero con negro para producir una silueta del primitivo.
Galería de símbolos a doble cara
Los volúmenes de sombra se usan para dibujar sombras con el búfer de galería de símbolos. La aplicación calcula los volúmenes de sombra que se convierten al ocultar la geometría, calculando los bordes de la silueta y extruyéndolos lejos de la luz en un conjunto de volúmenes 3D. Estos volúmenes se representan dos veces en el búfer de la galería de símbolos.
La primera representación dibuja polígonos orientados hacia delante e incrementa los valores del búfer de la galería de símbolos. La segunda representación dibuja los polígonos orientados hacia atrás del volumen de sombras y disminuye los valores del búfer de la galería de símbolos. Normalmente, todos los valores incrementados y reducidos se cancelan entre sí. Sin embargo, la escena ya se ha representado con geometría normal, lo que provoca que algunos píxeles produzcan un error en la prueba del búfer z, ya que se representa el volumen de sombras. Los valores que quedan en el búfer de la galería de símbolos se corresponden a píxeles que están en la sombra. Estos contenidos restantes del búfer de la galería de símbolos se usan como máscara, para hacer una combinación alfa con un cuadrante negro grande y que abarca todo en la escena. Con el búfer de la galería de símbolos que actúa como máscara, el resultado es oscurecer píxeles que están en las sombras.
Esto significa que la geometría de sombra se dibuja dos veces por fuente de luz, lo que pone presión sobre el rendimiento de vértices de la GPU. La característica de la galería de símbolos a doble cara se ha diseñado para mitigar esta situación. En este enfoque, hay dos conjuntos de estado de galería de símbolos (denominados a continuación), un conjunto cada uno para los triángulos frontales y el otro para los triángulos orientados hacia atrás. De este modo, solo se dibuja un solo paso por volumen de sombras, por luz.
Temas relacionados
Búferes de profundidad y de galerías de símbolos