Como o Mikktspace funciona para calcular o espaço tangente durante o mapeamento normal?

8

Cada vez mais, a indústria 3D está adotando o padrão Mikktspace para calcular o espaço tangente para mapeamento normal e outros efeitos que dependem do cálculo preciso e consistente do espaço tangente de um aplicativo para outro. Blender, xNormal, Unity, Substance Painter e Unreal Engine são apenas alguns exemplos que agora usam o Mikttspace. Pessoalmente, estou tentando re-codificar meus próprios projetos para adotar esse padrão também.

Mas existem muito poucos recursos sobre como o Mikktspace funciona, pois é uma coisa relativamente nova. Os poucos recursos disponíveis são geralmente escassos em detalhes e muito técnicos, pouco compreensíveis para o usuário, ou assumem que o codificador possui um certo nível de conhecimento que está um pouco acima do novato comum, começando por quem precisa de coisas explicadas com mais cuidado.

Estou procurando uma explicação clara de como o Mikktspace funciona e como implementá-lo, com uma explicação simples de como a matemática e o código funcionam de uma maneira que não se limita a apenas um idioma.

Por uma questão de exemplo, vamos supor que um programador tenha um objeto de malha, com um índice de vértices, cada um com uma posição, coordenada normal e UV e uma lista de triângulos que fazem referência a esse índice.

Por exemplo:

  • Vertex: {XYZ NX NY NZ ST}
  • VertexIndex: Uma lista de Vertex
  • Triangle: {V1 V2 V3} (na ordem correta do enrolamento na direção normal)
  • TriangleList: Uma lista de Triangle

Em termos simples, como se calcularia por vértice um vetor tangente (TX TY TZ) e vetor bitangente (BX BY BZ) para cada vértice de uma maneira que se adapte ao Mikktspace?

Grady
fonte
É muito difícil? Qualquer um é bem-vindo a tentar se achar que pode dar uma resposta. Mesmo apenas uma breve explicação do que difere especificamente da técnica de Mikktspace para a técnica geral de cálculos de espaço tangente fará?
Grady

Respostas:

3

Há mais código para esse projeto:
https://github.com/teared/mikktspace-for-houdini/tree/master/source

Além disso, você pode encontrar informações sobre mapas normais de espaço tangente aqui:
https://archive.blender.org/wiki/index.php/Dev:Shading/Tangent_Space_Normal_Maps/ http://image.diku.dk/projects/media/morten. mikkelsen.08.pdf

Outras informações sobre os mapas normais do espaço tanget (Mikktspace) não são muito claras.

Uma breve explicação sobre os métodos é muito longa e, portanto, incluí os dois links acima para se referir à boa explicação sobre mapas normais do espaço tangente.

Nota: O Blender também fornece conselhos sobre por que não usar este método.

Eu espero que isto tenha sido útil :)

Tripl3Fac3
fonte
11
Eu acho que você deve colocar algumas informações (uma introdução das sortes) além dos links. Eles não são muito útil se tivessem um dia se tornar 404.
Aistis
Muito verdade, boa ideia Aistis. Mas você também pode baixar um site, se quiser.
Tripl3Fac3
Estou aceitando esta resposta como a resposta correta, porque o Tripl3Fac3 foi uma grande ajuda para mim, pessoalmente, e as informações que o Tripl3Fac3 forneceu nos links resumem praticamente todos os melhores recursos coletivos sobre esse assunto, como está atualmente.
Grady
11
O link em pdf funciona bem para mim @Fire
Tripl3Fac3
11
Esta resposta seria excluída imediatamente no estouro da pilha. É surpreendente que não tenha sido excluído aqui. Esta não é uma resposta. São alguns links. Os links podem ser deixados nos comentários ou usados ​​para aumentar uma resposta, mas sem uma explicação real na pergunta em si, ela não é resposta e deve ser sinalizada e excluída como "não é uma resposta"
gman