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

21 мая 6:29

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

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

На
картинках ниже можно увидеть карту высот (Рис. 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. Результат, который получит
компьютер в процессе проекции.

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