Búferes de profundidad
Un búfer de profundidad, o z-buffer, almacena información de profundidad para controlar qué áreas de polígonos se representan en lugar de ocultarse de la vista.
Información general
Un búfer de profundidad, a menudo denominado z-buffer o w-buffer, es una propiedad del dispositivo que almacena información de profundidad que Debe usar Direct3D. Cuando Direct3D representa una escena en una superficie de destino, puede usar la memoria en una superficie de búfer de profundidad asociada como un área de trabajo para determinar cómo los píxeles de los polígonos rasterizados se ocluyó entre sí. Direct3D usa una superficie direct3D fuera de pantalla como destino al que se escriben los valores de color finales. La superficie del búfer de profundidad asociada a la superficie de destino de representación se usa para almacenar información de profundidad que indica a Direct3D la profundidad de cada píxel visible en la escena.
Cuando una escena se rasteriza con el almacenamiento en búfer de profundidad habilitado, se prueba cada punto de la superficie de representación. Los valores del búfer de profundidad pueden ser la coordenada z de un punto o su coordenada w homogénea, desde la ubicación del punto (x,y,z,w) en el espacio de proyección. Un búfer de profundidad que usa valores z se suele denominar z-buffer y uno que usa valores w se denomina w-buffer. Cada tipo de búfer de profundidad tiene ventajas y desventajas, que se describen más adelante.
Al principio de la prueba, el valor de profundidad del búfer de profundidad se establece en el valor más grande posible para la escena. El valor de color de la superficie de representación se establece en el valor de color de fondo o en el valor de color de la textura de fondo en ese momento. Cada polígono de la escena se prueba para ver si se interseca con la coordenada actual (x,y) en la superficie de representación.
Si se interseca, se comprueba el valor de profundidad , que será la coordenada z en un búfer z y la coordenada w de un búfer w en el punto actual para ver si es menor que el valor de profundidad almacenado en el búfer de profundidad. Si la profundidad del valor del polígono es menor, se almacena en el búfer de profundidad y el valor de color del polígono se escribe en el punto actual de la superficie de representación. Si el valor de profundidad del polígono en ese punto es mayor, se prueba el siguiente polígono de la lista. Este proceso se muestra en el diagrama siguiente.
Técnicas de almacenamiento en búfer
Aunque la mayoría de las aplicaciones no usan esta característica, puede cambiar la comparación que Usa Direct3D para determinar qué valores se colocan en el búfer de profundidad y, posteriormente, la superficie de destino de representación. En algún hardware, cambiar la función compare puede deshabilitar las pruebas jerárquicas z.
Casi todos los aceleradores del mercado admiten el almacenamiento en búfer z, lo que hace que z-buffers sea el tipo de búfer de profundidad más común hoy en día. Sin embargo, los z-buffer tienen sus inconvenientes. Debido a las matemáticas implicadas, los valores z generados en un búfer z tienden a no distribuirse uniformemente en el intervalo de búfer z (normalmente de 0,0 a 1,0, ambos incluidos).
En concreto, la relación entre los planos de recorte lejano y cercano afecta fuertemente a la distribución desigual de los valores z. Con una distancia de plano lejano a una relación de distancia de plano cercano del 100, el 90 por ciento del intervalo de búfer de profundidad se invierte en el primer 10 por ciento del intervalo de profundidad de la escena. Las aplicaciones típicas para simulaciones visuales o de entretenimiento con escenas exteriores suelen requerir relaciones de plano lejano o casi plano entre 1000 y 10 000. En una proporción de 1000, el 98 por ciento del intervalo se invierte en el primer 2 por ciento del intervalo de profundidad, y la distribución se vuelve peor con mayores proporciones. Esto puede provocar artefactos de superficie ocultos en objetos lejanos, especialmente cuando se usan búferes de profundidad de 16 bits, la profundidad de bits más compatible con más frecuencia.
Por otro lado, un búfer de profundidad basado en w se distribuye más uniformemente entre los planos de clip cercanos y lejanos que un búfer z. La ventaja clave es que la relación de distancias de los planos de recorte lejano y cercano ya no es un problema. Esto permite a las aplicaciones admitir grandes intervalos máximos, al tiempo que se sigue obteniendo un almacenamiento en búfer de profundidad relativamente preciso cerca del punto de vista. Un búfer de profundidad basado en w no es perfecto y a veces puede mostrar artefactos de superficie ocultos para objetos cercanos. Otro inconveniente del enfoque almacenado en búfer w está relacionado con la compatibilidad con hardware: el almacenamiento en búfer w no se admite tan ampliamente en hardware como z-buffering.
El uso de un búfer z requiere sobrecarga durante la representación. Se pueden usar varias técnicas para optimizar la representación cuando se usan búferes z. Las aplicaciones pueden aumentar el rendimiento al usar z-buffering y texturing asegurándose de que las escenas se representan de delante a atrás. Los primitivos con búfer z con textura se prueban previamente con el búfer z en una línea de examen. Si un polígono representado anteriormente oculta una línea de examen, el sistema lo rechaza de forma rápida y eficaz. El almacenamiento en búfer Z puede mejorar el rendimiento, pero la técnica es más útil cuando una escena dibuja los mismos píxeles más de una vez. Esto es difícil de calcular exactamente, pero a menudo puede realizar una aproximación cercana. Si los mismos píxeles se dibujan menos de dos veces, puede lograr el mejor rendimiento desactivando el almacenamiento en búfer z y representando la escena de vuelta a delante.
La interpretación real de un valor de profundidad es específica del representador.
Temas relacionados
Búferes de profundidad y de galerías de símbolos