Z-búfer


Un búfer de profundidad , también conocido como búfer z , es un tipo de búfer de datos utilizado en gráficos por computadora para representar información de profundidad de objetos en el espacio 3D desde una perspectiva particular . Los búferes de profundidad son una ayuda para renderizar una escena para garantizar que los polígonos correctos ocluyan correctamente otros polígonos. El búfer Z fue descrito por primera vez en 1974 por Wolfgang Straßer en su tesis doctoral sobre algoritmos rápidos para renderizar objetos ocluidos. [1] Una solución similar para determinar polígonos superpuestos es el algoritmo del pintor., que es capaz de manejar elementos de escena no opacos, aunque a costa de la eficiencia y resultados incorrectos.

En una tubería de representación 3D , cuando se proyecta un objeto en la pantalla, la profundidad (valor z) de un fragmento generado en la imagen de la pantalla proyectada se compara con el valor ya almacenado en el búfer ( prueba de profundidad ) y lo reemplaza si el nuevo valor es más cercano. Funciona junto con el rasterizador , que calcula los valores coloreados. El fragmento generado por el rasterizador se guarda si no se superpone con otro fragmento.

Al ver una imagen que contiene superficies o objetos opacos parcial o totalmente superpuestos, no es posible ver completamente aquellos objetos que están más alejados del espectador y detrás de otros objetos (es decir, algunas superficies están ocultas detrás de otras). Si no hubiera un mecanismo para administrar superficies superpuestas, las superficies se renderizarían una encima de la otra, sin importar si están destinadas a estar detrás de otros objetos. La identificación y eliminación de estas superficies se denomina problema de la superficie oculta.. Para verificar la superposición, la computadora calcula el valor z de un píxel correspondiente al primer objeto y lo compara con el valor z en la misma ubicación de píxel en el búfer z. Si el valor z calculado es más pequeño que el valor z que ya está en el búfer z (es decir, el nuevo píxel está más cerca), entonces el valor z actual en el búfer z se reemplaza con el valor calculado. Esto se repite para todos los objetos y superficies de la escena (a menudo en paralelo ). Al final, el z-buffer permitirá la reproducción correcta de la percepción de profundidad habitual: un objeto cercano oculta otro más lejano. Esto se llama z-culling .

El búfer z tiene la misma estructura de datos interna que una imagen, es decir, una matriz 2d, con la única diferencia de que almacena un solo valor para cada píxel de la pantalla en lugar de imágenes en color que usan 3 valores para crear color. Esto hace que el búfer z aparezca en blanco y negro porque no almacena información de color. El búfer tiene las mismas dimensiones que el búfer de pantalla para mantener la coherencia.

Las pruebas de visibilidad primarias (como la selección de la cara posterior ) y las pruebas de visibilidad secundarias (como las comprobaciones de superposición y el recorte de pantalla) generalmente se realizan en los polígonos de los objetos para omitir polígonos específicos que no son necesarios para renderizar. El búfer Z, en comparación, es comparativamente caro , por lo que realizar pruebas de visibilidad primaria y secundaria libera al búfer z de algunas tareas.

La granularidad de un z-buffer tiene una gran influencia en la calidad de la escena: el z-buffer tradicional de 16 bits puede generar artefactos (llamados " z-fighting " o unión ) cuando dos objetos están muy cerca uno del otro. Un z-buffer más moderno de 24 o 32 bits se comporta mucho mejor, aunque el problema no se puede eliminar sin algoritmos adicionales. Un z-buffer de 8 bits casi nunca se usa porque tiene muy poca precisión.


Datos de búfer Z