3D-индустрия все чаще принимает стандарт Mikktspace для расчета касательного пространства для нормального отображения и других эффектов, которые основаны на точном и последовательном вычислении касательного пространства от одного приложения к другому. Блендер, xNormal, Unity, Substance Painter и Unreal Engine - вот лишь некоторые из них, о которых я сейчас думаю, которые используют Mikttspace. Я лично пытаюсь перекодировать свои собственные проекты, чтобы принять этот стандарт.
Но есть очень мало ресурсов о том, как работает Mikktspace, поскольку это относительно новая вещь. Таких небольших ресурсов обычно не хватает на детали и они очень технически сложны, не очень удобны для понимания или предполагают, что кодер обладает определенным уровнем знаний, который немного выше среднего новичка, только начинающего, который нуждается в объяснениях более тщательно.
Я ищу четкое объяснение того, как работает Mikktspace и как его реализовать, с простым объяснением того, как математика и код работают таким образом, который не ограничивается одним языком.
В качестве примера, давайте предположим, что у программиста есть объект сетки с индексом вершин, каждая из которых имеет позицию, нормаль и координату UV, и список треугольников, которые ссылаются на этот индекс.
Например:
Vertex
: {XYZ NX NY NZ ST}VertexIndex
: СписокVertex
Triangle
: {V1 V2 V3} (в правильном порядке намотки для нормального направления)TriangleList
: СписокTriangle
Проще говоря, как можно было бы рассчитать для каждой вершины тангенциальный вектор (TX TY TZ) и битангентный вектор (BX BY BZ) для каждой вершины способом, который соответствует Mikktspace?