¿Cómo funciona Mikktspace para calcular el espacio tangente durante el mapeo normal?

8

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 de Vertex
  • Triangle: {V1 V2 V3} (en el orden de bobinado correcto para la dirección normal)
  • TriangleList: Una lista de Triangle

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?

Grady
fuente
¿Es muy dificil? Cualquiera es bienvenido si siente que puede dar una respuesta. ¿Incluso una breve explicación de lo que difiere específicamente de la técnica de Mikktspace a la técnica general de cálculos de espacio tangente será suficiente?
Grady

Respuestas:

3

Hay más código para ese proyecto:
https://github.com/teared/mikktspace-for-houdini/tree/master/source

También puede encontrar información sobre mapas normales de espacio tangente aquí:
https://archive.blender.org/wiki/index.php/Dev:Shading/Tangent_Space_Normal_Maps/ http://image.diku.dk/projects/media/morten. mikkelsen.08.pdf

Otra información sobre los mapas normales del espacio en tangencia (Mikktspace) no es muy clara.

Una breve explicación sobre los métodos es muy larga y, por lo tanto, he incluido los dos enlaces anteriores para referirme a la buena explicación sobre los mapas normales de espacio tangente.

Nota: Blender también da consejos sobre por qué no usar este método.

Espero que esto haya sido útil :)

Tripl3Fac3
fuente
1
Creo que debería poner algo de información (una especie de introducción) aparte de los enlaces solo. No son muy útiles si algún día se convirtieran en 404.
Aistis
Muy cierto, buena idea Aistis. Pero también puede descargar un sitio web si lo desea.
Tripl3Fac3
Estoy aceptando esta respuesta como la respuesta correcta porque Tripl3Fac3 me ha sido de gran ayuda personalmente, y la información que Tripl3Fac3 ha proporcionado en los enlaces resume bastante bien todos los mejores recursos colectivos sobre este tema tal como está actualmente.
Grady
1
El enlace pdf funciona bien para mí @Fire
Tripl3Fac3
1
Esta respuesta se eliminaría de inmediato en el desbordamiento de pila. Es sorprendente que no se haya eliminado aquí. Esta no es una respuesta. Son algunos enlaces. Los enlaces pueden dejarse en los comentarios o usarse para aumentar una respuesta, pero sin una explicación real en la pregunta en sí misma, no es una respuesta y debe marcarse y eliminarse como "no es una respuesta"
gman