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 deVertex
Triangle
: {V1 V2 V3} (na ordem correta do enrolamento na direção normal)TriangleList
: Uma lista deTriangle
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?