Cada vez más, la industria 3D está adoptando el estándar de Mikktspace para calcular el espacio tangente para el mapeo normal y otros efectos que dependen del cálculo preciso y consistente del espacio tangente de una aplicación a otra. Blender, xNormal, Unity, Substance Painter y Unreal Engine son solo algunos de los que puedo pensar que ahora usan Mikttspace. Personalmente, también intento volver a codificar mis propios proyectos para adoptar este estándar.
Pero hay muy pocos recursos sobre cómo funciona Mikktspace, ya que es algo relativamente nuevo. Los pocos recursos que existen, generalmente son escasos en detalles y muy técnicos, no muy fáciles de entender para el usuario, o suponen que el codificador tiene un cierto nivel de conocimiento que está un poco por encima del principiante promedio que recién comienza y necesita que las cosas se expliquen con más cuidado.
Estoy buscando una explicación clara de cómo funciona Mikktspace y cómo implementarlo, con una explicación simple de cómo funcionan las matemáticas y el código de una manera que no se limita a un solo idioma.
Por ejemplo, supongamos que un programador tiene un objeto de malla, con un índice de vértices, cada uno con una posición, coordenadas normales y UV, y una lista de triángulos que hacen referencia a ese índice.
Por ejemplo:
Vertex
: {XYZ NX NY NZ ST}VertexIndex
: Una lista deVertex
Triangle
: {V1 V2 V3} (en el orden de bobinado correcto para la dirección normal)TriangleList
: Una lista deTriangle
En términos simples, ¿cómo se podría calcular por vértice un vector tangente (TX TY TZ) y un vector bitangente (BX BY BZ) para cada vértice de una manera que se ajuste a Mikktspace?