Гайд по бейкингу. Важная теория: часть 2

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

Что такое нормаль

Если просто, то это перпендикуляр к поверхности. По нему движок определяет, как от поверхности будет отражаться свет.

Луч света отражается от поверхности симметрично. Если луч падает под углом 45 градусов слева, он отразится под таким же углом и продолжит свое движение вправо.

Еще одна деталь: если две сшитых плоскости находятся под углом относительно друг друга, и их нормали смотрят строго перпендикулярно по отношению к плоскости — их стык будет жестким. Условно говоря, они будут выглядеть как две отдельные поверхности.

Гайд по бейкингу. Важная теория: часть 2

Еще нормали можно редактировать для достижения разных эффектов. Например, если изменить угол наклона вектора нормали определенным образом, жесткую грань на стыке двух плоскостей можно превратить в плавный угол.

Гайд по бейкингу. Важная теория: часть 2

Так, с помощью редактирования нормалей, можно симулировать трехмерные эффекты на плоскости. На этом принципе редактирования информации о нормалях объекта устроена работа normal map. Только в этом случае данные записываются в RGB текстуру и наносится на объект через материал.

Трехмерные эффекты на плоскости созданные путем редактирования нормалей.
Трехмерные эффекты на плоскости созданные путем редактирования нормалей.

Информация в карты нормалей перепекается с детализированного high poly объекта. Для этого нужны low poly версия модели и её high poly аналог. High poly зачастую отличается сглаженными углами и большей проработкой деталей. Всё зависит от ситуации, но для начала понимания этих различий будет достаточно.

Проекция при запекании

Какую задачу выполняет Low poly модель при запекании? Помимо UV развертки, которая нужна для объяснения программе куда и какой элемент high poly модели запекать на карте нормалей, low poly используется для создания Cage.

Гайд по бейкингу. Важная теория: часть 2

Cage — это в какой-то степени копия Low poly модели, которая расширяется по нормалям объекта. Затем, из cage внутрь проецируются лучи, которые захватывают все high poly элементы, попавшие в зону cage, и перепекают их на карту нормалей.

Cage — лишь один из подходов к запеканию, в следующих статьях мы разберем другие способы и расскажем об их достоинствах и недостатках.

Гайд по бейкингу. Важная теория: часть 2

Что такое битность

От битности зависит количество оттенков, которое может быть записано в изображении. 24-битное изображение может записать 8 бит, или 256 значений в каждый канал. 256 значений обычно достаточно для текстур типа diffuse, specular или gloss map, потому что они используют более широкий спектр цветов, и на них не нужно четко изображать слабые градиенты.

Если утрировать, битность определяет количество доступных промежуточных оттенков на изображении. Чем выше битность — тем больше доступно оттенков.

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

Гайд по бейкингу. Важная теория: часть 2

Tangent Space Normal

Самый распространенный тип карты нормалей. Она адаптирует направление нормалей вершин объекта, в зависимости от положения объекта в пространстве. Таким образом, нормали объекта отображаются корректно при любом его положении в пространстве. Из-за различий в алгоритмах отображения карт нормалей, Tangent Space Normal разделяется на два типа: DirectX и OpenGL.

Пример Tangent Space Normal.
Пример Tangent Space Normal.
Гайд по бейкингу. Важная теория: часть 2

Отличаются они направленностью света в зеленом канале карты нормалей при запекании. В DirectX свет направлен сверху вниз; обозначается это как -Y.

Карта нормалей состоит из трех каналов — RGB. Это нужно для переноса информации о трех осях XYZ из трехмерного пространства в двухмерное пространство текстуры.

G — зеленый канал, отвечает за ось Y. Cвет в DirectX в зеленом канале направлен снизу вверх, его подписывают как -Y.

World Space Normal

Если tangent space normal адаптирует направление нормалей вершин объекта в зависимости от положения объекта в пространстве, то world space normal записывает статичную информацию. Грубо говоря, если объект при запекании был повернут лицевой стороной на север, а позже ты повернешь его на восток, нормали начнут отображаться некорректно.

Пример World Space Normal из Substance Painter
Пример World Space Normal из Substance Painter

И хоть невозможно двигать объект в пространстве, у таких карт есть одно преимущество — при работе с ними не нужно думать о направленности нормалей объекта.

Их часто используют в текстурировании, так как они могут дать вводную информацию о том, как свет падает на объект. В Substance painter практически каждый генератор работает в том числе и на основе информации из карты World Space Normal.

Object Space Normal — это модифицированная версия World Space Normal. Она отличается тем, что адаптирует карту нормалей и меняет ее ориентацию при перемещении объекта в пространстве.

Из недостатков: карта не подходит для использования на деформирующихся объектах. Например, её невозможно будет корректно применять на стену с симуляцией разрушения, или на развевающуюся на ветру ткань.

Изогнутые карты нормалей сочетают в себе информацию из AO и normal map. Они помогают усилить работу карты ambient occlusion и нужны для большего контроля над отражаемым от объекта светом. Удобно использовать, если нет возможности подключить Screen Space Reflection.

Пример Bent Normal
Пример Bent Normal

Большинство из перечисленных карт встречается в работе очень редко, но знать о них нужно, если планируешь расти в 3D. Чаще всего все используют Tangent Space Normal в качестве карты нормалей и World Space Normal для текстурирования.

Гайд по бейкингу. Важная теория: часть 2

В следующей статье мы поговорим об особенностях работы с Normal map, расскажем, на что стоит обращать внимание и как избежать лишних телодвижений. Stay tuned.

99
2 комментария

Большое спасибо!

Ответить

почему про OpenGL так мало сказано?

Ответить