Всё про Bake (запечку) как этап ААА-пайплайна
https://dtf.ru/gamedev/96898-vse-pro-bake-zapechku-kak-etap-aaa-payplayna
Мы продолжаем цикл статей по пайплайну разработки стилизованных персонажей. Сегодня расскажем, что такое этап запечки, и как перенести детализацию с высокополигональной модели (high poly) на низкополигональную (low poly).
В закладки
Слушать
Запечка (Bake) — четвёртый этап ААА-пайплайна. На прошлом мы сделали развёртку, а сейчас будем её использовать для создания Normal Map, AO и Color ID.
Примечание: нам часто говорят, что правильнее писать «запекание», а не «запечка». Мы пишем «запечка», потому что это устоявшийся термин в индустрии.
Гугл на слово запечка показывает то, что нам нужно, а на слово запекание предлагает запечь курочку
Что такое запечка
Взглянем на low poly модель, которую сделал наш студент Leon.
В ней минимум полигонов и чистая сетка. Эта модель будет загружаться в игровой движок.
Есть ещё high poly модель с высокой детализацией и скульпт.
High poly модели под сабдив и скульпт
Технология запечки позволяет перенести все детали с high poly и скульпта на low poly-модель.
В итоге, в игровом движке будет low poly модель с минимальным количеством полигонов, но выглядеть она будет так, как будто на ней есть все эти детали:
Для внимательных: ID Map никак не влияет на вид модели, в отличие от нормала и АО, но она пригодится при текстурировании, поэтому эту карту тоже будем печь.
Как это работает?
Мы берём low poly модель и добавляем на неё запечённые карты нормала и АО. Эти карты обманывают поведение игрового света. Модель начинает бликовать так, как будто на ней есть все эти фаски, вырезы и прочие детали.
Для тех, кто не понимает, о чём речь: мы очень подробно писали про вертекс нормали и принцип работы нормала в статье про сетку.
На этом этапе пайплайна — запечке, — наша задача: запечь 3 карты.
1) Normal map — карту неровностей
2) Ambient Occlusion (AO) — карту затенения
3) Color ID — цветные маски
В Marmoset можно запечь гораздо больше карт, про это будет дальше.
Мы добавим эти карты на нашу low poly модель, на ней появится вся детализация с high poly и скульпта, а благодаря карте Color ID модель будет легче разбить по материалам и текстурировать.
Все карты создаются на основе развёртки, которую мы сделали на прошлом этапе пайплайна. Без развёртки карты не запекутся. Если есть ошибки на развёртке или low poly модели, то мы столкнёмся с кучей проблем.
Ссылки на теорию
Вот несколько наших статей, из которых можно понять, как работает «магический» трюк с обманом вертекс нормалей.
#1. Практическое руководство про нормал мап
#2. Статья про сетку
#3. Статья про развёртку
Какие карты будем печь
Нет смысла запекать карты, если не знаешь, что они делают и как работают.
1. Normal Map
Normal Map
Normal Map переводится как «карта нормалей». Она изменяет направление блика на геометрии.
Карта создаёт виртуальные вертекс нормали в каждой точке low poly модели и искажает поведение света. Если наложить запечённый нормал на модель, то она будет выглядеть почти как high poly.
Вот хороший пример: low poly модель с включенным нормалом и без него.
Модель с включенным нормалом и без него
Новые полигоны не создаются, это лишь иллюзия формы:
Все детали и затенения на этой low poly сетке — иллюзия.
Все детали и затенения на этой low poly сетке — иллюзия.
Чтобы создать нормал, нужно взять развёртку, которую мы делали ранее, взять high poly и скульпт, загрузить в программу для запечки и нажать кнопку «bake».Там много нюансов, но мы обо всём расскажем.
Из чего печётся Normal map
Что нужно знать о нормале
Небольшие чёрные полосы на нормале — это нормально. Никто не будет разглядывать нашу модель под микроскопом.
Чёрные полоски на нормале
Почему не стоит сильно волноваться о чёрных полосах? Игрок почти всегда видит модель в игре на расстоянии. Поэтому не нужно тратить несколько часов, чтобы убрать чёрные полоски на нормале:
Та же модель, но на расстоянии. Чёрные полосы не режут глаза, — значит, всё окей.
Из чего состоит карта нормалей
Normal map создает иллюзию объёма благодаря трем картам в каналах текстуры: красный, зелёный, синий.
Чтобы переключаться между каналами, откроем файл с нормалом в Photoshop и зайдём во вкладку Channels.
Красный канал показывает искажение вертекс нормалей по горизонтали. Чем светлее пятно на красном канале — тем сильнее виртуальная поверхность наклонена вправо, а чем темнее — тем больше «поверхность» бликует влево.
Красный канал нормала
Зелёный канал — работает так же, но искажает шейдинг по вертикали.Светлый-блик поворачивается наверх, а тёмный — вниз.
Зелёный канал нормала
Чтобы лучше понять разницу между этими двумя каналами, взглянем на эту часть модели:
У бочки на high poly есть фактура дерева.
Затемнение идёт только по одной из осей.
Так как красный канал нормала показывает искажение вертекс-нормалей только по горизонтали, а скосы между досками как раз и отклоняются влево или вправо, то на нём будет много информации.
А зелёный канал — показывает искажения по вертикали. Так как виртуальные плоскости не отклоняются вверх/вниз, то затемнений почти нет, то информации на нормале в этом канале почти не будет:
Зелёный и красный канал нормала на примере бочки
Красный и зелёный каналы — основные для нас как для моделлеров. Но у нормала есть ещё синий канал.
Синий канал имитирует углубления в объекте. В играх он практически не используется.
За счёт изменения синего цвета на нормале создаются искажения на плоской поверхности.
Если на синем канале есть артефакты, можно просто выключить этот канал, то есть отключить синий цвет у нормал мапа в фотошопе. Или просто их замазать артефакты кисточкой.
Синий канал нормала
Больше про три канала нормала — в этой статье.
У каждого канала — своя функция. При артефактах после запечки иногда нужно править нормал руками. Иногда это делается сразу на всех трёх каналах, а иногда — на одном из них. Если не разобраться в функциях этих каналов, сложно будет редактировать нормал.
Нейтральный цвет нормала
128х128х255 — нейтральный цвет нормала.
Если добавить полностью нейтральный нормал, то особой разницы видно не будет. Модель будет шейдить так же, как обычная low poly.
В каком формате лучше хранить нормал
После запечки, скорее всего, придётся вносить изменения в нормал, используя фотошоп.
Поэтому файл лучше сохранять в форматах Targa или TIF.
При сохранении есть выбор, сохранять в 24 или 32 bit.
Если есть Альфа-канал — сохраняем с 32 bit.
Если Альфа-канала нет — в 24 bit.
2. Карта АО
Так выглядит запечённая карта АО
Карта Ambient occlusion (AO) — это карта затенения. Она показывает самые глубокие тени в объекте — в основном это тени в углублениях и на пересечениях. Эту карту используют в игровых движках для создания корректного освещения, а также она очень полезна в текстурировании.
Отличный пример того, что сложно сделать без АО — это грязь. Она забивается в самые глубокие места модели, — карта АО поможет легко сгенерировать маску углублений, чтобы забить их грязью.
Если добавить на low poly модель карту АО, на модели появятся самые глубокие тени
Так же как и нормал, карта АО печётся на развёртку модели из high poly и скульпта.
Карта AO создаётся из high poly и скульпта
При запекании по-умолчанию эта карта чёрно-белая, но на этапе текстурирования её можно покрасить.
С картой АО разобрались, последняя карта, которая нам нужна — Color ID
3. Карта Color ID
Наша модель состоит из разных материалов: металла, камня, дерева и ткани.
Во время текстурирования нам нужно быстро выделять геометрию, которая будет, например, металлом или деревом.
Чтобы это можно было сделать в один клик внутри Substance Painter, нам нужно запечь карту Color ID. Она позволяет быстро выделять большие куски. А в программе для текстурирования эту группу объектов можно легко затекстурить.
Вот так, с помощью этой карты мы в считанные секунды красим модель в разные цвета:
Быстро красим модель в Substance Painter, используя карту Color ID
Для того, чтобы создать карту Color ID, нам нужно покрасить high poly-модель в разные цвета. Один цвет — это одна группа объектов, как правило разбитая по материалам. Например, всё дерево на Color ID оранжевое, вся кожа —розовая, ржавый металл — синий, шерсть — голубая, а новый и чистый метал —зелёный.
Это не цвета будущей модели — здесь они могут быть любыми. Главное, чтобы они были контрастными.
Дополнительные карты
В мармосете куча карт, которые можно запечь.
Их в разных пайплайнах используют разные художники для текстурирования:
Position map с помощью градиентов помогает накладывать текстуры в разных плоскостях модели.
Сurvature выделяет все края на модели и упрощает создание затёртостей и повреждений. Очень полезная карта на ряду с АО.
Thickness запекает толщину, что необходимо для имитации подповерхностного рассеивания.
Часто для hand paint текстур пекут свет прямо на текстуру. Иногда необходимо запечь альфу — карту прозрачности.
Ещё мармосет умеет печь цвета и материалы с других моделей и текстур, это иногда помогает не переделывать много текстур с нуля.
Сейчас проще печь дополнительные карты прямо в Substance Painter.
Он знает, как в один клик из нормала и AO сделать идеальные карты для своих алгоритмов. Они отлично откалиброваны, и с ними прекрасно работают все генераторы и фильтры.
Софт для запечки
В конечном счёте софт не важен. Принцип работы запечки во всех программах один и тот же.
То же самое можно сделать в Maya, Blender, 3D Max, Modo или Cinema 4D. Я очень люблю запечку в Maya. Она печет отличный и аккуратный нормал, но требует много танцев с бубном из-за артефактов на плоскостях, а также из-за долгого и нудного подмешивания разных карт в Photoshop.
На курсе Draft Punk я выбираю Marmoset Toolbag, потому что в ней проще научиться печь. До Maya я недолго пек в xNormal, но научившись печь в Maya в xNormal не возвращался. Сейчас я часто слышу про запечку в Painter, но сам в нём никогда не пёк.
Как сделать самую быструю в мире запечку
Шаг 1: Открываем Marmoset.
Шаг 2: Загружаем low poly и high poly, добавляем их в одну группу запечки (Baker).
Шаг 3: Нажимаем кнопку «Bake».
Когда карта будет готова, открываем Maya, добавляем на low poly карту нормалей. Получается такой результат:
Эти странные пятна на картинке называют артефактами. Замазать их в Photoshop не так то просто. Нормал очень чувствителен к любым градиентам, и многие из артефактов проще перепечь, чем исправлять в фотошопе.
Артефакты появились по целому ряду причин. Где-то low poly и high poly плохо совпадают. Где-то разные элементы запеклись друг на друга. Где-то кейдж оказался недостаточно большим, а где-то неправильно расставлены хард и софт эджи.
Единственный способ — сделать всё заново, но подготовив модель к запечке.
Вся остальная часть статьи будет посвящена тому, как сделать так, чтобы артефактов не было. Это достаточно долгий, но системный процесс.
1. Подготовка low poly модели к запечке
Шейдинг
Low poly должна шейдить красиво. Вот пример плохого и хорошего шейдинга:
Шейдинг у левой книги — плохой и никогда не запечётся. А с правой книгой всё окей.
Секрет хорошего шейдинга — в правильной работе с хардами и софтами.
Харды и софты и углы <=90 градусов
Всегда, когда угол 90 градусов — ставится хард.
Если угол меньше 90 градусов — ставим хард.
Если угол больше 90 градусов — можно смело ставить софт.Даже если угол 91 градус, ставим софт. Бывают исключения, но это отдельная большая тема для разговора.
Остальные — харды
В 3Ds Max харды и софты называются группами сглаживания.
Почему нужно расставлять харды? Везде где харды, мы будем разрезать UV — про это позже. Пока что просто проверим, что харды везде назначены там, где они нужны. Если это не сделать, нормал будет вести себя нечестно.
В Maya для этого есть автоматическая функция, — Soften/Harden Edge. Я люблю в этом инструменте ставить 60 градусов. Все что острее будет хардом, а все что тупее — софтом.
Есть нюанс: если начал делать луп хардами, нужно продолжать хардами по всей его длине, иначе появятся артефакты:
Убираем зазоры между геометрией
Следим, чтобы не было дырок между геометрией:
В таких местах нужно слегка притопить геометрию внутрь другой.
Триангулируем модель
Проверив всю low poly модель, обязательно включаем функцию триангуляции.
Всегда триангулируйте перед запечкой!
Если не триангулировать модель перед запечкой — в разном софте она будет смотреться по-разному.
Триангулируем
2. Что учитывать на high poly
Красивый шейдинг
Если high poly шейдит некрасиво, дорабатываем геометрию. Ведь именно с high poly вся детализация будет переноситься на low poly.
Шейдинг нас устраивает, всё окей
Круглые фаски
Если фаски очень тонкие, они не запекутся. Вот пример слишком тонких фасок:
Зачастую фаски делают даже больше, чем нужно (больше чем в реальности), чтобы они лучше запеклись. Это очень подробно расписано в практическом руководстве по нормалу.
Скосы
Скошенная геометрия лучше печётся на плоскости. А геометрия без скосов не печётся вовсе.
Мы сделали угол не под 90 градусов, а скошенный. Алгоритму запечки проще работать со скосами
Вот пример того, как можно скосить геометрию и повысить выразительность:
Сравним верхнюю деталь, на которой мы сделали скос, и другие детали без скосов.
Флоатеры
Есть очень крутой лайфхак в мире моделлеров — парящая геометрия. Эта форма шейдит как единое целое:
Шейдит как единое целое.
Но вшивать эти цилиндры в крест — то ещё удовольствие. Поэтому мы их просто поставим поверх модели!
Геометрия висит в воздухе. Такую проще моделить, и она хорошо печется на нормал.
3. Проверяем, совпадают ли high poly и low poly
High poly и low poly должны максимально совпадать! Вот пример, когда они не совпадают:
Если геометрия не совпадает — это нужно исправить.
Чтобы увидеть места, где high poly и low poly не совпадают, покрасим high poly в яркий контрастный цвет, а low poly — в белый:
Места, в которых high poly выходит за переделы low poly, будут красного цвета.
Затем проверяем, совпадают ли фаски. Для этого назначим на low poly бликующий материал и сделаем его прозрачным.
4. Что учитывать при развёртке
Есть целый ряд ошибок на UV, которые приводят к проблемам на этапе запечки:
— Кривые оверлапы создают артефакты— Неправильно расставленные харды и софты дают швы на нормале— Отсутствие паддинга или слишком маленький паддинг приводят к тому, что на модели появляются швы.
Чтобы этого избежать, есть несколько простых, проверенных временем рекомендаций:
Оверлапы
Если делаем оверлапы, то один элемент нужно оставить внутри первого квадрата, а все остальные куски оверлапа перенести ровно на соседний квадрат.
Оверлапы
Харды и софты
Нормал ненавидит, когда внутри UV-шелла есть hard edge.
На нормале в таком месте будет шов.
Поэтому все эджи внутри UV-шелла делаются софтами.
Внутри жёлтого круга не должно быть хардов, так как они будут находиться внутри UV-шелла
А внешние шеллы могут быть или софтами, или хардами.
Паддинг
Обязательно добавляем небольшие отступы между UV-шеллами.
Обрати на жёлтые стрелки. В этих местах есть паддинг, т.е. отступ между UV шеллами
Движок уменьшает разрешение текстур, если объект находится на большом расстоянии. Чем дальше объект — тем ниже разрешение.
Важно, чтобы даже при минимальном разрешении текстуры был хотя бы один пиксель расстояния:
5. Перед тем, как открыть Marmoset
Мы уже подготовили low poly, high poly и развёртку к запечке.Но прежде чем нажимать волшебную кнопку, нужно выполнить ещё три простых действия, которые помогут нам в дальнейшем.
Правильный нейминг сэкономит гору времени во время работы с группами запечки — лишний мусор не будет мешать при работе.
Наличие бэкапа поможет не потерять всю проделанную работу. В ходе запечки мы будем разносить модель или запекать отдельно некоторые её части, а потом подмазывать их в фотошопе. Может начаться настоящий хаос — стоит потратить одну минуту, чтобы сделать backup.
Нейминг в Maya
Проверяем, что нейминг внутри группы lowpoly совпадает с неймингом внутри high poly.
Например:
lowpoly -> barrel
sculpt -> zbrush_barrel
highpoly -> high_barrel
Если это не так, нужно сделать это прямо сейчас, иначе в дальнейшем у нас будут большие проблемы при работе с группами запечки.
Удали мусор
В Maya есть полезная функция File → Optimize Scene Size, которая удаляет из сцены мусор, который нигде не используется. Это лишние слои, лишние материалы и пустые группы.
Backup
Перед запечкой создаём отдельную папку «Bake», и сохраняем туда бэкап исходного файла до начала запечки — на всякий случай).
Во время запечки иногда приходится править часть геометрии. Где-то добавятся фаски, где-то поддержки, и так далее. Поэтому всегда полезно иметь сохранённый и нетронутый бэкап.
6. Подготовка сцены в Marmoset
Ставим более высокое разрешение
Прежде чем делать запечку, укажем, какого размера будут карты.
Ставим разрешение карт в 2 раза выше, чем будет у финальной модели.Так часто делают в продакшене, так как текстура в 2к, уменьшенная до 1к выглядит лучше, чем текстура, сделанная сразу в 1к.
Ставим разрешение у карт в два раза выше
Указываем, что нужно запечь Normal, AO, Material ID (=Color ID), и выбираем папку, в которую программа будет сохранять карты.
Дальше есть 2 пути
Одна из главных проблем в том, что если объекты пересекаются и пекутся как единое целое — появляются артефакты.
Вот пример: мы запекли нашу бочку. На первый взгляд всё выглядит неплохо, но если мы сдвинем любой из элементов, то увидим кучу артефактов:
Всё потому, что бочка и её обшивка — это геометрии, которые лежат друг на друге. В таких местах алгоритмы запечки начинают глючить и создавать море некрасивых артефактов.
Поэтому за один раз можно запекать только те элементы, которые находятся на расстоянии друг от друга.
Есть два варианта решения.
Вариант 1: Разнести модель (Explode)
Это старый, проверенный временем метод.
Explode можно сделать легко в Marmoset.Просто разнесём элементы в разные стороны, чтобы геометрия не пересекалась.
Разносим элементы модели в разные стороны
Представьте, что мы делаем Explode в Maya прямо в файле с финальной сценой. После того, как мы разнесли элементы в сторону и сделали запечку, нужно будет собрать все детали обратно. Это не лучшая затея — поэтому всегда нужно хранить бэкап.
Обязательно следим, чтобы low poly и high poly совпадали и двигались вместе, иначе опять будут артефакты.
Делаем Explode
Пока что рано нажимать кнопку «Bake». На этом этапе просто разносим объекты в сторону и переходим к следующему пункту: работе с Cage.
Вариант 2: Использовать группы запечки
В Marmoset можно не разносить геометрию, так как это не всегда удобно, а просто указать программе, чтобы она пекла разные элементы модели по отдельности.
Как выглядят наши группы запечки
Первая группа — объекты, которые не пересекаются.
Пример одной из групп запечки
Такие группы называют «группами запечки».
Вот ещё два примера:
Ещё две группы запечки
Их крайне неудобно создавать при хаотичном нейминге. Именно поэтому я рекомендовал ещё до открытия Marmoset проверить, совпадают ли имена у всех групп внутри low poly и high poly.
Создадим группу запечки и просто перетащим туда одинаковые элементы с low poly и high poly:
Создаём новую группу запечки, привязываем к геометрии
Более подробно про то, какие кнопки нажимать, мы сняли видео аж несколько лет назад:
Как сделать запечку в Marmoset
Cage
При выборе одной конкретной группы запечки вокруг каждого объекта появилось поле поиска high poly, которое называется Cage. Это полупрозрачная область, которая оборачивает все элементы выбранной группы.
Полупрозрачная зона, которая слегка выходит за пределы модели — это Cage
Размер кейджа можно изменить:
Шаг 1: включаем отображение high poly ( красного цвета). Шаг 2: меняем размер Cage
Cage определяет зону поиска информации для запечки. Всё, что не попадает в кейдж, не будет запечено.
В этих местах кейдж не полностью закрывал high poly.
Наши задачи:
Покрыть всю геометрию кейджом.
Подобрать подходящий размер кейджа: чем меньше, тем лучше, но он должен покрывать всю high poly полностью.
Нюансы при работе с Cage
1. В этом примере, если немного увеличить cage — артефакты пропадут:
Увеличиваем кейдж, чтобы убрать артефакты
2. Даже если сами полигоны не пересекаются, а пересекается только область кейджа, тоже будут артефакты:
В этом примере решение проблемы — сделать область cage меньше:
Мы очень любим Marmoset за удобный Cage и Paint Skew. Они значительно упрощают работу.
6. Запечка карт
Что нажать?
Нажимаем на кнопку «Bake».
В папке сразу появятся готовые PSD файлы.
Как наложить карты на модель
Дальше они загружаются в Painter и начинается этап текстурирования. Об этом поговорим в следующей статье.
Исправление косяков после запечки
Даже если сделать всё, как мы писали выше, всё равно могут появиться артефакты. Всё потому, что технология запечки — сложный процесс.
Прежде всего, нужно знать, что у нормала есть 2 разных алгоритма работы. И у обоих алгоритмов есть свои сильные и слабые стороны.
Два вида нормала
Для примера мы запекли одну и ту же геометрию с помощью Geometry и Surface Normal.
Посмотрите на фаску и на то, как запеклась окружность
В первом случае у нас хорошо запеклась фаска, но окружность стала овалом.С другим алгоритмом всё наоборот. Разберёмся, что с этим делать.
Geometry Normal
я перепек и обновил только эти юви шеллы
Особенность алгоритма: печёт так, как будто везде софты.
Плюсы: хорошо печёт фаски и швы.
Минусы: дырки (окружности) немного растягиваются.
2. Surface Normal
Особенность алгоритма: учитывает харды и софты.
Плюсы: не портит форму у дырок.
Минусы: ужасно печёт края.
Как правильно использовать оба алгоритма
Marmoset позволяет использовать лучшее из обоих алгоритмов нормала с помощью функции Paint Skew.
Что делает функция Paint Skew в Marmoset
Дырка исказилась при запечке и стала овальной. Мы используем другой алгоритм нормала, чтобы пересчитать её. Для этого просто выделяем эту область, используя функцию Paint Skew, и получаем ровный вырез, как было у исходной модели.
Раньше, когда такой функции не было, мы просто пекли с одинаковыми настройками Geometry Normal и Surface Normal. И уже руками с Geometry Normal брали только фаски, добавляли их на Surface Normal в Photoshop. Я как-то написал простой экшен в фотошопе, ускоряющий этот процесс до двух кликов.
Магия Photoshop
Два вида нормала — это хорошо, но и они не панацея.
Paint Skew не всегда помогает
Иногда на модели оказываются косяки, с которыми не справиться в мармосете. Иногда нужно перезапечь небольшой кусочек модели и подмешать ее на карту в фотошопе. А иногда хочется добавить больше деталей на нормал, — в этом поможет плагин Quixel NDO.
На сайте есть подробная документация, а в интернете— ещё больше информации. Мы не будем сильно останавливаться на этой теме, так как она достаточно старая и обширная.
Кстати, в Painter есть свой инструментарий рисования нормала, как в NDO, но об этом в другой статье.
Правим артефакты в Photoshop
Итак, у нас есть артефакт, который мы хотим исправить:
Самый простой способ:
— Открыть модель в Maya, экспортировать только этот элемент.— Заново запечь его.— Затем подмазать эти детали в Photoshop.
Мы используем самые простые инструменты Photoshop: кисточки, маски, clone stamp и пластырь. И дорабатываем руками самые проблемные места, если другие способы не помогают.
Если всё совсем плохо
Переделываем геометрию — об этом в начале статьи.
Что делать с картами дальше
Итак, сегодня мы запекли нормал мап, АО и Color ID. Следующий этап пайплайна — текстурирование.
Нужно загрузить наши карты в Substance Painter:
Загружаем карты в Substance Painter
Затем нужно запечь дополнительные карты: World Space Normal, Curvature, Position и Thickness. Их проще всего запекать именно внутри в Substance Painter. Эти карты создаются на основе нашего нормала, АО и Color ID, поэтому наличие этих карт обязательно.
Запекаем дополнительные текстурные карты
Что это за карты — расскажем в следующей статье. А запекаются они очень просто: нажатием на одну кнопку.
После их создания можно приступать к текстурированию. А после текстур нас ждёт последний и необязательный этап пайплайна: рендер и подача модели.
А для тех, кто хочет пройти весь пайплайн от «А» до «Я», вместе с личным наставником сделать полный цикл своей модели и познакомиться с сотней трёхмерщиков со всей России — ещё не поздно записаться на новый поток курса Draft Punk.
Автор: Борис
Мы продолжаем цикл статей по пайплайну разработки стилизованных персонажей. Сегодня расскажем, что такое этап запечки, и как перенести детализацию с высокополигональной модели (high poly) на низкополигональную (low poly).
В закладки
Слушать
Запечка (Bake) — четвёртый этап ААА-пайплайна. На прошлом мы сделали развёртку, а сейчас будем её использовать для создания Normal Map, AO и Color ID.
Примечание: нам часто говорят, что правильнее писать «запекание», а не «запечка». Мы пишем «запечка», потому что это устоявшийся термин в индустрии.
Гугл на слово запечка показывает то, что нам нужно, а на слово запекание предлагает запечь курочку
Что такое запечка
Взглянем на low poly модель, которую сделал наш студент Leon.
В ней минимум полигонов и чистая сетка. Эта модель будет загружаться в игровой движок.
Есть ещё high poly модель с высокой детализацией и скульпт.
High poly модели под сабдив и скульпт
Технология запечки позволяет перенести все детали с high poly и скульпта на low poly-модель.
В итоге, в игровом движке будет low poly модель с минимальным количеством полигонов, но выглядеть она будет так, как будто на ней есть все эти детали:
Для внимательных: ID Map никак не влияет на вид модели, в отличие от нормала и АО, но она пригодится при текстурировании, поэтому эту карту тоже будем печь.
Как это работает?
Мы берём low poly модель и добавляем на неё запечённые карты нормала и АО. Эти карты обманывают поведение игрового света. Модель начинает бликовать так, как будто на ней есть все эти фаски, вырезы и прочие детали.
Для тех, кто не понимает, о чём речь: мы очень подробно писали про вертекс нормали и принцип работы нормала в статье про сетку.
На этом этапе пайплайна — запечке, — наша задача: запечь 3 карты.
1) Normal map — карту неровностей
2) Ambient Occlusion (AO) — карту затенения
3) Color ID — цветные маски
В Marmoset можно запечь гораздо больше карт, про это будет дальше.
Мы добавим эти карты на нашу low poly модель, на ней появится вся детализация с high poly и скульпта, а благодаря карте Color ID модель будет легче разбить по материалам и текстурировать.
Все карты создаются на основе развёртки, которую мы сделали на прошлом этапе пайплайна. Без развёртки карты не запекутся. Если есть ошибки на развёртке или low poly модели, то мы столкнёмся с кучей проблем.
Ссылки на теорию
Вот несколько наших статей, из которых можно понять, как работает «магический» трюк с обманом вертекс нормалей.
#1. Практическое руководство про нормал мап
#2. Статья про сетку
#3. Статья про развёртку
Какие карты будем печь
Нет смысла запекать карты, если не знаешь, что они делают и как работают.
1. Normal Map
Normal Map
Normal Map переводится как «карта нормалей». Она изменяет направление блика на геометрии.
Карта создаёт виртуальные вертекс нормали в каждой точке low poly модели и искажает поведение света. Если наложить запечённый нормал на модель, то она будет выглядеть почти как high poly.
Вот хороший пример: low poly модель с включенным нормалом и без него.
Модель с включенным нормалом и без него
Новые полигоны не создаются, это лишь иллюзия формы:
Все детали и затенения на этой low poly сетке — иллюзия.
Все детали и затенения на этой low poly сетке — иллюзия.
Чтобы создать нормал, нужно взять развёртку, которую мы делали ранее, взять high poly и скульпт, загрузить в программу для запечки и нажать кнопку «bake».Там много нюансов, но мы обо всём расскажем.
Из чего печётся Normal map
Что нужно знать о нормале
Небольшие чёрные полосы на нормале — это нормально. Никто не будет разглядывать нашу модель под микроскопом.
Чёрные полоски на нормале
Почему не стоит сильно волноваться о чёрных полосах? Игрок почти всегда видит модель в игре на расстоянии. Поэтому не нужно тратить несколько часов, чтобы убрать чёрные полоски на нормале:
Та же модель, но на расстоянии. Чёрные полосы не режут глаза, — значит, всё окей.
Из чего состоит карта нормалей
Normal map создает иллюзию объёма благодаря трем картам в каналах текстуры: красный, зелёный, синий.
Чтобы переключаться между каналами, откроем файл с нормалом в Photoshop и зайдём во вкладку Channels.
Красный канал показывает искажение вертекс нормалей по горизонтали. Чем светлее пятно на красном канале — тем сильнее виртуальная поверхность наклонена вправо, а чем темнее — тем больше «поверхность» бликует влево.
Красный канал нормала
Зелёный канал — работает так же, но искажает шейдинг по вертикали.Светлый-блик поворачивается наверх, а тёмный — вниз.
Зелёный канал нормала
Чтобы лучше понять разницу между этими двумя каналами, взглянем на эту часть модели:
У бочки на high poly есть фактура дерева.
Затемнение идёт только по одной из осей.
Так как красный канал нормала показывает искажение вертекс-нормалей только по горизонтали, а скосы между досками как раз и отклоняются влево или вправо, то на нём будет много информации.
А зелёный канал — показывает искажения по вертикали. Так как виртуальные плоскости не отклоняются вверх/вниз, то затемнений почти нет, то информации на нормале в этом канале почти не будет:
Зелёный и красный канал нормала на примере бочки
Красный и зелёный каналы — основные для нас как для моделлеров. Но у нормала есть ещё синий канал.
Синий канал имитирует углубления в объекте. В играх он практически не используется.
За счёт изменения синего цвета на нормале создаются искажения на плоской поверхности.
Если на синем канале есть артефакты, можно просто выключить этот канал, то есть отключить синий цвет у нормал мапа в фотошопе. Или просто их замазать артефакты кисточкой.
Синий канал нормала
Больше про три канала нормала — в этой статье.
У каждого канала — своя функция. При артефактах после запечки иногда нужно править нормал руками. Иногда это делается сразу на всех трёх каналах, а иногда — на одном из них. Если не разобраться в функциях этих каналов, сложно будет редактировать нормал.
Нейтральный цвет нормала
128х128х255 — нейтральный цвет нормала.
Если добавить полностью нейтральный нормал, то особой разницы видно не будет. Модель будет шейдить так же, как обычная low poly.
В каком формате лучше хранить нормал
После запечки, скорее всего, придётся вносить изменения в нормал, используя фотошоп.
Поэтому файл лучше сохранять в форматах Targa или TIF.
При сохранении есть выбор, сохранять в 24 или 32 bit.
Если есть Альфа-канал — сохраняем с 32 bit.
Если Альфа-канала нет — в 24 bit.
2. Карта АО
Так выглядит запечённая карта АО
Карта Ambient occlusion (AO) — это карта затенения. Она показывает самые глубокие тени в объекте — в основном это тени в углублениях и на пересечениях. Эту карту используют в игровых движках для создания корректного освещения, а также она очень полезна в текстурировании.
Отличный пример того, что сложно сделать без АО — это грязь. Она забивается в самые глубокие места модели, — карта АО поможет легко сгенерировать маску углублений, чтобы забить их грязью.
Если добавить на low poly модель карту АО, на модели появятся самые глубокие тени
Так же как и нормал, карта АО печётся на развёртку модели из high poly и скульпта.
Карта AO создаётся из high poly и скульпта
При запекании по-умолчанию эта карта чёрно-белая, но на этапе текстурирования её можно покрасить.
С картой АО разобрались, последняя карта, которая нам нужна — Color ID
3. Карта Color ID
Наша модель состоит из разных материалов: металла, камня, дерева и ткани.
Во время текстурирования нам нужно быстро выделять геометрию, которая будет, например, металлом или деревом.
Чтобы это можно было сделать в один клик внутри Substance Painter, нам нужно запечь карту Color ID. Она позволяет быстро выделять большие куски. А в программе для текстурирования эту группу объектов можно легко затекстурить.
Вот так, с помощью этой карты мы в считанные секунды красим модель в разные цвета:
Быстро красим модель в Substance Painter, используя карту Color ID
Для того, чтобы создать карту Color ID, нам нужно покрасить high poly-модель в разные цвета. Один цвет — это одна группа объектов, как правило разбитая по материалам. Например, всё дерево на Color ID оранжевое, вся кожа —розовая, ржавый металл — синий, шерсть — голубая, а новый и чистый метал —зелёный.
Это не цвета будущей модели — здесь они могут быть любыми. Главное, чтобы они были контрастными.
Дополнительные карты
В мармосете куча карт, которые можно запечь.
Их в разных пайплайнах используют разные художники для текстурирования:
Position map с помощью градиентов помогает накладывать текстуры в разных плоскостях модели.
Сurvature выделяет все края на модели и упрощает создание затёртостей и повреждений. Очень полезная карта на ряду с АО.
Thickness запекает толщину, что необходимо для имитации подповерхностного рассеивания.
Часто для hand paint текстур пекут свет прямо на текстуру. Иногда необходимо запечь альфу — карту прозрачности.
Ещё мармосет умеет печь цвета и материалы с других моделей и текстур, это иногда помогает не переделывать много текстур с нуля.
Сейчас проще печь дополнительные карты прямо в Substance Painter.
Он знает, как в один клик из нормала и AO сделать идеальные карты для своих алгоритмов. Они отлично откалиброваны, и с ними прекрасно работают все генераторы и фильтры.
Софт для запечки
В конечном счёте софт не важен. Принцип работы запечки во всех программах один и тот же.
То же самое можно сделать в Maya, Blender, 3D Max, Modo или Cinema 4D. Я очень люблю запечку в Maya. Она печет отличный и аккуратный нормал, но требует много танцев с бубном из-за артефактов на плоскостях, а также из-за долгого и нудного подмешивания разных карт в Photoshop.
На курсе Draft Punk я выбираю Marmoset Toolbag, потому что в ней проще научиться печь. До Maya я недолго пек в xNormal, но научившись печь в Maya в xNormal не возвращался. Сейчас я часто слышу про запечку в Painter, но сам в нём никогда не пёк.
Как сделать самую быструю в мире запечку
Шаг 1: Открываем Marmoset.
Шаг 2: Загружаем low poly и high poly, добавляем их в одну группу запечки (Baker).
Шаг 3: Нажимаем кнопку «Bake».
Когда карта будет готова, открываем Maya, добавляем на low poly карту нормалей. Получается такой результат:
Эти странные пятна на картинке называют артефактами. Замазать их в Photoshop не так то просто. Нормал очень чувствителен к любым градиентам, и многие из артефактов проще перепечь, чем исправлять в фотошопе.
Артефакты появились по целому ряду причин. Где-то low poly и high poly плохо совпадают. Где-то разные элементы запеклись друг на друга. Где-то кейдж оказался недостаточно большим, а где-то неправильно расставлены хард и софт эджи.
Единственный способ — сделать всё заново, но подготовив модель к запечке.
Вся остальная часть статьи будет посвящена тому, как сделать так, чтобы артефактов не было. Это достаточно долгий, но системный процесс.
1. Подготовка low poly модели к запечке
Шейдинг
Low poly должна шейдить красиво. Вот пример плохого и хорошего шейдинга:
Шейдинг у левой книги — плохой и никогда не запечётся. А с правой книгой всё окей.
Секрет хорошего шейдинга — в правильной работе с хардами и софтами.
Харды и софты и углы <=90 градусов
Всегда, когда угол 90 градусов — ставится хард.
Если угол меньше 90 градусов — ставим хард.
Если угол больше 90 градусов — можно смело ставить софт.Даже если угол 91 градус, ставим софт. Бывают исключения, но это отдельная большая тема для разговора.
Остальные — харды
В 3Ds Max харды и софты называются группами сглаживания.
Почему нужно расставлять харды? Везде где харды, мы будем разрезать UV — про это позже. Пока что просто проверим, что харды везде назначены там, где они нужны. Если это не сделать, нормал будет вести себя нечестно.
В Maya для этого есть автоматическая функция, — Soften/Harden Edge. Я люблю в этом инструменте ставить 60 градусов. Все что острее будет хардом, а все что тупее — софтом.
Есть нюанс: если начал делать луп хардами, нужно продолжать хардами по всей его длине, иначе появятся артефакты:
Убираем зазоры между геометрией
Следим, чтобы не было дырок между геометрией:
В таких местах нужно слегка притопить геометрию внутрь другой.
Триангулируем модель
Проверив всю low poly модель, обязательно включаем функцию триангуляции.
Всегда триангулируйте перед запечкой!
Если не триангулировать модель перед запечкой — в разном софте она будет смотреться по-разному.
Триангулируем
2. Что учитывать на high poly
Красивый шейдинг
Если high poly шейдит некрасиво, дорабатываем геометрию. Ведь именно с high poly вся детализация будет переноситься на low poly.
Шейдинг нас устраивает, всё окей
Круглые фаски
Если фаски очень тонкие, они не запекутся. Вот пример слишком тонких фасок:
Зачастую фаски делают даже больше, чем нужно (больше чем в реальности), чтобы они лучше запеклись. Это очень подробно расписано в практическом руководстве по нормалу.
Скосы
Скошенная геометрия лучше печётся на плоскости. А геометрия без скосов не печётся вовсе.
Мы сделали угол не под 90 градусов, а скошенный. Алгоритму запечки проще работать со скосами
Вот пример того, как можно скосить геометрию и повысить выразительность:
Сравним верхнюю деталь, на которой мы сделали скос, и другие детали без скосов.
Флоатеры
Есть очень крутой лайфхак в мире моделлеров — парящая геометрия. Эта форма шейдит как единое целое:
Шейдит как единое целое.
Но вшивать эти цилиндры в крест — то ещё удовольствие. Поэтому мы их просто поставим поверх модели!
Геометрия висит в воздухе. Такую проще моделить, и она хорошо печется на нормал.
3. Проверяем, совпадают ли high poly и low poly
High poly и low poly должны максимально совпадать! Вот пример, когда они не совпадают:
Если геометрия не совпадает — это нужно исправить.
Чтобы увидеть места, где high poly и low poly не совпадают, покрасим high poly в яркий контрастный цвет, а low poly — в белый:
Места, в которых high poly выходит за переделы low poly, будут красного цвета.
Затем проверяем, совпадают ли фаски. Для этого назначим на low poly бликующий материал и сделаем его прозрачным.
4. Что учитывать при развёртке
Есть целый ряд ошибок на UV, которые приводят к проблемам на этапе запечки:
— Кривые оверлапы создают артефакты— Неправильно расставленные харды и софты дают швы на нормале— Отсутствие паддинга или слишком маленький паддинг приводят к тому, что на модели появляются швы.
Чтобы этого избежать, есть несколько простых, проверенных временем рекомендаций:
Оверлапы
Если делаем оверлапы, то один элемент нужно оставить внутри первого квадрата, а все остальные куски оверлапа перенести ровно на соседний квадрат.
Оверлапы
Харды и софты
Нормал ненавидит, когда внутри UV-шелла есть hard edge.
На нормале в таком месте будет шов.
Поэтому все эджи внутри UV-шелла делаются софтами.
Внутри жёлтого круга не должно быть хардов, так как они будут находиться внутри UV-шелла
А внешние шеллы могут быть или софтами, или хардами.
Паддинг
Обязательно добавляем небольшие отступы между UV-шеллами.
Обрати на жёлтые стрелки. В этих местах есть паддинг, т.е. отступ между UV шеллами
Движок уменьшает разрешение текстур, если объект находится на большом расстоянии. Чем дальше объект — тем ниже разрешение.
Важно, чтобы даже при минимальном разрешении текстуры был хотя бы один пиксель расстояния:
5. Перед тем, как открыть Marmoset
Мы уже подготовили low poly, high poly и развёртку к запечке.Но прежде чем нажимать волшебную кнопку, нужно выполнить ещё три простых действия, которые помогут нам в дальнейшем.
Правильный нейминг сэкономит гору времени во время работы с группами запечки — лишний мусор не будет мешать при работе.
Наличие бэкапа поможет не потерять всю проделанную работу. В ходе запечки мы будем разносить модель или запекать отдельно некоторые её части, а потом подмазывать их в фотошопе. Может начаться настоящий хаос — стоит потратить одну минуту, чтобы сделать backup.
Нейминг в Maya
Проверяем, что нейминг внутри группы lowpoly совпадает с неймингом внутри high poly.
Например:
lowpoly -> barrel
sculpt -> zbrush_barrel
highpoly -> high_barrel
Если это не так, нужно сделать это прямо сейчас, иначе в дальнейшем у нас будут большие проблемы при работе с группами запечки.
Удали мусор
В Maya есть полезная функция File → Optimize Scene Size, которая удаляет из сцены мусор, который нигде не используется. Это лишние слои, лишние материалы и пустые группы.
Backup
Перед запечкой создаём отдельную папку «Bake», и сохраняем туда бэкап исходного файла до начала запечки — на всякий случай).
Во время запечки иногда приходится править часть геометрии. Где-то добавятся фаски, где-то поддержки, и так далее. Поэтому всегда полезно иметь сохранённый и нетронутый бэкап.
6. Подготовка сцены в Marmoset
Ставим более высокое разрешение
Прежде чем делать запечку, укажем, какого размера будут карты.
Ставим разрешение карт в 2 раза выше, чем будет у финальной модели.Так часто делают в продакшене, так как текстура в 2к, уменьшенная до 1к выглядит лучше, чем текстура, сделанная сразу в 1к.
Ставим разрешение у карт в два раза выше
Указываем, что нужно запечь Normal, AO, Material ID (=Color ID), и выбираем папку, в которую программа будет сохранять карты.
Дальше есть 2 пути
Одна из главных проблем в том, что если объекты пересекаются и пекутся как единое целое — появляются артефакты.
Вот пример: мы запекли нашу бочку. На первый взгляд всё выглядит неплохо, но если мы сдвинем любой из элементов, то увидим кучу артефактов:
Всё потому, что бочка и её обшивка — это геометрии, которые лежат друг на друге. В таких местах алгоритмы запечки начинают глючить и создавать море некрасивых артефактов.
Поэтому за один раз можно запекать только те элементы, которые находятся на расстоянии друг от друга.
Есть два варианта решения.
Вариант 1: Разнести модель (Explode)
Это старый, проверенный временем метод.
Explode можно сделать легко в Marmoset.Просто разнесём элементы в разные стороны, чтобы геометрия не пересекалась.
Разносим элементы модели в разные стороны
Представьте, что мы делаем Explode в Maya прямо в файле с финальной сценой. После того, как мы разнесли элементы в сторону и сделали запечку, нужно будет собрать все детали обратно. Это не лучшая затея — поэтому всегда нужно хранить бэкап.
Обязательно следим, чтобы low poly и high poly совпадали и двигались вместе, иначе опять будут артефакты.
Делаем Explode
Пока что рано нажимать кнопку «Bake». На этом этапе просто разносим объекты в сторону и переходим к следующему пункту: работе с Cage.
Вариант 2: Использовать группы запечки
В Marmoset можно не разносить геометрию, так как это не всегда удобно, а просто указать программе, чтобы она пекла разные элементы модели по отдельности.
Как выглядят наши группы запечки
Первая группа — объекты, которые не пересекаются.
Пример одной из групп запечки
Такие группы называют «группами запечки».
Вот ещё два примера:
Ещё две группы запечки
Их крайне неудобно создавать при хаотичном нейминге. Именно поэтому я рекомендовал ещё до открытия Marmoset проверить, совпадают ли имена у всех групп внутри low poly и high poly.
Создадим группу запечки и просто перетащим туда одинаковые элементы с low poly и high poly:
Создаём новую группу запечки, привязываем к геометрии
Более подробно про то, какие кнопки нажимать, мы сняли видео аж несколько лет назад:
Как сделать запечку в Marmoset
Cage
При выборе одной конкретной группы запечки вокруг каждого объекта появилось поле поиска high poly, которое называется Cage. Это полупрозрачная область, которая оборачивает все элементы выбранной группы.
Полупрозрачная зона, которая слегка выходит за пределы модели — это Cage
Размер кейджа можно изменить:
Шаг 1: включаем отображение high poly ( красного цвета). Шаг 2: меняем размер Cage
Cage определяет зону поиска информации для запечки. Всё, что не попадает в кейдж, не будет запечено.
В этих местах кейдж не полностью закрывал high poly.
Наши задачи:
Покрыть всю геометрию кейджом.
Подобрать подходящий размер кейджа: чем меньше, тем лучше, но он должен покрывать всю high poly полностью.
Нюансы при работе с Cage
1. В этом примере, если немного увеличить cage — артефакты пропадут:
Увеличиваем кейдж, чтобы убрать артефакты
2. Даже если сами полигоны не пересекаются, а пересекается только область кейджа, тоже будут артефакты:
В этом примере решение проблемы — сделать область cage меньше:
Мы очень любим Marmoset за удобный Cage и Paint Skew. Они значительно упрощают работу.
6. Запечка карт
Что нажать?
Нажимаем на кнопку «Bake».
В папке сразу появятся готовые PSD файлы.
Как наложить карты на модель
Дальше они загружаются в Painter и начинается этап текстурирования. Об этом поговорим в следующей статье.
Исправление косяков после запечки
Даже если сделать всё, как мы писали выше, всё равно могут появиться артефакты. Всё потому, что технология запечки — сложный процесс.
Прежде всего, нужно знать, что у нормала есть 2 разных алгоритма работы. И у обоих алгоритмов есть свои сильные и слабые стороны.
Два вида нормала
Для примера мы запекли одну и ту же геометрию с помощью Geometry и Surface Normal.
Посмотрите на фаску и на то, как запеклась окружность
В первом случае у нас хорошо запеклась фаска, но окружность стала овалом.С другим алгоритмом всё наоборот. Разберёмся, что с этим делать.
Geometry Normal
я перепек и обновил только эти юви шеллы
Особенность алгоритма: печёт так, как будто везде софты.
Плюсы: хорошо печёт фаски и швы.
Минусы: дырки (окружности) немного растягиваются.
2. Surface Normal
Особенность алгоритма: учитывает харды и софты.
Плюсы: не портит форму у дырок.
Минусы: ужасно печёт края.
Как правильно использовать оба алгоритма
Marmoset позволяет использовать лучшее из обоих алгоритмов нормала с помощью функции Paint Skew.
Что делает функция Paint Skew в Marmoset
Дырка исказилась при запечке и стала овальной. Мы используем другой алгоритм нормала, чтобы пересчитать её. Для этого просто выделяем эту область, используя функцию Paint Skew, и получаем ровный вырез, как было у исходной модели.
Раньше, когда такой функции не было, мы просто пекли с одинаковыми настройками Geometry Normal и Surface Normal. И уже руками с Geometry Normal брали только фаски, добавляли их на Surface Normal в Photoshop. Я как-то написал простой экшен в фотошопе, ускоряющий этот процесс до двух кликов.
Магия Photoshop
Два вида нормала — это хорошо, но и они не панацея.
Paint Skew не всегда помогает
Иногда на модели оказываются косяки, с которыми не справиться в мармосете. Иногда нужно перезапечь небольшой кусочек модели и подмешать ее на карту в фотошопе. А иногда хочется добавить больше деталей на нормал, — в этом поможет плагин Quixel NDO.
На сайте есть подробная документация, а в интернете— ещё больше информации. Мы не будем сильно останавливаться на этой теме, так как она достаточно старая и обширная.
Кстати, в Painter есть свой инструментарий рисования нормала, как в NDO, но об этом в другой статье.
Правим артефакты в Photoshop
Итак, у нас есть артефакт, который мы хотим исправить:
Самый простой способ:
— Открыть модель в Maya, экспортировать только этот элемент.— Заново запечь его.— Затем подмазать эти детали в Photoshop.
Мы используем самые простые инструменты Photoshop: кисточки, маски, clone stamp и пластырь. И дорабатываем руками самые проблемные места, если другие способы не помогают.
Если всё совсем плохо
Переделываем геометрию — об этом в начале статьи.
Что делать с картами дальше
Итак, сегодня мы запекли нормал мап, АО и Color ID. Следующий этап пайплайна — текстурирование.
Нужно загрузить наши карты в Substance Painter:
Загружаем карты в Substance Painter
Затем нужно запечь дополнительные карты: World Space Normal, Curvature, Position и Thickness. Их проще всего запекать именно внутри в Substance Painter. Эти карты создаются на основе нашего нормала, АО и Color ID, поэтому наличие этих карт обязательно.
Запекаем дополнительные текстурные карты
Что это за карты — расскажем в следующей статье. А запекаются они очень просто: нажатием на одну кнопку.
После их создания можно приступать к текстурированию. А после текстур нас ждёт последний и необязательный этап пайплайна: рендер и подача модели.
А для тех, кто хочет пройти весь пайплайн от «А» до «Я», вместе с личным наставником сделать полный цикл своей модели и познакомиться с сотней трёхмерщиков со всей России — ещё не поздно записаться на новый поток курса Draft Punk.
Автор: Борис
Комментариев нет:
Отправить комментарий