Búferes de profundidad (Direct3D 9)

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 Direct3D va a usar. Cuando Direct3D representa una escena en una superficie de destino, puede usar la memoria en una superficie de búfer de profundidad asociada como área de trabajo para determinar cómo los píxeles de los polígonos rasterizados se ocluyeran entre sí. Direct3D usa una superficie direct3D fuera de la pantalla como destino al que se escriben los valores de color finales. La superficie de 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 qué profundidad tiene 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 interseca con la coordenada actual (x,y) en la superficie de representación. Si es así, se prueba 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 en 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.

diagrama de los valores de profundidad de prueba

Nota

Aunque la mayoría de las aplicaciones no usan esta característica, puedes 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. Para ello, cambie el valor del D3DRS_ZFUNC estado de representación. En algún hardware, el cambio de 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 más común de búfer de profundidad hoy en día. Sin embargo, los búferes Z 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 cerca del plano de 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 el entretenimiento o las simulaciones visuales con escenas exteriores suelen requerir relaciones de plano lejano/casi plano de entre 1000 y 10 000. Con una proporción de 1.000, el 98 por ciento del intervalo se invierte en el primer 2 por ciento del intervalo de profundidad, y la distribución empeora con mayores proporciones. Esto puede provocar artefactos de superficie ocultos en objetos distantes, 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 intervalos máximos grandes, a la vez que se obtiene 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. Otra desventaja del enfoque almacenado en búfer w está relacionada con la compatibilidad con hardware: el almacenamiento en búfer w no se admite tan ampliamente en hardware como almacenamiento en búfer z.

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. Para obtener más información, consulte Rendimiento del búfer Z.

Nota

La interpretación real de un valor de profundidad es específica del representador.

 

En esta sección se presenta información sobre el uso de búferes de profundidad para la eliminación oculta de líneas y superficie oculta.

Representación de Direct3D