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?
источник
Ответы:
Для этого проекта есть больше кода:
https://github.com/teared/mikktspace-for-houdini/tree/master/source
Также вы можете найти информацию о картах нормалей касательного пространства здесь:
https://archive.blender.org/wiki/index.php/Dev:Shading/Tangent_Space_Normal_Maps/ http://image.diku.dk/projects/media/morten. mikkelsen.08.pdf
Другая информация о картах нормальных пространств (Mikktspace) не очень ясна.
Краткое объяснение методов очень длинное, и поэтому я включил две ссылки выше, чтобы сослаться на хорошее объяснение о картах нормалей касательного пространства.
Примечание: Blender также дает совет, почему бы не использовать этот метод.
Я надеюсь, что это было полезно :)
источник