2026-09-12 · Atualizado em 2026-09-13

Mapa de profundidade 16 bits: corrija o banding e verifique o PNG

Corrija mapas de profundidade em degraus ou invertidos com um teste reproduzível de PNG 8 e 16 bits, um script de inspeção e um checklist de importação no Blender.

Mapa de profundidade 16 bits: corrija o banding e verifique o PNG

Última atualização: 13 de setembro de 2026. As medições de codificação abaixo usam uma rampa sintética, não um benchmark da precisão de profundidade estimada por IA.

Seu mapa de profundidade parece suave no navegador, mas a superfície deslocada fica cheia de terraços. Você exporta um “PNG de 16 bits” e nada muda. Antes de gerar outra imagem ou aumentar a densidade da malha, descubra em que etapa os valores ficaram em degraus. A extensão do arquivo, sozinha, não responde a essa pergunta.

Resposta rápida: como evitar banding em um mapa de profundidade?

Use um PNG de 16 bits em tons de cinza exportado diretamente dos valores de profundidade em ponto flutuante do modelo, se o próximo aplicativo aceitar esse formato. Evite passar o mapa por uma prévia de 8 bits, captura de tela, JPEG ou compressor de fotos. Depois, verifique a profundidade de amostra, a faixa e a quantidade de valores distintos do arquivo antes de testar o deslocamento.

Um contêiner de 16 bits não restaura a precisão perdida. Em nosso experimento reproduzível, uma rampa codificada diretamente em 16 bits manteve 4096 valores distintos, enquanto uma rampa de 8 bits salva novamente como 16 bits manteve apenas 256. Os dois arquivos de 16 bits informavam a mesma profundidade de amostra e a faixa numérica completa.

O que este método corrige e o que ele não corrige

Este fluxo de trabalho trata da precisão na exportação e de erros comuns de importação. Ele não transforma a profundidade relativa de uma IA em distância medida, não revela geometria oculta, não corrige uma silhueta errada nem garante um relevo utilizável na fabricação. Uma estimativa de profundidade da cena e um campo de altura esculpido servem a propósitos diferentes.

Para os conceitos básicos, leia nossa introdução aos mapas de profundidade. Para uma exportação real, o gerador de mapa de profundidade usa por padrão PNG de 16 bits em tons de cinza, indica se o branco significa perto ou longe e oferece uma opção de inversão.

O caminho de IA da ferramenta mantém os valores em ponto flutuante até a etapa final de codificação. Se a ferramenta avisar que usou o método alternativo baseado em bordas e desfoque, esse método parte de valores de 8 bits, então o PNG de 16 bits terá no máximo 256 níveis.

Você deve escolher profundidade de 8 bits, 16 bits ou ponto flutuante?

Sua próxima tarefa Escolha isto, se houver suporte Verifique antes de continuar
Máscara rápida ou prévia aproximada PNG de 8 bits em tons de cinza Se o efeito tolera degraus de valor visíveis
Deslocamento suave a partir de profundidade normalizada PNG de 16 bits em tons de cinza exportado diretamente Se a origem não foi reduzida antes para 8 bits
Pipeline que exige valores brutos em ponto flutuante O formato flutuante documentado pelo aplicativo, geralmente EXR Unidades, valores inválidos, normalização e convenção de importação
Ferramenta que aceita apenas imagens de 8 bits Mantenha um original de alta precisão; exporte uma cópia de 8 bits Se a prévia e a saída final preservam detalhes suficientes

A profundidade de amostra do PNG é medida por canal, e não somando todos os canais. Um PNG RGBA de “32 bits” armazena 8 bits em cada um dos quatro canais, então um valor de cinza copiado para todos eles continua tendo apenas 256 níveis possíveis. A especificação PNG do W3C permite profundidades de amostra em tons de cinza de 1, 2, 4, 8 e 16 bits; o PNG não tem formato de amostra em ponto flutuante.

Diagrama que compara 256 níveis de cinza em 8 bits com 65 536 níveis de cinza em 16 bits

O diagrama descreve a capacidade de codificação, não a precisão do modelo nem a quantidade de valores que toda imagem deve ter. Uma superfície constante pode legitimamente usar um único valor. Um arquivo maior também não comprova uma estimativa melhor.

O que nosso experimento de 8 bits contra 16 bits mediu?

Criamos uma rampa horizontal de 4096 × 64 pixels com 4096 valores espaçados igualmente de zero a um. Codificamos a rampa de três formas com NumPy e Pillow, reabrimos cada PNG e medimos o cabeçalho, os valores distintos, a faixa e o maior erro normalizado em relação à rampa original.

Caminho de codificação Profundidade de amostra PNG Valores distintos decodificados Erro normalizado máximo Bytes do arquivo
Rampa flutuante → 8 bits 8 256 0,001953602 528
Rampa flutuante → 16 bits 16 4096 0,000007602 848
Rampa flutuante → 8 bits → 16 bits 16 256 0,001953602 819

O terceiro caminho multiplicou cada inteiro de 8 bits por 257. Isso leva zero a zero e 255 a 65 535, então a faixa parece correta. Mesmo assim, não consegue recriar os valores intermediários perdidos na primeira conversão. É por isso que verificar apenas o rótulo “16 bits” ou o pixel mais claro deixa passar um modo de falha importante.

Gráfico de barras dos valores distintos medidos: 256 em 8 bits, 4096 em 16 bits direto e 256 em 8 bits salvo como 16

Esses arquivos muito pequenos têm linhas repetidas e se comprimem com facilidade. O tamanho em bytes deles não serve para prever o de fotografias. O experimento isola a quantização; ele não compara modelos de profundidade, não testa renderizações no Blender nem mede a qualidade de gravações físicas. As ilustrações WebP desta página são gráficos explicativos, não mapas de precisão para download.

Para reproduzir os três arquivos, instale NumPy e Pillow em um ambiente Python e execute:

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")

Como inspecionar o PNG que você baixou?

Execute este script no download original, antes que outro aplicativo salve o arquivo novamente. Ele usa os mesmos pacotes Python do experimento e espera um PNG de canal único. Ele para de propósito diante de uma prévia RGB, em vez de convertê-la silenciosamente em dados de profundidade 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)
  • Confirme que é o download em tons de cinza, não a prévia colorida.
  • Espere profundidade de amostra 16 se pediu exportação em 16 bits.
  • Verifique se a faixa numérica serve para seu pipeline.
  • Avalie os valores distintos conforme o conteúdo; não há limite universal.
  • Examine uma rampa suave, onde patamares são mais fáceis de notar.
  • Repita a verificação após qualquer conversão que possa reduzir a precisão.

Uma imagem aparentemente detalhada com apenas 256 valores merece investigação, mas isso é uma pista, não um veredito. Uma máscara intencionalmente plana pode precisar de menos valores. Por outro lado, a interpolação pode criar milhares de valores a partir de uma origem de 8 bits sem recuperar a previsão original. A inspeção do arquivo não consegue provar todo o histórico de processamento.

Uma prévia quase preta também precisa ser interpretada. A profundidade bruta armazenada em uma faixa numérica estreita pode ser válida para o programa que vai lê-la. Normalize uma cópia somente se a próxima ferramenta esperar profundidade normalizada; preserve o original e qualquer metadado de escala. Para verificações básicas de dimensões e formato, nosso guia de inspeção de imagens explica o que as propriedades comuns de um arquivo podem e não podem dizer.

Por que um arquivo bom ainda pode parecer errado no Blender?

Trate o mapa como dados numéricos. No nó Image Texture, defina o espaço de cor como Non-Color para que nenhuma transformação de exibição seja aplicada. Conecte a imagem à entrada de altura ou de deslocamento adequada, confira o método de deslocamento do material e garanta que a malha tenha geometria suficiente para um deslocamento real.

A documentação do Blender sobre deslocamento diferencia o bump mapping, que só altera o sombreamento, do deslocamento real, que move a superfície e por isso precisa de geometria finamente subdividida. O bump não muda a silhueta. A posição dos menus varia conforme a versão, então siga a documentação correspondente à sua instalação.

Diagnóstico em três etapas: comparar a estimativa de origem, verificar o PNG exportado e depois as configurações de importação

Sintoma Investigue primeiro Próximo teste útil
Terraços regulares em uma rampa suave Quantização ou uma conversão intermediária para 8 bits Compare o download original com o arquivo importado
Um objeto em primeiro plano fica afundado Convenção perto/longe ou sinal do deslocamento Inverta uma vez e compare com um ponto conhecido do primeiro plano
Silhueta em blocos apesar de um mapa suave Geometria insuficiente ou modo de deslocamento incorreto Teste mais geometria em uma pequena região da malha
Vidro, cabelo ou reflexos formam figuras estranhas A interpretação da cena pelo modelo Compare a estimativa com a foto original
O mapa aparece quase preto em um visualizador Faixa numérica ou tratamento de exibição Examine o mínimo e o máximo brutos antes de ajustar os níveis

Mantenha a escala de deslocamento moderada durante os testes. Confirme o Midlevel, o mapeamento UV, o recorte e a proporção antes de aumentar o detalhe. Mudar todas as configurações de uma vez dificulta identificar qual etapa causou o erro.

Checklist confiável, da exportação à importação

Antes de exportar:

  1. Guarde juntos a foto de origem e o download original de profundidade.
  2. Escolha uma imagem com primeiro plano e fundo bem separados.
  3. Examine as bordas dos objetos antes de escolher o formato.
  4. Exporte PNG de 16 bits em tons de cinza direto, se o fluxo aceitar.
  5. Anote se pixels claros significam perto ou longe nesta exportação.

Depois de baixar:

  1. Verifique cabeçalho, faixa e valores distintos do arquivo salvo.
  2. Importe como dados e confirme a direção com um ponto conhecido.
  3. Teste uma pequena região com geometria adequada antes do render.
  4. Guarde um original de alta precisão antes de qualquer conversão.
  5. Salve as configurações que funcionaram para comparar exportações futuras.

Não passe um original de profundidade pelo seu fluxo habitual de compressão de imagens. Uma imagem de exibição menor e um campo numérico confiável têm requisitos diferentes. Da mesma forma, um upscaler genérico de IA pode inventar textura que vira geometria indesejada quando interpretada como altura.

Se o destino for um aplicativo de relevo ou gravação, verifique separadamente como ele trata as amostras, segundo a documentação, e a direção dos tons de cinza. Este artigo não testou resultados em máquina. A profundidade relativa à câmera, por si só, não define espessura do relevo, unidades físicas nem parâmetros de processamento.

Perguntas frequentes

A profundidade de 16 bits deixa a estimativa da IA mais precisa?

Não; ela pode preservar valores de saída mais finos, mas não corrige erros na interpretação da cena feita pelo modelo.

Converter um PNG de 8 bits para 16 bits remove o banding?

Trocar apenas o contêiner não restaura os valores perdidos; a suavização pode atenuar os degraus, mas altera o campo de profundidade.

Por que um PNG de 16 bits tem apenas 256 valores distintos?

Ele pode ter passado por uma etapa de 8 bits, embora uma imagem simples também possa legitimamente ter tão poucos valores.

O branco sempre significa perto em um mapa de profundidade?

Não; as convenções variam, então leia a indicação perto/longe do exportador e confirme-a com um ponto conhecido do primeiro plano.

Posso usar JPEG como mapa de deslocamento?

Um renderizador pode aceitar, mas a compressão com perdas faz dele um original ruim para preservar valores de profundidade precisos.

Um PNG RGBA de 32 bits é mais preciso que um PNG de 16 bits em tons de cinza?

Não para um mapa de profundidade em tons de cinza; “32 bits” RGBA significa quatro canais de 8 bits, então cada valor de cinza continua com 256 níveis, a menos que uma ferramenta distribua a profundidade de propósito entre vários canais.

Por que a prévia do navegador parece igual para os dois arquivos?

A conversão de exibição pode esconder a precisão numérica extra; por isso, inspecione os dados originais e teste no aplicativo de destino.

Este mapa de profundidade pode fornecer medidas reais exatas?

Não; uma estimativa relativa normalizada não estabelece distâncias físicas nem recupera geometria que não aparece na imagem.

Use as ferramentas gratuitas enquanto segue o guia.