Детализация текстурой. Карты нормалей в игровом 3D - моделировании.

            Для того, чтобы понимать что такое карта нормалей, нужно разобраться с тем как она работает. Карта нормалей по своей сути является некой картой высот, но с одним отличием, что карта нормалей подразумевает три координатные плоскости, вместо двух. Разберёмся с тем, что такое карта высот. Это чёрно-белое векторное или чаще растровое изображение, отображающее высоту. Приведём аналогию: возьмём карту местности. Высокие горы, окружающие маленькое озеро, на горах лежит снег, а в озере тёмная вода и чем глубже, тем меньше видно. Так вот, карта высот отображает горы и озеро как градиент от чёрного к белому. Чем выше точка, тем она ближе к белому, чем ниже, тем ближе к чёрному, соответственно. Карты высот имеют самое разное применение в моделировании. От создания всё того же ландшафта, до сложных параметрических генераторов.

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

На картинках ниже можно увидеть карту высот (Рис. 1.) и карту нормалей (Рис. 2.). Для их создания использовался генератор Substance Designer. В этом случае, карта высот, созданная множеством узлов и сгенерированная программой преобразована в карту нормалей с помощью специального алгоритма Height to Normal. На рисунках можно видеть отличия в цветовой гамме. Всё потому что карта нормалей, в отличие от карты высот использует вместо одного канала - из чёрного в белый, три канала информации. RGB или Red (Красный), Green (Зелёный), Blue (Синий), что соответствует трём плоскостям в игровом моделировании.

Рис. 1. Карта высот.                                 Рис.2 Карта нормалей.

 

На картинках ниже можно увидеть отличия от включенной карты нормалей и выключенной. Отличия существенные.


Рис. 3. Включенная карта нормалей.


Рис. 4. Выключенная карта нормалей.

            Разберёмся с тем, для чего карта нормалей использует 3 цвета? Каждый цвет отвечает за своё направление в пространстве. Так синий отвечает за высоту, зелёный и красный за вертикальное и горизонтальное направление, соответственно, таким образом создавая градиенты и смешения цветов, образуя различные детали на поверхности. В отличие от карты высот, которая может использоваться только в одном направлении, карта нормалей может создавать проекцию деталей в 3D пространстве и накладываться со всех сторон модели равномерно, не создавая швов, а наоборот их нивелируя. Тут плавно переходим ко второй теме - запекание текстур на модели и уже точнее определимся с тем, что такое карты нормалей.

            Программа для запекания текстур сама определяет какой канал необходимо использовать для той или иной оси. Разберёмся на примере. Ниже приведены несколько изображений кубов в разных вариантах. Без карты нормалей или чистые кубы, с картой нормалей и кубы с самой картой нормалей.

 


Рис. 5. Объекты без активной карты нормалей.


Рис. 6. Объекты с активной картой нормалей.


Рис. 7. Объекты с отображением только карты нормалей.

Так же видна существенная разница, как в случае к предыдущим примером из Рис. 3 и 4. Углы не такие жёсткие за счёт карты нормалей, но на самом деле, кубы остались неизменны. Разберёмся с тем, как это работает.

Начнём с точек, называемых Vertex (вертекс или вершина) на высокополигональной модели. Каждая вершина, образующая модель имеет своё направление в пространстве. Это направление называется нормаль, от чего и происходит название карты нормалей. На изображении ниже (Рис. 8. ) видны синие линии, исходящие от каждой вершины. Это и есть те самые нормали. Человеческий глаз видит это как сглаженная или даже круглая поверхность, но компьютеру не умеет видеть, он читает информацию с нормалей.


Рис. 8. Объект со включенным отображением нормалей вершин.

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

Рис. 9. Результат, который видит человек.

Рис. 10. Результат, который видит компьютер.

Рис. 11. Результат, который получит компьютер в процессе проекции.

Таким образом, компьютеру нужна информация от положения и направления каждой точки высокополигонального объекта относительно плоскостей низкополигонального объекта, на которую он создаёт проекцию каждой нормали.