Как Mikktspace работает для вычисления касательного пространства во время нормального отображения?

8

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?

Грейди
источник
Это слишком сложно? Любой желающий может попробовать, если он чувствует, что может дать ответ. Даже короткое объяснение того, что конкретно отличается от техники Микктспейс от общего метода вычислений касательного пространства?
Грэди

Ответы:

3

Для этого проекта есть больше кода:
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 также дает совет, почему бы не использовать этот метод.

Я надеюсь, что это было полезно :)

Tripl3Fac3
источник
1
Я думаю, что вы должны поместить некоторую информацию (введение сортов) отдельно от ссылок. Они не очень помогают, если в один прекрасный день они станут 404.
Aistis
Очень верно, хорошая идея Aistis. Но вы также можете скачать сайт, если хотите.
Tripl3Fac3
Я принимаю этот ответ как правильный ответ, потому что Tripl3Fac3 очень помог мне лично, и информация, которую Tripl3Fac3 предоставил в ссылках, в значительной степени суммирует все коллективные лучшие ресурсы по этой теме в ее нынешнем виде.
Грэди
1
PDF-ссылка отлично работает для меня @Fire
Tripl3Fac3
1
Этот ответ будет немедленно удален при переполнении стека. Удивительно, что он не был удален здесь. Это не ответ. Это несколько ссылок. Ссылки могут быть оставлены в комментариях или использованы для дополнения ответа, но без фактического объяснения в самом вопросе он не является ответом и должен быть помечен и удален как «не ответ»
gman