DICCIONARIO · Z

Z-buffer

El Z-buffer es la zona de memoria de la tarjeta gráfica que guarda, para cada píxel de la imagen, la profundidad del objeto más cercano dibujado hasta ese momento. Gracias a él la GPU sabe qué tapa a qué en una escena 3D; su resolución (16, 24 o 32 bits) decide cuánta precisión de profundidad tienes.

Germán Gutiérrez Escrito por Germán Gutiérrez 7 min de lectura
Ficha rápida
Tipo
Búfer (matriz 2D) de memoria gráfica con un valor de profundidad por píxel
También llamado
Búfer de profundidad, depth buffer
Origen
1974: tesis doctorales de Wolfgang Straßer y de Edwin Catmull (Universidad de Utah)
Formatos habituales
16 bits, 24 bits (a menudo con 8 bits de stencil) y 32 bits en coma flotante
En WebGL
three.js pide por defecto un búfer de profundidad de al menos 16 bits

≡En resumen

  • El Z-buffer es una estructura de datos: una tabla con un número de profundidad por cada píxel de la pantalla.
  • Su tamaño coincide con la resolución de la imagen; a 1080p con 32 bits por píxel ocupa unos 8,3 MB.
  • La precisión no es uniforme: se concentra cerca de la cámara y se pierde rápidamente con la distancia.
  • Mover el plano cercano de la cámara hacia delante mejora la precisión mucho más que añadir bits.
  • El proceso que lo usa para decidir qué se ve se llama Z-buffering o prueba de profundidad.

01 ¿Qué es el Z-buffer?

Conviene separar dos ideas que en español se mezclan a menudo: el Z-buffer es el dato (la memoria) y el Z-buffering es el algoritmo que lo lee y lo actualiza mientras se dibuja cada triángulo. Esta entrada se centra en la estructura: qué guarda, cuánto ocupa y por qué su precisión es la fuente de tantos errores visuales.

Junto al búfer de color (lo que ves en pantalla), el Z-buffer es uno de los búferes básicos de cualquier motor 3D, desde un videojuego hasta un visor de productos en una web o una app de realidad aumentada.

02 Origen: Straßer, Catmull y el año 1974

La idea de guardar una profundidad por píxel se describió dos veces el mismo año. El alemán Wolfgang Straßer la incluyó en su tesis doctoral de 1974 sobre algoritmos rápidos para dibujar objetos ocultos, y meses después Edwin Catmull presentó en la Universidad de Utah su tesis A Subdivision Algorithm for Computer Display of Curved Surfaces, donde también aparecen el mapeado de texturas y los parches bicúbicos.

La invención se atribuye casi siempre a Catmull, en parte por la influencia posterior de su carrera: cofundó Pixar en 1986 y en 2019 recibió el Premio Turing, junto a Pat Hanrahan, por su trabajo pionero en imágenes generadas por ordenador.

03 Qué guarda el búfer de profundidad y cuánto ocupa

Cada celda guarda un número normalizado, normalmente entre 0 (plano cercano de la cámara) y 1 (plano lejano). Antes de dibujar un fotograma el búfer se «limpia» con el valor más lejano, para que cualquier superficie que aparezca después quede delante.

Su resolución es la misma que la del búfer de color, así que su tamaño crece con la pantalla. Con 4 bytes por píxel (24 bits de profundidad más 8 de stencil, el formato más común):

Resolución Píxeles Memoria del Z-buffer Con antialiasing MSAA 4x
1280 × 720 (HD) 921.600 ≈ 3,7 MB ≈ 14,7 MB
1920 × 1080 (Full HD) 2.073.600 ≈ 8,3 MB ≈ 33,2 MB
3840 × 2160 (4K) 8.294.400 ≈ 33,2 MB ≈ 132,7 MB
Memoria aproximada de un Z-buffer de 4 bytes por píxel (cálculo: ancho × alto × 4)
01

16 bits

65.536 niveles de profundidad. Ahorra memoria, pero en escenas grandes provoca parpadeos entre superficies cercanas. Se usa poco en 3D moderno.

02

24 bits + 8 de stencil

16,7 millones de niveles. Es el formato por defecto en la mayoría de GPU y navegadores; los 8 bits restantes sirven para máscaras (stencil).

03

32 bits en coma flotante

Más rango y, combinado con la técnica reverse-Z, una precisión casi uniforme en toda la escena. Habitual en motores de juego actuales.

04

8 bits

Existe en teoría, pero casi nunca se usa: 256 niveles son demasiado pocos para distinguir superficies.

04 Precisión del Z-buffer: por qué falla a lo lejos

En la proyección en perspectiva el valor que se guarda no es proporcional a la distancia real, sino a su inversa (1/z). El resultado es que la mayoría de los niveles disponibles se gastan en los primeros metros delante de la cámara y quedan muy pocos para el fondo. Por eso los errores de profundidad aparecen casi siempre en objetos lejanos.

Una estimación útil del error mínimo que el búfer puede distinguir a una distancia z, cuando el plano lejano está mucho más lejos que el cercano, es Δz ≈ z² / (n × 2^b), donde n es la distancia del plano cercano y b los bits del búfer.

Distancia del objeto 16 bits, cercano a 0,1 m 24 bits, cercano a 0,1 m 24 bits, cercano a 1 m
10 m ≈ 1,5 cm ≈ 0,06 mm ≈ 0,006 mm
100 m ≈ 1,5 m ≈ 6 mm ≈ 0,6 mm
1.000 m ≈ 150 m ≈ 60 cm ≈ 6 cm
Separación mínima distinguible según bits y plano cercano (estimación con Δz ≈ z² / (n × 2^b), unidades en metros)

05 Z-buffer, W-buffer, reverse-Z y búfer logarítmico

Como la precisión desigual es el gran punto débil del Z-buffer clásico, han surgido variantes que cambian qué número se guarda o cómo se reparte:

Variante Qué guarda Ventaja Inconveniente
Z-buffer clásico Profundidad proyectada (proporcional a 1/z) Estándar en todo el hardware Precisión muy concentrada cerca de la cámara
W-buffer Distancia real en el espacio de la cámara Precisión más uniforme Soporte de hardware limitado y hoy poco usado
Reverse-Z Profundidad invertida (cercano = 1, lejano = 0) en coma flotante de 32 bits Compensa la curva 1/z con la de los números flotantes: precisión casi uniforme Requiere búfer flotante y control del recorte (en WebGL, la extensión EXT_clip_control)
Búfer logarítmico Profundidad en escala logarítmica escrita desde el shader Escenas con escalas enormes (planetas, mapas) Desactiva optimizaciones como la prueba temprana de fragmentos
Variantes del búfer de profundidad

06 El Z-buffer en la web y en las apps

Si trabajas con WebGL, el búfer de profundidad se configura al crear el contexto. En three.js, la biblioteca de JavaScript más usada para 3D en navegador, el renderizador acepta tres opciones relacionadas: depth (activado por defecto, al menos 16 bits), logarithmicDepthBuffer y reversedDepthBuffer, ambas desactivadas por defecto.

En la práctica, un visor de producto, un recorrido virtual o un modelo capturado con un escáner 3D funcionan bien con el búfer por defecto si los planos de la cámara están bien ajustados. Cuando aparecen parpadeos, el origen suele ser una cámara con el plano cercano demasiado pegado.

Ejemplo · Caso típico en un proyecto web

Un visor 3D de una cocina con la cámara configurada con near = 0.01 y far = 10000 muestra la encimera «rayada» con el azulejo de detrás. Cambiando a near = 0.1 y far = 50, ajustados al tamaño real de la estancia, el problema desaparece sin tocar la geometría. Es el tipo de ajuste que se hace en cualquier proyecto de desarrollo web a medida con componentes 3D.

En móviles la memoria y el ancho de banda son más escasos, así que los motores nativos aprovechan técnicas como el Z-buffer jerárquico o descartar fragmentos ocultos antes de colorearlos. Si tu empresa de desarrollo de aplicaciones trabaja con 3D, pregunta cómo gestiona la profundidad en gamas bajas de Android.

07 Z-buffer vs Z-buffering vs stencil buffer

Término Qué es Pregunta que responde
Z-buffer Estructura de datos: memoria con una profundidad por píxel ¿A qué distancia está lo que se ve en este píxel?
Z-buffering Algoritmo o prueba de profundidad que usa el Z-buffer ¿Dibujo este fragmento o queda tapado?
Stencil buffer Búfer de máscara, a menudo compartiendo los 32 bits con el Z-buffer ¿Este píxel está dentro de la zona que quiero pintar?
Tres términos que se confunden

Preguntas frecuentes sobre Z-buffer

Es una tabla en la memoria de la tarjeta gráfica con un número de profundidad por píxel. Sirve para saber qué objeto está delante en cada punto de la imagen.

Se refiere al eje Z, el que apunta hacia el fondo de la escena, perpendicular a la pantalla. X e Y marcan la posición horizontal y vertical del píxel.

Lo habitual son 24 bits de profundidad (con 8 de stencil en la misma palabra de 32 bits). También existen formatos de 16 bits y de 32 bits en coma flotante.

Se atribuye a Edwin Catmull, que lo describió en su tesis de 1974 en la Universidad de Utah, aunque Wolfgang Straßer publicó la misma idea en su tesis unos meses antes.

Depende de la resolución: con 4 bytes por píxel, unos 8,3 MB a 1920 × 1080 y unos 33 MB en 4K, multiplicado por las muestras si usas antialiasing MSAA.

Porque en perspectiva guarda un valor proporcional a 1/z, que reparte casi todos los niveles cerca de la cámara. A lo lejos, dos superficies próximas acaban con el mismo valor.

El Z-buffer es la memoria donde se guardan las profundidades; el Z-buffering es el algoritmo que las compara para decidir qué se dibuja.

Fuentes consultadas

Germán Gutiérrez

Sobre el autor

Germán Gutiérrez

Development Manager en appyweb

Dirige el equipo de desarrollo de appyweb: aplicaciones web y móviles, SaaS, integraciones y arquitectura de software.

Ver perfil en LinkedIn ↗

Términos relacionados

Ver todos los términos →
Z Z-buffering El Z-buffering es el algoritmo de visibilidad que usan las tarjetas gráficas para decidir, píxel a píxel, qué superficie de una escena 3D queda delante: compara la profundidad de cada fragmento con la guardada en el Z-buffer y solo lo dibuja si está más cerca. Es la base de videojuegos, visores 3D y realidad aumentada. E Escáner 3D Un escáner 3D es un dispositivo que captura la forma tridimensional de un objeto, una persona o un espacio y la convierte en un modelo digital, midiendo miles de puntos de su superficie con láser, luz estructurada o fotografías. Importa porque permite medir, reproducir, inspeccionar o mostrar objetos reales sin modelarlos a mano. R Realidad Aumentada La realidad aumentada (RA o AR) es una tecnología que superpone elementos digitales, como objetos 3D, textos o efectos, sobre la imagen del mundo real en tiempo real, a través de la cámara de un móvil o de unas gafas. A diferencia de la realidad virtual, no te aísla del entorno: lo completa con información útil. H Hardware El hardware es el conjunto de componentes físicos de un sistema informático: todo lo que se puede tocar, como el procesador, la memoria RAM, el disco, la placa base, la pantalla o el teclado. Junto con el software, que son los programas, forma cualquier ordenador, móvil o dispositivo inteligente, y determina su potencia, su capacidad y lo que puede ejecutar. J JavaScript JavaScript es un lenguaje de programación interpretado o compilado al vuelo, dinámico y basado en prototipos, que los navegadores ejecutan para hacer interactivas las páginas web. Junto a HTML y CSS forma la base de la web: lo usa el 98,9 % de los sitios, y con Node.js también sirve para servidores y aplicaciones. I Interfaz gráfica de usuario Una interfaz gráfica de usuario (GUI, por sus siglas en inglés) es la parte de un programa o sistema operativo que permite manejarlo mediante elementos visuales, como ventanas, iconos, menús y botones, en lugar de escribir comandos. Es lo que hizo que cualquier persona pudiera usar un ordenador o un móvil sin saber programar.

Cuéntanos tu proyecto. Te respondemos en 48 h.

Auditoría gratuita de IA, campañas, web y SEO, con prioridades y cifras reales de tu negocio.

✓ Sin compromiso ✓ Respuesta en 48 h laborables ✓ Un consultor senior, no un bot
WA WhatsApp