Почему карты нормалей преимущественно синего цвета, а не случайного цвета?
Я предполагаю, что нормальные векторы трехмерного объекта могут указывать в любом направлении, например:
(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ...
Почему карты нормалей преимущественно синего цвета, а не случайного цвета?
Я предполагаю, что нормальные векторы трехмерного объекта могут указывать в любом направлении, например:
(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ...
Ответы:
Существует два типа карт нормалей, обычно используемых при разработке игр. Вы думаете, что они должны работать так, как работает один тип (карты нормалей в пространстве моделей), но в большинстве игр используется другой тип (карты нормалей в касательном пространстве), поэтому вы ассоциируете в основном синие текстуры с картами нормалей.
При использовании карт нормалей в пространстве модели каждый канал кодирует точное значение нормали, используя ту же систему координат, что и вершины модели, с которой он используется. Это означает, что разные части карты нормалей будут иметь разные оттенки, но пиксели рядом друг с другом обычно будут иметь одинаковые цвета. Пример карты нормалей пространства модели показан выше ( источник ).
Карты нормалей касательного пространства обычно светло-голубые. Этот тип карты определяет нормали в координатном пространстве, уникальном для позиции каждого пикселя на поверхности сетки. Он использует (интерполированную) нормаль к вершине в качестве оси Z и два других ортогональных вектора, называемых касательной и битовой, в качестве осей X и Y. По сути, вы можете думать о нормали на карте как о «смещении» от нормали для этого пикселя, вычисленной путем интерполяции нормали вершины. Касательные и битангентные векторы также интерполируются из данных вершин и определяют, какое направление на сетке соответствует «вверх» и «влево» на карте нормалей. Изображение, представленное в вопросе, представляет собой прекрасный пример того, как выглядит типичная карта нормалей касательного пространства, поэтому я не буду приводить здесь другой пример.
Компоненты нормального обычно (без каламбура) варьируются от [-1, 1]
. Но компоненты цвета в изображении варьируются от [0, 1]
(или [0, 255]
обычно они нормализованы до [0, 1]
). Таким образом, нормали масштабируются и смещаются так, что нормаль (0, 0, 1)
становится цветом (0.5, 0.5, 1)
. Это светло-синий цвет, который вы видите на картах нормалей, и он указывает на отсутствие отклонения от интерполированной нормали вершины при использовании нормалей касательного пространства.
Причина, по которой нормали касательного пространства предпочтительнее нормалей модельного пространства, объясняется тем, что их проще создавать, и их можно использовать для нескольких сеток. Кроме того, при использовании с анимированной сеткой всегда используются нормали касательного пространства, потому что нормали постоянно меняются.
bitangent
и binormal
правильно.
Карта нормалей в основном указывает наружу от поверхности. Предполагая, что вы используете обычное отображение компонента Z нормальных векторов XYZ, являющегося направлением «глубины», и сопоставление с компонентом B цветового пространства RGB, в результате большинство нормальных векторов будет в основном синим.
Если бы текстура была, скажем, красной, то это означало бы, что карта нормалей - это поверхность, которая в основном направлена вправо. Вы можете видеть эту особенность на вашем образце изображения, так как крайний правый край неровностей имеет красноватый оттенок.
Полная поверхность красноватого цвета не будет иметь никакого смысла. Это указывало бы на поверхность, которая полностью обращена вправо. Это было бы просто смоделировано с геометрией, а не частью карты нормалей.