Запекание нормалей это камень преткновения практически для всех начинающих (и не очень) 3D-художников. Как правило, все сначала отправляются читать 4-х страничный манускрипт про нормали на render.ru, в котором много воды, а многие рецепты уже устарели. Сравнительно недавно Leonardo Lezzi сделал небольшую и очень полезную памятку “No More Wrong Normal Maps”, которая описывает основные аспекты запекания нормалей.
Мы разберём запекание нормалей на примере Substanсe Painter и возможные проблемы. Но об этом позднее. Давайте сначала тезисно разберём теорию.
Геометрия Hi-Poly и Low-Poly моделей
1. Запекаемые детали на Hi-poly не должны иметь поверхностей, расположенных перпендикулярно плоскости запекания. Такие поверхности станут невидимыми при запекании. Чтобы этого избежать, необходимо делать пологий угол наклона поверхности. Пример:
На верхней картинке представлен случай, когда детализация на объекте имеет большое количество поверхностей, расположенных перпендикулярно плоскости запекания (другими словами – весь рельеф выполнен под 90 градусов к low-poly модели). При запекании такой модели мы получим.. равномерную, чистую карту нормалей. Почему так происходит? Из каждой точки поверхности Low-poly модели испускаются лучи (в положительную и отрицательную сторону от нормали поверхности), и то, что они встречают на своём пути и будет перенесено на карту нормалей. Как не сложно догадаться, лучи будут проходить вскользь поверхностей, расположенных под 90 градусов к поверхности запекания. Они не пересекаются с лучами.
Именно по этой причине делают скосы на болтах, выемках и прочем рельефе (нижняя картинка).
Практический пример:
2. Геометрия Low-Poly и Hi-Poly не должны сильно отличаться. Стоит избегать моментов, когда заметная часть Low-Poly модели находится в пустоте. На таких местах будут возникать артефакты. Особенно это заметно на острых углах. Чтобы этого избежать, добавляйте дополнительную геометрию на Low-Poly модели, приближая её по силуэту к Hi-Poly. Пример:
3. По каждой острой грани (sharp edges) должен проходить шов развёртки (seam edges). Соответсвенно, каждый остров развёртки должен должен находится в пределах одной группы сглаживания (не должно быть острых граней, проходящих через остров).
Этого можно достичь следующим способом:
- Настраиваются все острые грани на объекте
- Все острые грани помечаются как швы
- Затем добавляются, при необходимости, дополнительные швы, чтобы получить корректную развёртку
Развёртка
1. Старайтесь, чтобы бОльшая часть прямых линий находилась строго вертикально или горизонтально. В противном случае на текстуре будет возникать пикселизация прямых линий.
2. Выдерживайте расстояние между островами развёртки, чтобы избежать артефактов на швах развёртки. Рекомендуемые значения расстояний между островами (margin/padding) для Unity в зависимости от размера текстуры:
- 256 px – 2px
- 512 px – 4px
- 1024 px – 8px
- 2048 px – 8 px
- 4096 px – 16 px
3. Если у вас на развёртке есть наложенные друг на друга острова, то сдвиньте их на 1 UDIM за пределы UV-пространства, оставив на развёртке только одну “копию” острова. Острова, находящиеся за пределами развёртки не будут участвовать в запекании и их можно будет легко вернуть на место после запекания. Примечательно, что в Substance Painter на сдвинутые на 1 UDIM острова будет корректно накладываться текстура, но по этим островам нельзя рисовать.
Алгоритмы запекания
1. Average Normals – при запекании нормали поверхности усредняются, что позволяет качественно запечь фаски с Hi-poly модели. При это планарные детали (объекты на Hi-poly, находящиеся на поверхности) начинают смещаться и деформироваться. Длина проникновения лучей при запекании регулируется константным значение (причём некоторые программы позволяют задавать разное значение для лучей, исходящих в положительном и отрицательном направлении от нормалей).
2. Cage – запекание с дополнительной моделью-клеткой (cage), которая ограничивает собой длину лучей при запекании, а не значением, как при запекании Average Normals. Результаты запекания аналогичны Average Normals – хорошие фаски, плохие планарные детали.

3. Planar/Offset – запекание планарных деталей. При запекании лучи испускаются по направлению нормалей (перпендикулярно плоскости полигонов), длина лучей регулируется константным значением. Позволяет качественно запечь планарные детали, но не печёт фаски.
Как качественно запечь и фаски и планарные детали?
Как говорилось выше, фаски хорошо запекаются при использовании средних нормалей (average normals) или cage, а планарные детали необходимо печь без этих опций (Planar/Offset). Отсюда следует, чтобы получить качественную карту нормалей по всей модели, необходимо скомбинировать две карты, запечённые разными алгоритмами. Как это сделать, мы рассмотрим на примере Substance Painter.
1. Добавляем суффикс _Average к названию Texture Set’а. Это позволит нам запечь несколько вариантов карт без перезаписи.
2. Оставляем при запекании только Normal с флагом “Average Normals”. Остальные параметры настраиваются по ситуации.
3. Убираем суффикс _Average в названии Texture Set’а.
4. Запекаем все карты без флага “Average Normals”.
5. В “Texture Set Settings” выставляем Normal mixing “Replace”.
6. Создаём два слоя заливки (Fill Layer) для карт нормалей.
7. На слое Normals_Average отключаем все каналы, кроме “Normal” и назначаем Normal Map’у, запечённую по средним нормалям (с суффиксом _Average).
8. На слое Normals_Planar отключаем все каналы, кроме “Normal” и назначаем Normal Map’у, запечённую БЕЗ средних нормалей.
9. Добавляем на эти слои маски.
10. Добавляем на маску слоя Normals_Average “Paint” и “Anchor Point”
11. На маске слоя Normals_Planar добавляем “Fill”.
12. У “Fill” указываем в “Grayscale” источник “Anchor Points/Normal_Average mask” и в уровнях нажимаем кнопку “Invert”.
13. Теперь при рисовании в “Paint” маски слоя Normal_Average чёрным цветом будет проявляться слой Normals_Planar. Для удобства контроля можно временно включить канал “Color” в слое Normals_Planar и задать любой контрастный цвет.
Конечно же, здесь описаны не все случаи и тонкости, потому что вышла бы слишком объёмная и запутанная статья. Но это основные моменты, при знании которых, в большинстве случаев, при запекании не возникнет проблем.