Mapas normais ideais para o Unity (e outros programas)

... e como descobrir o que há de errado com seu pipeline de criação de conteúdo.


Digamos que você tenha um incrível modelo high-poly no qual o artista tenha trabalhado, e você queira colocá-lo no jogo. O artista mostrou capturas de tela do modelo em seu programa e elas parecem incríveis. Mesmo depois de criar mapas normais para a versão low-poly, ele ainda parece ótimo.


Veja a grandeza deste modelo tradicional para testar mapas normais!

Então a artista a coloca no jogo, e ela parece ... um pouco errada.


Esses rostos não deveriam ser planos?

As superfícies, que devem ser planas, ainda são um pouco arredondadas, algumas são até deprimidas e, pior ainda, listras estranhas as acompanham. Situação familiar? Alguns de vocês provavelmente se depararam com isso, pensaram: "Bem, provavelmente, não vai funcionar melhor" e seguiram em frente. Talvez um pouco de sujeira tenha sido aplicada para mascarar os casos mais graves.

Mas há realmente algo errado com seu pipeline de criação de conteúdo. Isso nem sempre é óbvio, mas o problema pode ser resolvido! *

* Se você assumir que, em alguns casos, poderá fazer alterações no pipeline de conteúdo.

Prefácio


Este artigo é sobre como exportar mapas normais ideais de outros aplicativos para uso no Unity 5.3 e superior. Ele não fala sobre como obter mapas normais de alta qualidade, existem muitos outros tutoriais para isso, então não vou abordar esse tópico.



Base espacial tangente


O problema é como os mapas normais do espaço tangente funcionam. Em particular, como funciona o espaço tangente (ou base tangente). Não irei muito longe nos aspectos técnicos do que eles fazem. Eu, como outros autores, já conversamos sobre isso , mas, em resumo, o espaço tangente determina o que a orientação da direção no mapa normal deve representar. Qual direção no mapa normal é realmente "avançar", "subir" ou "direita". Grosso modo, essa orientação é a orientação das coordenadas UV da textura e normais dos vértices.

É mais importante entender que o programa usado para criar o mapa normal da malha highpoly para a malha lowpoly deve calcular seu espaço tangenteexatamente o mesmo que o programa em que os mapas normais serão usados . Como programas diferentes podem usar o espaço tangente de maneiras diferentes, os mapas cozidos normais de uma malha não serão necessariamente os mesmos para todos os aplicativos. Mesmo para aplicações que usam o mesmo espaço tangente!

Conheça seu inimigo


Golpe devido a erro óbvio


O erro mais comum é o problema “OpenGL vs Direct3D”. Eles também são chamados de mapas normais Y + e Y-. Incluí-os aqui apenas para completar. Provavelmente, a maioria das pessoas que encontrou esse problema já o conhece ou pelo menos aprendeu a resolvê-lo. Como os mapas normais são gerados em uma orientação, eles são essencialmente inúteis para uso em um aplicativo desenvolvido para usar outro.


Mapas normais na orientação Direct3D no mecanismo Unity, que espera uma orientação OpenGL.Isso

pode ser entendido pelo fato de que a iluminação parece estar invertida ou caindo do outro lado, mas apenas em algumas direções de iluminação. Alguns cantos ou rostos podem parecer completamente normais até você mover a fonte de luz.

E com esse problema, tudo está claro o suficiente. A maioria dos aplicativos de criação de mapas normais possui um bom botão ou menu grande para alternar entre a opção de orientação OpenGL / Direct3D ou Y. Descubra qual orientação o aplicativo de destino usa e faça mapas nele. O Unity usa OpenGL e Y +. A Unreal usa o Direct3D e Y-. Isso pode ser claramente entendido observando a textura do próprio mapa normal. Se parece que no canal verde eles estão acesos "de cima", então esta é a orientação do OpenGL. Se de baixo, então é o Direct3D.

Extravagâncias com sRGB


Outro erro comum é usar uma textura marcada como textura sRGB. Isso altera a maneira como a textura da GPU é amostrada, forçando-a a converter valores de cores do espaço sRGB, do qual as pessoas geralmente selecionam valores de cores, em um espaço linear de cores. Para mapas normais, isso não é necessário. Se você definir o tipo como "Mapa normal" para a textura no Unity, o mecanismo desativará automaticamente essa opção, mas você também poderá desativar a opção "sRGB (Textura de cor)" manualmente, e a textura funcionará como um mapa normal. Pelo menos no Unity 2017.1 e mais recente.


Mapa normal com o tipo de textura Padrão e sRGB ativados.Este

problema pode ser reconhecido pelo fato de os mapas normais serem fortemente influenciados em uma direção. Neste modelo, quase todos os rostos parecem direcionados para uma fonte de luz. Obviamente, isso nem sempre será o caso. Em um mapa normal mais detalhado, todas as partes respondem à iluminação quase corretamente, mas mudam ligeiramente para algum ângulo. Às vezes, pode parecer que toda a superfície da malha está distorcida.

Muito diferente para ser normal


Outro problema comum é o uso de diferentes malhas normais de cozimento no ativo do jogo. Assim como as tangentes, para que tudo funcione, elas devem corresponder exatamente . Esse erro geralmente ocorre se os artistas exportam malhas com valores normais de vértices incorretos. Nesse caso, qualquer aplicativo que abrir a malha precisará calculá-los você mesmo. Não existe uma maneira certa de resolver isso, tudo depende da malha. Portanto, certifique-se de exportar (ou artistas) o modelo com as normais finais!


Mapas normais criados em uma malha suavizada, exibidos como em uma malha com bordas afiadas


Mapas normais criados em uma malha com bordas afiadas, exibidos como em uma malha suavizada

Esse é outro problema fácil de detectar. Se o modelo parecer ter arestas nítidas, mas o sombreamento se inclinar dessas arestas, significa que você criou o mapa normal com normais suaves, mas elas são renderizadas em uma malha com arestas nítidas. Se o sombreamento dobrar em direção à borda, isso significa que o mapa foi cortado com uma borda afiada e renderizado em uma borda suave. De fato, em um modelo, ambos os casos podem estar presentes, porque é possível indicar a suavidade ou nitidez das arestas individuais e até o grau de suavidade. Mas, de fato, eles são garantidos como errôneos se você permitir que outro aplicativo adivinhe como deve ser. O modelo apresentado acima é um caso extremo, e muitas vezes nem tudo é tão óbvio, porque grandes partes do modelo podem parecer completamente normais. Mas no caso geral,se você tiver várias arestas que parecem particularmente estranhas, provavelmente isso se deve a uma incompatibilidade nas normais do vértice.

MikkTSpace vs Autodesk


Um problema menos perceptível é que, ao criar mapas normais do 3ds Max ou Maya, eles sempre estarão incorretos no mecanismo do Unity. Eles estarão errados no Unreal e em quase qualquer outro programa, exceto no programa em que foram assados. Os mapas normais do 3ds Max não funcionam no Maya e vice-versa! Cada um desses aplicativos calcula o espaço tangente de maneira exclusiva, o que não corresponde a outros aplicativos. Quando usados ​​de forma independente, eles parecem perfeitos e, se você gerar mapas normais para uso nesses programas, tente criar mapas normais neles. Quase nenhum outro programa é capaz de criar os mapas normais corretos para esses aplicativos, então você parece não ter escolha.

A única solução nesse caso é não criar mapas normais com esses aplicativos se você quiser usá-los em outro lugar. Se você precisar de um programa gratuito, use o xNormal . Esta é uma ferramenta padrão do setor. Se você usar Substância em algum lugar no pipeline de criação de conteúdo, use-o.


O 3ds Max criou o mapa normal usado pelo Unity A

maneira mais fácil de perceber esse problema é ver que as faces planas têm pequenas amolgadelas ou curvaturas. Em alguns casos, isso pode ser muito discreto, especialmente em objetos orgânicos. Portanto, problemas desse tipo geralmente passam despercebidos.

Muitos aplicativos que não são da Autodesk mudaram para um método de cálculo de espaço tangente chamado MikkTSpace.. O xNormal e o Substance, assim como o Blender, Unity, Unreal, Godot, Marmoset, Houdini, Modo e alguns outros, por padrão, usam o MikkTSpace ou, pelo menos, de alguma forma o suportam, o que melhora bastante sua compatibilidade. De fato, nos últimos dez anos, tornou-se o padrão do setor em todos os casos em que são usados ​​mapas normais do espaço tangente. Presumivelmente, em algum momento, o 3ds Max adicionará seu suporte, mas não está claro se os desenvolvedores planejam permitir mapas normais usando o MikkTSpace ou simplesmente fornecem suporte para visualização / renderização com sua ajuda.

Malhas de exportação e pintor de substâncias


Outro problema com o 3ds Max e o Maya é que, ao exportar malhas a partir deles, existe uma opção de exportação com "tangentes e binormais". Eles não estarão nas tangentes reais do MikkTSpace, mas serão baseados neles. Alguns aplicativos forçam novamente o cálculo do MikkTSpace correto por padrão (por exemplo, xNormal, Unity e Unreal), mas outros aplicativos usam malhas tangentes (se houver) "como estão" e computam o MikkTSpace apenas se a malha não tiver tangentes. Por exemplo, o Substance Painter usa malhas tangentes se estiverem presentes, ou seja, o Painter cria mapas normais muito semelhantes ao 3ds Max! Semelhante, mas não exatamente o mesmo, portanto, se você importá-los de volta para o 3ds Max, eles não parecerão tão bons quanto cozidos no Max.

MikkTSpace vs MikkTSpace?


O próximo problema é que há mais de uma versão do MikkTSpace! Sim, esse não seria o padrão se, de alguma forma, não apresentasse confusão. O MikkTSpace determina como os dados devem ser armazenados na malha para cada vértice e como os dados são usados ​​para renderização. Todos os aplicativos habilitados para MikkTSpace calculam os mesmos dados de malha para vértices. Mas existem duas maneiras diferentes de usar esses dados na renderização. MikkTSpace define como calcular o vetor tangente e assinar para cada vértice com base na orientação UV. Porém, ao usar o espaço tangente, a tangente a dois pontos (bitangente) é recalculada para cada vértice ou para cada pixel. Este parâmetro também deve ser o mesmo para assar e visualizar.

xNormal e Substância têm a opção de criar mapas normais usando os dois métodos. Essas opções são denominadas “computar espaço tangente por fragmento” em Substância e “computar binormal no pixel shader” no xNormal. Você não precisa usá-lo se estiver preparando os métodos de renderização do Unity embutidos. No entanto, pode valer a pena fazer isso para SRP, dependendo do tipo que você escolher!


XNormal "pixel shader binormals" com renderizador avançado incorporado Unity

Visualmente, isso parece usar um espaço tangente completamente diferente, mas geralmente é muito menos pronunciado. Alguns rostos podem parecer como se o normal estivesse um pouco distorcido e não terá um grande dente. A solução aqui é muito simples - não selecione essa opção se estiver utilizando os métodos de renderização embutidos do Unity. Marque a caixa se você usar motores Unreal ou Unity para HDRP.

Muitas fontes dizem que Blender e Unity são idênticos, mas na verdade isso nunca é verdade! O Blender, como o Unity, usa a orientação MikkTSpace e OpenGL, mas, como o Unreal, usa binormals para cada binomals de fragmento.

A boa notícia é que agora os shaders LWRP, URP e Shader Graph usam binormais para cada vértice e os shaders HDRP integrados para cada pixel. Em uma atualização futura do Shader Graph (7.2.0), a transição para a computação pixel por pixel será realizada e, após algum tempo, os shaders URP integrados também mudarão para ele. E os métodos de renderização padrão podem ser alterados usando seus próprios shaders, se você escolher essa rota.

Triangular, triangular, triangular!


O último problema são diferentes maneiras de triangular. Se você exportar malhas sem triangulação preliminar, não há garantia de que outros aplicativos triangularão o modelo da mesma maneira. Isso também prejudica os mapas normais! Portanto, triangule as malhas, usando as opções de exportação ou através do modificador de triangulação.


Substance Painter , Unity , 3ds Max (quads)

Isso parece muito semelhante a um espaço tangente completamente errado, como se mapas normais tivessem sido cortados no 3ds Max. Mas, no caso geral, elas são um pouco mais nítidas, quase dobradas e não parecem concavidades suaves. Nesta malha, uma forma de X é visível nas faces externas. Esse problema pode ser difícil e irritante quando várias pessoas estão trabalhando com o modelo no pipeline de produção de conteúdo em diferentes aplicativos, porque geralmente é útil não triangular a malha e salvar belos polígonos. Nesse caso, você precisa aceitar a inconveniência ou criar a última ferramenta no pipeline antes de exportar o modelo para o jogo, também usado para gerar uma malha usada para assar normais. Como um espaço tangente com normais de vértices (que fazem parte do espaço tangente),a triangulação também deve corresponder exatamente.

Lista para criar mapas normais perfeitos para o Unity


Portanto, aqui estão algumas dicas para gerar mapas normais de espaço tangente para malhas lowpoly a partir dos modelos highpoly originais para uso no Unity:

  • Não é necessário criar mapas normais usando o 3ds Max, o Maya ou qualquer outro aplicativo que não possua a opção tangente MikkTSpace .
  • Exporte malhas como triângulos , com normais e sem tangentes.
  • Escolha OpenGL ou X + Y + Z + como orientação do mapa normal ao assar (bem como ao criar um projeto para o Substance Painter).
  • Você não precisa habilitar as opções de tangentes para os dois pontos " por pixel " / " por fragmento " ao processar os métodos de renderização internos (proativos ou diferidos) ou LWRP.
  • Inclua opções de tangentes para os dois pontos "por pixel" / "por fragmento" ao executar o HDRP e, em breve, o URP.
  • Deixe as opções de importação do modelo padrão para o Unity, com as normais definidas como "Importar" e as tangentes como "Calcular o espaço do Mikkts".

Isso é tudo! Toda vez que você obtém mapas normais perfeitamente preparados!


Viva! O mapa normal perfeito!


... com reflexões? Ahem ..

Bem, o último, nós apenas ignoramos. O mais "perfeito" possível com formatos de textura compactada com 8 bits por canal. Um mapa de pontilhamento normal pode parecer um pouco melhor que listras, mas, infelizmente, poucas ferramentas fornecem essa opção. Caso contrário, você pode usar mapas normais de 16 bits. Mas este é um tópico para outro artigo.

Saiba mais sobre o MikkTSpace.


O site semi-oficial do mikktspace.com explica bem os principais benefícios do MikkTSpace. Em particular, esse espaço funciona bem tanto para recontar quanto para transferir dados tangentes entre programas com diferentes processos de malha, mantendo a integridade dos resultados. O texto do site é uma cópia da já extinta página wiki do Blender, escrita pelo próprio Morten S. Mikkelsen. Infelizmente, ele menciona apenas a versão com tangentes a dois pontos para cada pixel, mas não a versão para cada vértice, o padrão usado pelo Unity e xNormal. Como o Blender usa derivadas de tangentes por pixel, é lógico que apenas elas sejam mencionadas.

Aqui estão comentários sobre essas duas opções do arquivo mikktspace.h original :

, /.

bitangent = fSign * cross(vN, tangent);



(/ ) , .

, , , «» , : vT, vB vN.

( )

vNout = normalize( vNt.x * vT + vNt.y * vB + vNt.z * vN );

vNt — . «» , , .



, , , .

Portanto, no exemplo original, a tangente a dois pontos é recriada no shader de vértice e passada para o shader de pixel como outro valor interpolado. É assim que os shaders normais do Unity atualmente lidam com mapas normais. Um exemplo de execução dessa tarefa em um pixel shader é mais um improviso do que um exemplo "principal". Além disso, desde que a implementação do Unity 5.3 (e xNormal?) Foi criada pelo próprio Morten S. Mikkelsen, e ambos usam tangentes para cada vértice, essa é outra prova de nossa teoria. Mas o Blender usou tangentes pixel por pixel, e Morten também estava envolvido. Provavelmente, de fato, foi apenas uma opção que causou pequenas alterações nos shaders finais do Unity e, embora para gráficos em tempo real, nenhum dos métodos tenha sido considerado muito melhor que o outro.

A vantagem da implementação pixel por pixel é a eliminação de dois valores interpolados ao custo de pequenos custos extras para a ALU (matemática do pixel shader). Isso significa que, em vez dos três valores do vetor3 (tangente, tangente a dois pontos e o normal), precisamos apenas do vetor4 e do vetor3 (tangente com um sinal e normal). Nas GPUs modernas, isso é um pouco mais rápido. E é definitivamente mais rápido quando executado na CPU, pois pode ser usado para renderizadores não em tempo real. Desse ponto de vista, é lógico que a maior parte da indústria decidiu recriar a tangente para dois pontos no pixel, e não no topo.

É engraçado que, quando escrevi este artigo, o Morten promoveu a transição no Unity SRP para pixel por pixel tangente a dois pontos! É uma má sorte que os métodos de renderização internos do Unity tenham um legado de escolhas inconvenientes.



Espaço tangente em diferentes aplicações


Embora este artigo se concentre principalmente no Unity, como hoje esse mecanismo se tornou popular, eu queria que meu estudo fosse mais detalhado. Portanto, criei uma lista de vários aplicativos com informações sobre o uso do espaço tangente.

Unidade (5.3+)


Orientação: OpenGL Y +
Espaço tangente: MikkTSpace
Cálculo de tangentes a dois pontos para MikkTSpace: para vértices ou pixels *

Notas:por padrão, o mecanismo redefine à força as tangentes da malha na importação para usar o MikkTSpace. Para usuários avançados, ele tem opções para o uso de malha tangente, mas isso não garante a compatibilidade com mapas normais criados em outras ferramentas, especialmente ao usar sombreadores embutidos. Eles podem ser substituídos por shaders completamente próprios. E para seus shaders integrados, o HDRP usa tangentes pixel por pixel em dois pontos. No momento da redação deste artigo, planejava-se que os shaders URP e Shader Graph também mudassem para tangentes pixel por pixel para dois pontos. Antes do Unity 5.3, o mecanismo usava tangentes Lengyel , que ainda podem ser usadas selecionando a opção Legacy Tangents no importador de malha, mas os shaders internos não suportam mais esse espaço tangente.

Além disso: antes do URP 7.2.0, o processamento de mapas normais no Shader Graph era completamente interrompido! Nem o MikkTSpace nem o espaço tangente de Lengyel são usados ​​corretamente, e é impossível corrigir isso dentro do Shader Graph. Se possível, atualize para 7.2.0.

Motor irreal 4


Orientação: Direct3D Y-
Espaço tangente: MikkTSpace
Cálculo de tangentes em dois pontos para MikkTSpace: pixel por pixel
Notas: por padrão, o mecanismo redefine as tangentes da malha ao importar usando o MikkTSpace. Para usuários avançados, há opções para usar uma malha tangente, mas isso não garante a compatibilidade com mapas normais criados em outras ferramentas.

Godot


Orientação: OpenGL Y +
Espaço tangente: MikkTSpace
Cálculo de tangentes a dois pontos para MikkTSpace: para cada vértice
Notas: se não houver dados tangentes, ele poderá calcular malhas tangentes no MikkTSpace na importação. A documentação do mecanismo sugere a exportação de malhas de malha tangente, mas como a maioria das ferramentas não exporta a malha tangente correta, eu ignoraria essa dica. Mesmo se você usar a malha tangente original, não há garantia de que os mapas normais terão a aparência correta.

Playcanvas


Orientação: OpenGL Y +
Espaço tangente: Lengyel / Schüler *
Cálculo de tangentes a dois pontos: para cada vértice / com base em derivadas
Notas: fornece vários métodos para processar o espaço tangente. As tangentes geradas por código não usam MikkTSpace. Possui opções para usar uma tangente a dois pontos para cada vértice que normalizam os vetores de espaço tangente no shader de pixel "fastTbn" sem normalizar o espaço tangente no shader de fragmento (do qual precisamos, uma vez que isso corresponde à implementação do MikkTSpace com um cálculo para cada vértice) ou eles usam o TBN baseado em derivado, emprestado de Christian Schuler ; ignora completamente a tangente da malha e calcula o espaço tangente no pixel shader. Agora, por padrão, são usados ​​mapas normais baseados em derivativos, para os quais, até onde eu sei, não existem ferramentas para fazer mapas normais exatos. É possível importar malhas com dados normais e tangentes existentes do MikkTSpace e, em seguida, usar a opção de material "fastTbn" para corresponder aos métodos de renderização integrados do Unity, mas acredito que isso deve ser feito no código, e não na interface do editor.

Filamento


Orientação: OpenGL Y +
Espaço tangente: MikkTSpace
Cálculo de tangentes em dois pontos para MikkTSpace: para cada vértice
Notas: dependendo do desempenho no futuro, o mecanismo pode ir para tangentes pixel por pixel em dois pontos.

3ds max


Orientação: Direct3D Y- *
Espaço tangente:
opções nativas de exportação de malha: exporte arquivos FBX com o Triangulate ativado, mas Tangents e Binormals desativados. As normais sempre devem ser exportadas. As normais divididas por vértice podem ser desativadas.
Notas: Por padrão, o 3ds Max supõe que a orientação do Direct3D seja usada em mapas normais, mas tem opções para inverter as orientações X e Y ao usar texturas de mapa normais em materiais. O cozimento sempre usa a orientação Direct3D. O suporte do MikkTSpace aparecerá em versões futuras.

Maya


Orientação: OpenGL Y +
Espaço tangente:
opções nativas de exportação de malha: exporte arquivos FBX com o Triangulate ativado, mas Tangents e Binormals desativados. As normais são sempre exportadas. As normais divididas por vértice podem ser desativadas.
Observações: algumas pessoas me disseram que o Maya já suporta parcialmente o MikkTSpace, mas não sei até que ponto.

Liquidificador (2.57+)


Orientação: OpenGL Y +
Espaço tangente: MikkTSpace
Cálculo de tangentes a dois pontos para MikkTSpace: para cada pixel
Opções de exportação de malha : exporte arquivos FBX com um valor de suavização de "Somente normais". Você pode exportar com ou sem o Tangent Space se o aplicativo de destino também usar o MikkTSpace, como Unity ou Unreal.
Notas: O Blender não possui uma opção de triangulação ao exportar para o FBX, portanto, use o modificador Triangulate primeiro. Os mapas normais criados no Blender não serão 100% compatíveis com o Unity, mas se você virar o canal verde em um aplicativo de terceiros ou em material personalizado, eles funcionarão perfeitamente no Unreal.

xNormal (3.17.5+)


Orientação:
espaço tangente personalizado : MikkTSpace *
Cálculo de tangentes a dois pontos para MikkTSpace: personalizado (para cada vértice ou pixel)
Opções para fazer mapas normais:tem opções para inverter os três eixos do mapa normal durante a exportação. A unidade precisa de X + Y + Z +. Também há a opção de usar tangentes para dois pontos para cada vértice ou pixel (ou seja, fragmento). Por padrão, o xNormal usa tangentes para dois pontos para cada vértice, mas isso pode ser alterado no menu Gerenciador de plug-ins (ícone do plugue de energia no canto inferior esquerdo) clicando em "Calculadora de base tangente", "Mikk - TSpace" e clicando em Configurar. Uma janela pop-up aparecerá com a única opção "Computar binormal no pixel shader". Ele deve estar desativado para o Unity e ativado para o Unreal.
Notas:Embora o xNormal suporte apenas o MikkTSpace, seu sistema de plugins suporta teoricamente qualquer espaço tangente. Até agora, o único plug-in de espaço tangente que conheço foi projetado para criar o espaço tangente do Unity 4 e já é inútil. Ou seja, se abordado de forma realista, o aplicativo suporta apenas o MikkTSpace.

Pintor de substâncias


Orientação: personalizável (OpenGL ou Direct3D)
Espaço tangente: MikkTSpace
Cálculo de tangentes a dois pontos para o MikkTSpace: personalizável (para vértices ou pixels)
Opções de cozimento para mapas normais: possui opções de cozimento na orientação OpenGL ou Direct3D. E uma opção para usar tangentes em dois pontos para cada vértice ou pixel (fragmento), que é configurado pelo parâmetro “Calcular espaço tangente por fragmento”. Ao exportar para métodos internos de renderização do Unity, é necessário selecionar OpenGL e desativar Computar espaço tangente por fragmento nas opções de projeto e exportação, e ao exportar para o Unreal ou Unity HDRP, faça o oposto.
Notas:O Pintor de substâncias, por padrão, usa os dados tangentes que a malha importada usa. A menos que você esteja exportando do Blender, você não precisa disso! Mas não há opções para desativar esse recurso. Antes de importar para o Substance Painter, exporte malhas sem tangentes. Anteriormente, na documentação da substância, foi afirmado erroneamente que os cálculos de tangentes a dois pontos
no Blender correspondem ao Unity, mas agora o erro foi corrigido!

Maleta de ferramentas Sagui 3


Orientação: personalizado
Espaço tangente: personalizado
Cálculo de tangentes a dois pontos para MikkTSpace: pixel por pixel
Notas: parece que o programa tem opções para visualizar ou criar mapas normais em quase todas as configurações existentes. Incluindo configurações prontas para espaços tangentes 3ds Max e Maya! No entanto, a opção de espaço tangente “Mikk / xNormal” usa tangentes pixel por pixel em dois pontos, e isso não pode ser alterado. Ou seja, o Marmoset Toolbag 3 não pode exibir ou criar corretamente mapas normais para os métodos internos de renderização do Unity. Talvez em versões futuras a situação mude, porque os desenvolvedores estão cientes do problema.

3DCoat


Orientação:
espaço tangente personalizado : personalizado
Cálculo de tangentes a dois pontos para MikkTSpace :?
Notas: Possui muitas opções para visualizar e criar mapas normais. É perfeitamente capaz de combinar o Blender e o UE4, portanto, suporta tangentes pixel por pixel em dois pontos, mas não sei se tangentes de vértice a dois pontos são usadas na predefinição do Unity.

Houdini (16.0.514+)


Orientação: personalizável
Espaço tangente: personalizável *
Cálculo de tangentes a dois pontos para o MikkTSpace: pixel por pixel
Notas: suporta sua própria base de tangentes ou MikkTSpace, tanto para visualização quanto para cozimento, mas apenas na versão pixel por pixel. Parece que, por padrão, ele não usa o MikkTSpace para renderização, mas começando com o Houdini 17.5. As malhas podem ser modificadas com nós internos para usar o MikkTSpace tangente.

Modo (10+?)


Orientação:
espaço tangente personalizado : personalizado
Cálculo de tangentes de dois pontos para MikkTSpace: personalizado (vértice ou pixel por pixel) *
Observações: parece que suporta renderização e cozimento em diferentes espaços tangentes, bem como a opção de tangentes pixel por pixel para dois pontos para exportação. Eu não testei isso.

Knald


Orientação:
espaço tangente personalizado : MikkTSpace
Cálculo de tangentes a dois pontos para MikkTSpace: pixel por pixel
Notas: ele usa o MikkTSpace por padrão e redefine as tangentes das malhas importadas, mas, se necessário, existe uma opção para usar malhas tangentes existentes. A orientação dos mapas normais pode ser invertida com um parâmetro que se aplica a todo o projeto.



Finalmente


Um aspecto importante é que, se o modelo de baixo poli no qual você assa é apenas um plano (por exemplo, para textura lado a lado), tudo o que é escrito é inconseqüente e você pode assar usando qualquer ferramenta ... se você mantiver tudo na orientação correta ou depois, inverta os canais de textura correspondentes.

Além disso, a maioria dos problemas listados no artigo é perceptível apenas em modelos sólidos. As formas orgânicas podem ocultar as diferenças mais sutis, por exemplo, a diferença entre vértices e pixels por tangentes de pixel em dois pontos.

Source: https://habr.com/ru/post/undefined/


All Articles