Запекание это операция, которая переносит детали с тяжёлой модели на лёгкую. Скульпт на восемь миллионов полигонов превращается в модель на двадцать тысяч плюс набор текстур, и в кадре разница почти не видна.
Операция несложная, но она даёт больше всего артефактов на всём пайплайне: разводы на швах, чёрные пятна, вывернутый рельеф, проекция соседних деталей друг на друга. Почти все они возникают на этапе подготовки, а не запекания. Разберём порядок, который эти проблемы предотвращает.
Что и зачем запекают
Основные карты и что каждая даёт.
- Normal. Главная карта. Хранит направление нормали в каждой точке и заставляет плоскую поверхность выглядеть рельефной. Именно она переносит поры, царапины и складки со скульпта.
- Ambient Occlusion. Затенение в углублениях и стыках. Используется как маска для грязи и как подмешивание к финальному изображению.
- Curvature. Выпуклости и вогнутости. Основа для потёртостей на рёбрах и грязи в углублениях, ключевая карта для процедурного текстурирования.
- Position. Положение точки в пространстве объекта. Позволяет делать градиенты сверху вниз: пыль на горизонтальных поверхностях, подтёки.
- Thickness. Толщина в точке. Нужна для подповерхностного рассеивания и для эффектов просвечивания.
- Color ID. Разные материалы залиты разными цветами. Позволяет назначать материалы в текстурном пакете одним кликом.
Подготовка: девяносто процентов результата
Порядок, нарушение которого гарантирует артефакты.
Низкополигональная модель
Требования жёсткие. Сетка из четырёхугольников, без n-gon и без двойных вершин. Масштаб применён через Ctrl и A. Нормали пересчитаны наружу. Никаких модификаторов, кроме тех, что нужны при запекании.
Про то, какая сетка считается пригодной, у нас есть отдельный разбор по ретопологии в Blender.
Развёртка
Швы должны идти по естественным границам формы и по невидимым местам. Острова не пересекаются, между ними есть отступ. Плотность текселя одинаковая по всей модели, иначе одна часть будет чёткой, а другая мыльной.
Отступ между островами зависит от разрешения текстуры: при 2048 пикселях достаточно четырёх до восьми пикселей. Слишком плотная укладка приводит к тому, что цвет соседнего острова протекает через границу при сжатии текстуры.
Сглаживание
Ключевой пункт, о котором забывают. Карта нормалей запекается относительно нормалей низкополигональной модели, поэтому её сглаживание должно совпадать с тем, что будет в движке или рендере.
Простое правило: включите Shade Smooth на всей модели и разбейте нормали по границам UV-островов. Тогда резкие грани получатся за счёт швов, а карта останется корректной. Смешивать плоские и сглаженные грани без соответствующих швов нельзя: получите чёрные полосы.
Высокополигональная модель
Должна стоять точно в том же месте, что и низкополигональная, и повторять её форму. Расхождение силуэта приводит к тому, что проекция промахивается.
Клетка и расстояние проекции
Самая частая причина артефактов и самый непонятный для новичка параметр.
При запекании из каждой точки низкополигональной модели выпускается луч по нормали. Он должен попасть в поверхность высокополигональной. Расстояние, на которое он ищет, задаётся параметром Extrusion, а направление можно уточнить клеткой.
Слишком маленькое расстояние. Луч не достаёт до высокополигональной модели, и в этом месте карта остаётся пустой. Выглядит как дыры и пятна.
Слишком большое расстояние. Луч проходит насквозь и попадает в соседнюю часть модели. Выглядит как отпечаток одной детали на другой: классический случай, когда на щеке персонажа проступает ухо.
Клетка. Это копия низкополигональной модели, раздутая так, чтобы полностью охватывать высокополигональную. Лучи выпускаются от неё внутрь, и направление получается предсказуемым. Клетка нужна на моделях со сложным силуэтом: пальцы, ремни, торчащие детали.
Практический подход: начните без клетки с небольшим Extrusion, посмотрите на результат, увеличивайте до исчезновения дыр. Если появились чужие отпечатки, делайте клетку.
Порядок запекания в Blender
- Создайте изображение нужного разрешения. Для карты нормалей обязательно снимите галку sRGB и поставьте Non-Color: это карта данных, а не картинка.
- Назначьте материал низкополигональной модели и добавьте в него узел Image Texture с этим изображением. Узел должен быть выделен, именно в него пойдёт результат.
- Выделите сначала высокополигональную, затем с Shift низкополигональную. Активной должна быть низкополигональная.
- В настройках Bake включите Selected to Active, выберите тип карты, задайте Extrusion и при необходимости укажите клетку.
- Запеките и обязательно сохраните изображение вручную: Blender не сохраняет его автоматически, и при закрытии файла результат пропадёт.
Для карты нормалей выберите пространство Tangent: оно позволяет использовать карту на деформируемой модели. Object Space даёт более точный результат, но работает только на неподвижных объектах.
Разбор артефактов по внешнему виду
Чёрные пятна на плоскостях. Луч не нашёл поверхность. Увеличьте Extrusion или проверьте, что высокополигональная модель на месте.
Отпечаток соседней детали. Extrusion слишком большой. Уменьшите или сделайте клетку.
Резкие полосы вдоль швов UV. Не совпадает сглаживание. Проверьте, что нормали разбиты по швам развёртки.
Рельеф вывернут наизнанку. Перепутано направление зелёного канала. В Blender и в некоторых движках оно разное: канал инвертируется одним узлом.
Ступенчатые края деталей. Разрешение текстуры мало для этой плотности деталей. Либо поднимайте разрешение, либо перераспределяйте плотность развёртки.
Волнистость на плоских гранях. Обычно следствие того, что низкополигональная модель не совпадает по форме с высокополигональной на этом участке.
Швы видны на готовой модели. Не хватило отступа между островами либо не включено расширение краёв при запекании.
Запекание AO и curvature
У этих карт свои особенности.
Ambient Occlusion. Запекается с высокополигональной модели, чтобы поймать мелкий рельеф. Ключевой параметр это расстояние трассировки: слишком большое даёт общее затемнение всей модели, слишком малое ловит только самые узкие щели. Ориентируйтесь на размер объекта, а не на значение по умолчанию.
Curvature. В Blender нет отдельного типа запекания для неё, поэтому есть два пути. Первый: запечь Normal и получить кривизну из неё узлами или в текстурном пакете. Второй: использовать аддон, который делает это напрямую. Второй способ обычно даёт более чистый результат.
Обе карты запекаются в цветовом пространстве Non-Color: это данные, а не изображение.
Разрешение и плотность текселя
Как выбрать, чтобы не переплачивать памятью.
Плотность текселя измеряется в пикселях на единицу длины. Практический ориентир для игровых ассетов это 512 до 1024 пикселя на метр в зависимости от того, насколько близко игрок подойдёт к объекту.
Важнее абсолютного разрешения то, чтобы плотность была одинаковой на всех объектах сцены. Иначе рядом стоящие предметы выглядят так, будто сделаны в разных играх.
Практическое правило: сначала задайте плотность, потом от неё считайте разрешение текстуры для каждого объекта. А не наоборот, когда всё подряд получает 4096 просто на всякий случай.
Проверка результата
Запечённую карту нельзя принимать по внешнему виду самой текстуры. Смотреть надо на модель.
- Соберите материал с картой нормалей через узел Normal Map и проверьте на модели.
- Покрутите свет. Артефакты нормалей проявляются при скользящем освещении, а при фронтальном их не видно.
- Сравните силуэт с высокополигональной моделью. Рельеф на карте не меняет силуэт, поэтому крупные формы должны быть в геометрии.
- Проверьте в целевом движке. Разное соглашение о направлении каналов приводит к тому, что в Blender всё хорошо, а в движке рельеф вывернут: подробности переноса разбирали в материале про экспорт из Blender в Unreal Engine 5.
- Посмотрите на швы при вращении модели, а не на статичном кадре.
Ускорение процесса
Запекание тяжёлой модели занимает минуты, а с ошибкой приходится повторять.
Сначала запекайте на низком разрешении, например 512 пикселей. Все артефакты видны и на нём, а времени уходит в разы меньше. Финальное запекание делайте один раз, когда всё сошлось.
Разбивайте сложные модели на части и запекайте отдельно: так проще управлять расстоянием проекции и искать источник проблемы. Части с сильно разной геометрией всё равно требуют разных настроек.
И складывайте удачные настройки в библиотеку: набор узлов для сборки материала из запечённых карт переиспользуется в каждом проекте. Как организовать такую библиотеку, разбирали в материале про Asset Library в Blender.
Частые вопросы
Почему на карте нормалей видны швы развёртки?
Две причины. Либо не хватило отступа между островами и цвета протекли друг в друга, либо сглаживание низкополигональной модели не разбито по швам. Проверяйте вторую причину первой: она встречается чаще.
Нужна ли клетка всегда?
Нет. На простых формах достаточно правильно подобранного Extrusion. Клетка нужна там, где нормали расходятся в разные стороны: пальцы, ремни, тонкие выступающие элементы.
Можно ли запечь без высокополигональной модели?
Можно запечь AO, curvature и position с самой модели: они считаются по её геометрии. Карта нормалей без источника детализации бессмысленна, переносить нечего.
Что делать, если рельеф выглядит вдавленным вместо выпуклого?
Инвертировать зелёный канал карты. Разные программы используют разные соглашения, и это самая распространённая несовместимость.
Сколько занимает запекание тяжёлой модели?
От нескольких минут до получаса на карту в зависимости от полигонажа исходника и разрешения. Именно поэтому имеет смысл отлаживать на низком разрешении и только потом запускать финальный проход.
