Почему обычные карты преимущественно синие?

Почему обычные карты преимущественно голубые, а не случайные?

Я предполагаю, что нормальные векторы 3D-объекта могут указывать во всех направлениях, например:

(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ... 

введите описание изображения здесь>> </p></body></html>

40 голосов | спросил Jinbom Heo 8 MonEurope/Moscow2014-12-08T13:03:08+03:00Europe/Moscow12bEurope/MoscowMon, 08 Dec 2014 13:03:08 +0300 2014, 13:03:08

2 ответа


67

Существует два типа обычных карт, обычно используемых в разработке игр. То, как вы думаете, что они должны работать, - это способ работы одного типа (нормальные карты модели), но в большинстве игр используется другой тип (нормальные карты касательного пространства), поэтому вы связываете преимущественно синие текстуры с нормальными картами.

Пример

С нормальными картами модельного пространства каждый канал кодирует точное значение нормали, используя ту же систему координат, что и вершины модели, с которой она используется. Это означает, что разные части нормальной карты будут иметь разные оттенки, но пиксели рядом друг с другом обычно имеют одинаковые цвета. Пример карты нормалей модели-пространства отображается выше ( источник ).

Карты нормального касательного пространства обычно светло-голубые. Этот тип карты определяет нормали в координатном пространстве, уникальном для положения каждого пикселя на поверхности сетки. Он использует (интерполированную) вершинную нормаль как ось Z и два других ортогональных вектора, называемых касательными и бинагентными, как оси X и Y. По существу, вы можете представить нормали на карте как «смещение» от нормали для этого пикселя, вычисленного путем интерполяции нормалей вершин. Касательные и бинагентные векторы также интерполируются по данным вершин и определяют, какое направление на сетке соответствует «вверх» и «слева» в нормальной карте. Изображение, предоставленное в вопросе, является отличным примером того, как выглядит обычная карта нормального касательного пространства, поэтому я не буду здесь приводить другой пример.

Компоненты нормального нормально (без каламбура) варьируются от [-1, 1]. Но компоненты цвета в изображении варьируются от [0, 1] (или [0, 255], но обычно они нормализуются до [0, 1]). Таким образом, нормали масштабируются и смещаются так, что нормальный (0, 0, 1) становится цветом (0.5, 0.5, 1). Это светло-синий цвет, который вы видите на обычных картах, и он не указывает на отклонение от нормали интерполированных вершин при использовании нормалей нормального положения.

Приоритет тангенциально-пространственных нормалей предпочтителен по сравнению с нормалями модельного пространства из-за того, что их легче создавать и их можно использовать для множественных сеток. Кроме того, если они используются с анимированной сеткой, всегда используются нормали тангенциального пространства, потому что нормали постоянно меняются.

ответил bcrist 8 MonEurope/Moscow2014-12-08T13:26:35+03:00Europe/Moscow12bEurope/MoscowMon, 08 Dec 2014 13:26:35 +0300 2014, 13:26:35
6

Нормальная карта в основном указывает наружу от поверхности. Предполагая, что вы идете с обычным отображением компонента Z нормальных векторов XYZ, являющихся направлением «глубина», и это сопоставление с B-компонентом цветового пространства RGB, вы получите в большинстве обычных векторов преимущественно синий цвет.

Если текстура была, скажем, красной, то это означало бы, что нормальная карта - это поверхность, которая в основном указывает справа. Вы можете увидеть эту функцию на вашем образце, так как самый правый край рельефа имеет красноватый оттенок.

Полная поверхность красноватого цвета не имела бы никакого смысла. Это указывает на поверхность, которая полностью обращена вправо. Это будет просто смоделировано с геометрией, а не частью нормальной карты.

ответил Sean Middleditch 8 MonEurope/Moscow2014-12-08T13:23:19+03:00Europe/Moscow12bEurope/MoscowMon, 08 Dec 2014 13:23:19 +0300 2014, 13:23:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132