2026-09-12 · Actualizado el 2026-09-13

Mapa de profundidad de 16 bits: corrige el banding y verifica el PNG

Corrige mapas de profundidad escalonados o invertidos con una prueba reproducible de PNG de 8 y 16 bits, un script de inspección y una lista para Blender.

Mapa de profundidad de 16 bits: corrige el banding y verifica el PNG

Última actualización: 13 de septiembre de 2026. Las mediciones de codificación de este artículo usan una rampa sintética; no son una prueba comparativa de la precisión de la profundidad estimada por IA.

Tu mapa de profundidad se ve suave en el navegador, pero la superficie desplazada aparece llena de terrazas. Exportas un «PNG de 16 bits» y no cambia nada. Antes de generar otra imagen o aumentar la densidad de la malla, averigua en qué paso los valores se volvieron escalonados. La extensión del archivo, por sí sola, no responde a esa pregunta.

Respuesta rápida: ¿cómo evitar el banding en un mapa de profundidad?

Usa un PNG de 16 bits en escala de grises exportado directamente desde los valores de profundidad en coma flotante del modelo, si la siguiente aplicación lo admite. Evita que el mapa pase por una vista previa de 8 bits, una captura de pantalla, un JPEG o un compresor de fotos. Después, verifica la profundidad de muestra, el rango y la cantidad de valores distintos del archivo antes de probar el desplazamiento.

Un contenedor de 16 bits no recupera la precisión perdida. En nuestro experimento reproducible, una rampa codificada directamente en 16 bits conservó 4096 valores distintos, mientras que una rampa de 8 bits guardada de nuevo como 16 bits conservó solo 256. Ambos archivos de 16 bits indicaban la misma profundidad de muestra y el rango numérico completo.

Qué corrige este método y qué no puede corregir

Este flujo de trabajo aborda la precisión de exportación y los errores de importación más comunes. No convierte la profundidad relativa de una IA en una distancia medida, no revela geometría oculta, no corrige una silueta equivocada ni garantiza un relieve apto para fabricación. Una estimación de la profundidad de una escena y un campo de altura esculpido cumplen funciones distintas.

Para los conceptos básicos, lee nuestra introducción a los mapas de profundidad. Para exportar un mapa real, el generador de mapas de profundidad usa por defecto PNG de 16 bits en escala de grises, indica si el blanco significa cerca o lejos y ofrece una opción para invertir.

Su ruta de IA conserva los valores en coma flotante hasta el paso final de codificación. Si la herramienta avisa de que usó su método alternativo basado en bordes y desenfoque, ese método parte de valores de 8 bits, así que su PNG de 16 bits contiene como máximo 256 niveles.

¿Conviene elegir profundidad de 8 bits, 16 bits o coma flotante?

Tu siguiente tarea Elige esto si es compatible Comprueba antes de continuar
Máscara rápida o vista previa aproximada PNG de 8 bits en escala de grises Si el efecto tolera escalones de valor visibles
Desplazamiento suave a partir de profundidad normalizada PNG de 16 bits en escala de grises exportado directamente Que el origen no se haya reducido antes a 8 bits
Flujo que necesita valores brutos en coma flotante El formato flotante documentado por la aplicación, a menudo EXR Unidades, valores no válidos, normalización y convención de importación
Herramienta que solo acepta imágenes de 8 bits Conserva un original de alta precisión y exporta una copia de 8 bits Si su vista previa y su salida final conservan suficiente detalle

La profundidad de muestra de un PNG se mide por canal, no sumando todos los canales. Un PNG RGBA de «32 bits» guarda 8 bits en cada uno de sus cuatro canales, de modo que un valor de gris copiado en todos ellos sigue teniendo solo 256 niveles posibles. La especificación PNG del W3C admite profundidades de muestra en escala de grises de 1, 2, 4, 8 y 16 bits; PNG no tiene un formato de muestra en coma flotante.

Diagrama que compara 256 niveles de gris en 8 bits con 65 536 niveles de gris en 16 bits

El diagrama describe la capacidad de codificación, no la precisión del modelo ni la cantidad de valores que debe contener cada imagen. Una superficie constante puede usar legítimamente un solo valor. Tampoco un archivo más grande demuestra una estimación mejor.

¿Qué midió nuestro experimento de 8 bits frente a 16 bits?

Creamos una rampa horizontal de 4096 × 64 píxeles con 4096 valores espaciados de forma uniforme entre cero y uno. La codificamos de tres maneras con NumPy y Pillow, volvimos a abrir cada PNG y medimos su cabecera, los valores distintos, el rango y el error normalizado máximo respecto a la rampa original.

Ruta de codificación Profundidad de muestra PNG Valores distintos decodificados Error normalizado máximo Bytes del archivo
Rampa flotante → 8 bits 8 256 0,001953602 528
Rampa flotante → 16 bits 16 4096 0,000007602 848
Rampa flotante → 8 bits → 16 bits 16 256 0,001953602 819

La tercera ruta multiplicó cada entero de 8 bits por 257. Así, el cero sigue siendo cero y 255 pasa a 65 535, por lo que el rango parece correcto. Aun así, no puede recrear los valores intermedios perdidos en la primera conversión. Por eso, comprobar solo la etiqueta «16 bits» o el píxel más brillante pasa por alto un modo de fallo importante.

Gráfico de barras con los valores distintos medidos: 256 en 8 bits, 4096 en 16 bits directo y 256 en 8 bits guardado como 16

Estos archivos tan pequeños contienen filas repetidas y se comprimen con mucha facilidad. Su tamaño en bytes no sirve para predecir el de una fotografía. El experimento aísla la cuantización; no compara modelos de profundidad, no prueba renders de Blender ni mide la calidad de un grabado físico. Las ilustraciones WebP de esta página son gráficos explicativos, no mapas de precisión descargables.

Para reproducir los tres archivos, instala NumPy y Pillow en un entorno de Python y ejecuta:

import numpy as np
from PIL import Image

ramp = np.tile(np.linspace(0, 1, 4096), (64, 1))
a8 = np.rint(ramp * 255).astype(np.uint8)
a16 = np.rint(ramp * 65535).astype(np.uint16)
wrapped = a8.astype(np.uint16) * 257
for name, values in [("ramp-8", a8), ("ramp-16", a16),
                     ("ramp-8-in-16", wrapped)]:
    Image.fromarray(values).save(name + ".png")

¿Cómo puedes inspeccionar el PNG que descargaste?

Ejecuta este script sobre la descarga original, antes de que otra aplicación la vuelva a guardar. Usa los mismos paquetes de Python que el experimento y espera un PNG de un solo canal. Se detiene a propósito ante una vista previa RGB, en lugar de convertirla en silencio en datos de profundidad aparentemente válidos.

from pathlib import Path
import numpy as np
from PIL import Image

path = Path("depth.png")
raw = path.read_bytes()
assert raw[:8] == b"\x89PNG\r\n\x1a\n"
assert raw[12:16] == b"IHDR"
print("PNG sample depth:", raw[24])
print("PNG color type:", raw[25])  # 0 = grayscale
values = np.asarray(Image.open(path))
assert values.ndim == 2, "Inspect the grayscale export, not an RGB preview"
print("Range:", int(values.min()), int(values.max()))
print("Distinct values:", np.unique(values).size)
  • Confirma que es la descarga en escala de grises, no la vista previa en color.
  • Espera una profundidad de muestra de 16 si pediste exportar en 16 bits.
  • Comprueba que el rango numérico se adapta a tu flujo de trabajo.
  • Valora los valores distintos según el contenido; no hay un umbral universal.
  • Revisa una pendiente suave, donde las mesetas son más fáciles de detectar.
  • Repite la comprobación tras cualquier conversión que pueda reducir la precisión.

Una imagen aparentemente detallada con solo 256 valores merece una investigación, pero es una pista, no un veredicto. Una máscara plana a propósito puede necesitar menos valores. A la inversa, una interpolación puede crear miles de valores a partir de un origen de 8 bits sin recuperar la predicción original. La inspección de un archivo no puede demostrar todo su historial de procesamiento.

Una vista previa casi negra también requiere interpretación. Una profundidad bruta almacenada en un rango numérico estrecho puede ser válida para el programa que debe leerla. Normaliza una copia solo si la siguiente herramienta espera profundidad normalizada; conserva el original y cualquier metadato de escala. Para comprobar dimensiones y formato básicos, nuestra guía para inspeccionar imágenes explica qué pueden y qué no pueden decirte las propiedades normales de un archivo.

¿Por qué un archivo correcto puede verse mal en Blender?

Trata el mapa como datos numéricos. En el nodo Image Texture, ajusta el espacio de color a Non-Color para que no se aplique ninguna transformación de visualización. Conecta la imagen a la entrada de altura o desplazamiento adecuada, revisa el método de desplazamiento del material y asegúrate de que la malla tenga suficiente geometría para un desplazamiento real.

La documentación de Blender sobre desplazamiento distingue el bump mapping, que solo cambia el sombreado, del desplazamiento real, que mueve la superficie y por eso necesita geometría finamente subdividida. El bump no puede cambiar la silueta. La ubicación de los menús varía según la versión, así que sigue la documentación que corresponda a tu instalación.

Diagnóstico en tres pasos: comparar la estimación original, revisar el PNG exportado y luego los ajustes de importación

Síntoma Investiga primero Siguiente prueba útil
Terrazas regulares en una pendiente suave Cuantización o una conversión intermedia a 8 bits Compara la descarga original con el archivo importado
Un sujeto en primer plano queda hundido Convención cerca/lejos o signo del desplazamiento Invierte una vez y compara con un punto conocido del primer plano
Silueta en bloques pese a un mapa suave Geometría insuficiente o modo de desplazamiento incorrecto Prueba más geometría en una zona pequeña de la malla
El vidrio, el pelo o los reflejos forman figuras extrañas La interpretación de la escena por parte del modelo Compara la estimación con la foto original
Un mapa se ve casi negro en un visor Rango numérico o gestión de la visualización Revisa el mínimo y el máximo brutos antes de ajustar niveles

Mantén una escala de desplazamiento moderada durante las pruebas. Confirma el Midlevel, el mapeado UV, el recorte y la relación de aspecto antes de aumentar el detalle. Cambiar todos los ajustes a la vez dificulta identificar qué paso causó el error.

Lista de comprobación fiable, de la exportación a la importación

Antes de exportar:

  1. Guarda juntas la foto de origen y la descarga de profundidad original.
  2. Elige una imagen con primer plano y fondo bien separados.
  3. Revisa los bordes de los objetos antes de elegir el formato.
  4. Exporta directamente a PNG de 16 bits en escala de grises si tu flujo lo admite.
  5. Anota si los píxeles claros significan cerca o lejos en esta exportación.

Después de descargar:

  1. Comprueba la cabecera, el rango y los valores distintos del archivo guardado.
  2. Impórtalo como datos y verifica la dirección con un punto conocido.
  3. Prueba una zona pequeña con geometría adecuada antes del render final.
  4. Conserva un original de alta precisión antes de cualquier conversión.
  5. Guarda los ajustes que funcionen para comparar exportaciones futuras.

No hagas pasar un original de profundidad por tu flujo habitual de compresión de imágenes. Una imagen ligera para mostrar y un campo numérico fiable tienen requisitos distintos. Del mismo modo, un escalador genérico con IA puede inventar textura que se convierte en geometría no deseada al interpretarse como altura.

Si el destino es una aplicación de relieve o grabado, verifica por separado cómo gestiona las muestras según su documentación y en qué dirección interpreta la escala de grises. Este artículo no ha probado resultados en máquina. La profundidad relativa a la cámara no establece por sí sola el grosor del relieve, las unidades físicas ni los parámetros de procesamiento.

Preguntas frecuentes

¿La profundidad de 16 bits hace más precisa la estimación de la IA?

No; puede conservar valores de salida más finos, pero no corrige los errores del modelo al interpretar la escena.

¿Convertir un PNG de 8 bits a 16 bits elimina el banding?

Cambiar solo el contenedor no restaura los valores perdidos; suavizar puede atenuar los escalones, pero modifica el campo de profundidad.

¿Por qué un PNG de 16 bits contiene solo 256 valores distintos?

Puede haber pasado por una etapa de 8 bits, aunque una imagen sencilla también puede contener legítimamente tan pocos valores.

¿El blanco siempre significa cerca en un mapa de profundidad?

No; las convenciones varían, así que lee la indicación cerca/lejos del exportador y verifícala con un punto conocido del primer plano.

¿Puedo usar un JPEG como mapa de desplazamiento?

Un motor de render puede aceptarlo, pero su compresión con pérdida lo convierte en un mal original para conservar valores de profundidad precisos.

¿Un PNG RGBA de 32 bits es más preciso que uno de 16 bits en escala de grises?

No para un mapa de profundidad en escala de grises; «32 bits» RGBA significa cuatro canales de 8 bits, así que cada valor de gris sigue teniendo 256 niveles, salvo que una herramienta reparta a propósito la profundidad entre varios canales.

¿Por qué la vista previa del navegador se ve igual con ambos archivos?

La conversión para mostrar la imagen puede ocultar la precisión numérica adicional; por eso conviene inspeccionar los datos originales y probarlos en la aplicación de destino.

¿Este mapa de profundidad puede dar medidas reales exactas?

No; una estimación relativa y normalizada no establece distancias físicas ni recupera la geometría que no se ve.

Usa las herramientas gratuitas mientras sigues la guía.