Esta é a norma - 4: resolvendo problemas com mapas normais

imagem

Parte 1: o que são mapas normais e como eles funcionam?

Parte 2: como os mapas normais são executados

Parte 3: tipos de mapas normais

Esta é a quarta parte do tutorial de mapa normal, mas é independente do restante e pode ser lida separadamente.

Aqui, listo os problemas normais do mapa que encontrei ao longo dos anos de trabalho e algumas soluções que podem ser corrigidas.

Problema: nas bordas do modelo existem "linhas pretas" ou "inserções"


imagem

Isso acontece quando o modelo tem arestas duras, pois os vértices do modelo têm normais completamente perpendiculares à superfície do polígono, e é por isso que o programa de cozimento pode pular alguns detalhes (deixando linhas pretas no modelo).

imagem

Solução: Os programas normais de criação de mapas levam esse problema em consideração ao criar mapas normais e tentam reduzir sua influência calculando um pouco mais de informações por trás dos valores normais do vértice, mas para salvá-los, eles precisam de um espaço entre os polígonos de varredura UV.

Há uma explicação mais detalhada aqui, mas, na prática, a regra é bastante simples: quando o modelo possui uma aresta afiada, é necessário separar as arestas conectadas a ele em UV.

Problema: O mapa normal parece TOTALMENTE errado, especialmente em alguns ângulos


Esse problema pode ocorrer por vários motivos. Vamos discutir alguns deles:

  • Você está usando o espaço tangente errado: as normais do seu modelo lowpoly, que estamos tentando modificar usando o mapa normal, podem ser calculadas no programa de cozimento de forma diferente do programa usado para renderizar o modelo. Se esses cálculos forem diferentes, o mapa normal pode parecer muito estranho, especialmente sob alguns ângulos.

    imagem

    , . , , .

    : Mikk. , . Mikk, handplane .
  • -: — . , . - — , . - , linear/linear color/raw sRGB Unreal.
  • : , , (bump map), (displacement map) ....
  • lowpoly- lowpoly : , / (smoothing groups)/ (hard edge), / , .

    lowpoly , /, ( obj ) .

: ?


Solução: você não precisa. Não é necessário criar mapas normais para tudo. Um cone afiado é um exemplo clássico disso, mas há muitos outros casos em que mapas normais não são uma solução.

imagem

Usamos mapas normais para mudar a direção das normais dos modelos lowpoly. Às vezes, a direção das normais está correta e não requer nenhuma alteração; às vezes, as normais normais de baixa rotação são extremamente giradas (como no caso de um pico agudo) e as peças do modelo de alta densidade são mapeadas incorretamente para a superfície do modelo de baixa densidade. Nesses casos, simplesmente excluo os detalhes do mapa normal usando esta cor:

imagem

Essa cor é 50% vermelha, 50% verde e 100% azul e não altera a direção das normais do mapa normal do espaço tangente; portanto, você pode usá-la para remover detalhes em locais com projeção malsucedida.

Um cone afiado é apenas um exemplo de um dos casos em que mapas normais podem não resolver seus problemas. É importante lembrar aqui que, em alguns casos, o mapa normal não é a melhor solução, seus recursos são limitados e não podemos esperar que eles se comportem conforme necessário em qualquer situação. Às vezes, passamos muito tempo tentando fazer o mapa normal funcionar, quando podemos apenas adicionar partes à textura difusa ou baixa densidade, e não tentar transferir a parte usando o mapa normal.

Problema: os detalhes do meu modelo parecem invertidos.


Esse é um problema muito comum e pode ser visto em muitos videogames, mesmo no nível AAA.

Como vimos neste tutorial [ tradução em Habré], mapas normais são texturas que usam canais verde, vermelho e azul para mudar a maneira como a luz é refletida na superfície do modelo quando cai respectivamente do lado, topo e frente do modelo (lembre-se de que isso é simplificado explicação e não é 100% verdade).

imagem

O problema é que algumas aplicações acreditam que o canal verde deve mostrar o modelo como iluminado por baixo, enquanto outros acreditam que ele deve mostrar o modelo como iluminado por cima. Às vezes, isso é chamado de "destreza normal do mapa":

  • Aplicações OpenGL (canal verde positivo do lado direito): Blender, Maya, Modo, Toolbag, Unity.
  • Aplicativos DirectX (lado esquerdo, canal verde negativo): 3DStudio Max, CryEngine, Source Engine, Unreal Engine.
  • O Substance Painter pode trabalhar com ambos os tipos e exportar os dois tipos de mapas normais.

Solução: inverta o canal verde do mapa normal. A maioria dos mecanismos de jogos tem uma opção para inverter a textura do mapa normal ou você pode inverter manualmente o canal de textura verde no Photoshop (vá para a guia canais, selecione o canal verde e pressione Ctrl + i).

Problema: algumas peças parecem peças planas / ausentes


Imagine que, ao preparar mapas normais, o programa de cozimento emite raios da superfície do modelo de baixa densidade, seguindo as normais de baixa densidade, até que os raios se cruzem com o modelo de alta densidade e gire. Depois disso, o programa de cozimento pega essas informações e as salva no mapa normal.

Esses raios emitidos não devem se mover indefinidamente, porque podem colidir com a parte mais distante do pólo alto e girar incorretamente; portanto, o programa de cozimento limita a faixa de emissão de raios e, às vezes, os raios podem parar antes de se cruzarem com o pólo alto. Nesse caso, perdemos detalhes e o mapa normal tem áreas de uma cor uniforme.

imagem

Solução: depende de como o programa de cozimento permite controlar a distância do cozimento:

  • lowpoly , «» lowpoly- ( ). , lowpoly highpoly.
  • , Max, (cage) — «» lowpoly, .
  • ( Substance Painter max frontal/rear distance).

Você também pode tentar tornar o lowpoly e / ou highpoly mais semelhantes entre si, para que os raios possam obter detalhes em toda a superfície do modelo. Outra opção é assar dois mapas normais com distâncias diferentes da gaiola e misturá-los em diferentes partes das texturas. Alguns puristas de mapas normais podem xingar você por isso, então cuide de seus ouvidos.

Problema: O mapa normal possui detalhes distorcidos


Este é um problema muito comum. Isso acontece quando as normais normais de baixa poli não correspondem corretamente aos detalhes da alta poli; portanto, elas parecem inclinadas (na verdade, se você as observar da direção das normais dos vértices , elas correspondem perfeitamente). Isso geralmente acontece quando alguns rostos formam um ângulo muito nítido.

imagem

Solução: escrevi com mais detalhes sobre esse tópico em outro tutorial [ tradução em Habré], mas em geral as soluções são as seguintes:

  • Alise os cantos afiados adicionando um chanfro.
  • Converta uma aresta de um ângulo agudo em uma aresta aguda (aresta dura) / divida as faces em diferentes grupos de suavização (grupo de suavização).
  • Use normais personalizados / normais ponderados.

Problema: O mapa normal parece pixelizado ou contém listras


Terremoto (também conhecido como deus do mapa normal) escreveu uma explicação muito boa para esse problema.

Se lowpoly e highpoly forem muito semelhantes, a maior parte do mapa normal terá uma cor base do mapa normal e as outras cores estarão nos locais em que lowpoly difere de highpoly.

Se a situação for oposta: lowpoly e highpoly são muito diferentes, o mapa normal terá uma variedade muito maior de cores e gradientes aparecerão:

imagem

Esses gradientes suaves causam problemas porque são necessárias muitas cores para representá-las, e os métodos de compactação de textura mais comuns são baseados na redução do número total de cores.

Soluções:

  • lowpoly highpoly: , . lowpoly, highpoly.
  • 16- : 8- . , 8 (0 1). 256 .

    , .

    imagem

    16- 16 , 65536 . , . , 16- , 8- ( ). , 16- -; 24- . [. .: .]

    , , 16 .
  • : — , , — . , , . .

    imagem
  • , : , , . , : , . . , ( , , ), .

:


A solução óbvia seria aumentar a “ilha” de UV desta parte do modelo ou usar texturas maiores, mas vamos olhar para soluções menos óbvias:

  • Asse o mapa normal com resolução dobrada e reduza o tamanho da imagem: se você usar uma textura de 512x512, faça o mapa normal com uma resolução de 1024x1024 e depois converta a imagem em 512x512. Devido a isso, cada pixel da textura final receberá informações de quatro pixels, criando um tipo de antialiasing e reduzindo a pixelização. Isso também é válido para outras imagens cozidas; Além disso, vale a pena salvar as versões de textura de alta resolução, caso você queira aumentar posteriormente os detalhes em algumas áreas.

    imagem

    , , , 1024, highpoly, .
  • UV islands , . 1 UV-, .

    trim- .
  • , . - , . :

    imagem

    imagem

Problema: meu modelo é simétrico, mas o mapa normal é diferente em lados diferentes.

Quando aplicada a um modelo de simetria, as direções dos normais podem mudar devido ao fato de a maneira de conectar as faces ter mudado. Às vezes, isso significa que você pode obter uma costura bem no centro do modelo. Para evitar isso, verifique se as normais normais de baixa polar no centro estão alinhadas e ajuste a suavização, se necessário.

Outro motivo possível é a triangulação : quando os modelos são importados para o mecanismo de jogo, eles sempre são triangulados e, às vezes, esse processo pode alterar os normais de baixa policidade e os artefatos podem aparecer ao longo das diagonais das faces de baixa pol. Para evitar isso, triangule o modelo antes de assar, asse o mapa normal e aplique o modificador de simetria.

Além disso, você pode estudar o pequeno tutorial sobre terremotos, que me ajudou um pouco mais a entender os normais de vértices e os mapas normais.

Para mais informações sobre mapas normais, consulte o wiki do Polycount.

All Articles