Z-búfer

El búfer Z  es una forma en gráficos 3D por computadora de tener en cuenta la distancia de un elemento de imagen . Es una de las soluciones al "problema de la visibilidad". Muy eficiente y prácticamente no tiene inconvenientes cuando se implementa en hardware . Programáticamente, hay otros métodos que pueden competir con él: Z-sort ("algoritmo del artista") y partición de espacio binario (BSP), pero también tienen sus ventajas y desventajas. La principal desventaja del Z-buffering es el consumo de una gran cantidad de memoria : en el trabajo se utiliza el llamado deep buffer o Z-buffer .

El búfer Z es una matriz bidimensional , cada elemento del cual corresponde a un píxel en la pantalla. Cuando una tarjeta de video dibuja un píxel, su distancia se calcula y se escribe en la celda Z-buffer. Si los píxeles de dos objetos dibujados se superponen, se comparan sus valores de profundidad, se dibuja el que está más cerca y su valor de distancia se almacena en el búfer. La imagen gráfica resultante se denomina mapa de profundidad z , que es una imagen gráfica en escala de grises , cada píxel puede tomar hasta 256 valores de gris. Determinan la distancia desde el espectador de un objeto de una escena tridimensional. El mapa se usa ampliamente en el procesamiento posterior para agregar volumen y realismo y crea efectos como profundidad de campo , neblina atmosférica , etc. El mapa también se usa en paquetes 3D para texturizar , haciendo que la superficie esté en relieve.

A continuación se muestra el resultado de usar las dos tarjetas juntas. Aquí, el segundo mapa está tomado de una escena en la que el primero actuaba como una textura que extruía la superficie.

Mapa 1 Mapa 2 Resultado

La profundidad de bits del búfer de profundidad tiene un fuerte efecto en la calidad de representación: el uso de un búfer de 16 bits puede generar distorsiones geométricas, como un efecto de "lucha libre", si dos objetos están cerca uno del otro. Los búferes de 24 y 32 bits hacen bien su trabajo. Los 8 bits casi nunca se usan debido a la baja precisión.

Edwin Catmull suele ser considerado el inventor del z-buffer , aunque esta idea fue descrita por Wolfgang Strasser en su disertación (1974).

Opciones

En el búfer Z en su forma clásica, la cuadrícula de bits del búfer no es lo suficientemente precisa a distancias cortas. Para solucionar este problema se utiliza un w-buffer , en el que no se utiliza la lejanía, sino su recíproco ( ). Cuál es mejor usar, z-buffer o w-buffer, depende del programa.

En los adaptadores de video modernos, trabajar con un z-buffer ocupa una gran parte del ancho de banda de la memoria RAM del adaptador de video . Para combatir esto, se utiliza la compresión sin pérdidas : la compresión/recuperación requiere menos recursos que el acceso a la memoria.

Al comienzo del cuadro, el búfer se llena con algún número (por ejemplo, el número 1.0). También requiere algo de tiempo de máquina, por lo que a menudo se hace de esta manera: el primer búfer de fotogramas se ajusta para que la profundidad de los objetos cercanos sea 0,0 y los objetos lejanos sean 0,5. El segundo marco es de 1.0 a 0.5. Esto reduce la precisión en 1 bit, pero elimina el vaciado del búfer.

Z-buffer y clasificación

Aunque el búfer Z está diseñado específicamente para prescindir de la clasificación de caras visibles, la velocidad del búfer Z depende en gran medida de la clasificación de objetos. Por lo tanto, el motor debe clasificar los objetos al menos aproximadamente de lejos a cerca.

Conflicto Z

Si dos objetos tienen una coordenada Z cercana, a veces, dependiendo del punto de vista, se muestra uno, luego el otro, luego ambos se muestran en un patrón de rayas. Esto se llama el conflicto Z ( ing.  Z Fighting ). La mayoría de las veces, los conflictos son inherentes a los efectos especiales (calcomanías) que se superponen a la textura principal, por ejemplo, agujeros de bala.

Los conflictos Z se resuelven desplazando un objeto con respecto a otro en un valor que exceda el error del búfer Z.