Voltar ao Blog
Tutoriais

Convenções de Mapa Normal: OpenGL vs DirectX Explicado

Por que seu mapa normal parece invertido no Unreal mas fica ótimo no Unity — uma explicação clara sobre convenções do eixo Y em espaço tangente, com correções práticas.

Admin23 de abril de 20263 min de leitura11

Você conecta um mapa normal no Unreal e a superfície se ilumina como se o sol estivesse vindo de baixo. Você conecta o mesmo arquivo no Unity ou Blender — fica ótimo. A malha é idêntica. A textura é idêntica. O que está acontecendo?

Duas Indústrias, Um Eixo em Desacordo

Mapas normais armazenam uma direção de superfície em seus canais RGB. Vermelho = X, verde = Y, azul = Z. Cada mecanismo PBR os decodifica da mesma forma com uma exceção: o sinal de Y.

Convenção OpenGL (Y+): um canal verde mais brilhante significa que a superfície aponta para cima. Usada pelo Unity, Godot, Blender (Cycles e Eevee), exportação padrão do Substance Painter e todo mecanismo baseado em WebGL.

Convenção DirectX (Y−): verde mais brilhante significa que a superfície aponta para baixo. Usada pelo Unreal Engine, pela cadeia legada Direct3D e alguns ativos CryEngine/era Xbox.

Os mesmos bytes no PNG. Significado físico oposto.

Como Identificar à Primeira Vista

Procure por um relevo hemisférico (como um botão ou uma cúpula) em seu mapa normal. Na convenção OpenGL, a parte inferior do relevo será verde mais escuro porque a superfície está girando para Y−, afastando-se da luz. Na convenção DirectX, a parte inferior é verde mais brilhante.

Se a iluminação parecer invertida no mecanismo — destaques onde deveriam haver sombras — você tem um desajuste de convenção.

A Correção Leva 5 Segundos

No Unreal, o diálogo de importação de textura tem uma caixa de seleção Flip Green Channel. Ative-a e o mecanismo inverte o canal G no momento da amostragem. Sem necessidade de re-exportar sua fonte.

No Unity, defina o tipo de textura como Normal map e o importador cuida de tudo — Unity espera OpenGL, mas avisará se o arquivo parecer errado. No Blender, use uma cadeia de nós Separate Color → Invert G → Combine Color, ou simplesmente escolha entrada estilo DirectX diretamente no nó Normal Map.

Por Que Dois Padrões em Primeiro Lugar?

Nos anos 1990, OpenGL e DirectX definiram espaços de coordenadas de textura opostos — OpenGL tinha Y aumentando para cima, DirectX tinha Y aumentando para baixo. Quando mapas normais se tornaram comuns em meados dos anos 2000, cada cadeia de ferramentas incorporou seu espaço em suas saídas. A divergência se manteve porque inverter um pipeline estabelecido é caro.

Gerando Mapas Normais Sem a Confusão

O Gerador de Mapa Normal aukimi permite que você escolha a convenção explicitamente ao exportar. Ele executa um gradiente Sobel na luminância de seu mapa de altura e então empacota (−dx·s, −dy·s, 1) em RGB — com Y invertido quando você escolhe DirectX. Você pode alternar a convenção após a geração e baixar novamente sem re-enviar nada.

Internamente a fórmula é idêntica. A única diferença é o sinal que aplicamos ao componente Y antes de escrever o canal verde. Sabendo disso, você pode converter um arquivo entre convenções com qualquer editor de imagem: abra o PNG, selecione o canal verde, inverta-o, salve. É tudo o que "Flip Green Channel" faz no Unreal.

Referência Rápida

  • Unity, Godot, Blender, Substance Painter (padrão): OpenGL (Y+).
  • Unreal Engine, Direct3D legado: DirectX (Y−).
  • Parece errado no Unreal? Ative Flip Green Channel nas configurações de importação.
  • Parece errado no Unity? Você provavelmente exportou de uma ferramenta com convenção DirectX — inverta o canal verde ou re-exporte.

Assim que você internalize a convenção, a correção é trivial. A parte mais difícil é reconhecê-la na primeira vez.

#normal-map#3d#pbr#shaders#opengl#directx

Gostou deste artigo?

ShareHN