Блог xyz school

Запечка (bake) стилизованного персонажа

Автор:Юрий Порубов

Привет! Мы продолжаем цикл статей по пайплайну разработки стилизованных персонажей.

Сегодня ты узнаешь, как устроен четвёртый этап ААА-пайплайна — запечка (bake), на примере нашей модели.
Прошлые статьи из цикла:
ААА-пайплайн разработки стилизованных персонажей
9 полезных инструментов ZBrush
Скульпт в ZBrush от первого лица
Ретопология (сетка)
Развёртка (UV)

Что такое запечка

Этап запекания (bake) — полностью технический этап ААА-пайплайна, цель которого заключается в переносе детализации с хайполи модели на лоуполи с помощью специальных карт.

Для запекания карты необходимо загрузить хайполи и лоуполи-модель в любую программу для 3D-моделирования или специальную программу для запечки.

Все эти карты необходимы для следующего этапа — текстурирования.

Когда мы добавим эти карты к лоуполи-модели, они перенесут дополнительную детализацию, взятую с хайполи модели.

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

Наиболее полезны эти карты:

— Normal Map
— Normal (Object)
— AO (Ambient Occlusion)
— Curvature
— Vertex Color (Color ID)

Прошлая статья про запечку описывала теорию этого этапа и процесс переноса детализации. Сегодня мы сфокусируемся на практике и особенностях именно стилизованных персонажей.

Для запечки необходимо иметь:

  • Хайполи модель (в нашем случае, это скульпт)
    С неё алгоритмы запечки будут снимать детализацию.
  • Лоуполи модель, созданную на этапе ретопологии
    К ней мы добавим запечённые карты и тем самым перенесём информацию с хайполи модели.
  • Готовую развертку,
    Все карты пекутся именно на неё.
  • Программу для «запечки»
    Marmoset/Substance Painter/Maya/3Ds Max или любую другую.
После этого этапа, в следующей статье, мы перейдём к текстурированию, — то есть к покраске нашей модели.

Ключевая мысль этой статьи

Процесс «запечки» написан на очень сложных и чувствительных алгоритмах.

У этих алгоритмов есть целый ряд требований к модели. А любая ошибка приводит к артефактам, которые могут испортить всю проделанную работу.

Секрет простой и успешной запечки кроется в том, чтобы на всех предыдущих этапах пайплайна учитывать особенности этого процесса.

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

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

Подготовка хайполи под бейк

Ранее, когда мы показывали процесс скульптинга, сразу перед началом ретопологии, мы совершили два простых действия в ZBrush:

1. Прижали геометрию
    Потому что в таких местах часто появляются артефакты.

    2. Покрасили хайполи для карты Color ID
      Мы покрасили разные материалы в разные цвета и сохранили в отдельный файл. Из него сегодня мы запечём карту Color ID, — она необходима для текстурирования.

      Подготовка лоуполи под бейк

      В процессе подготовки к запечке наша лоуполи будет изменяться. Удалятся оверлапнутые элементы, добавится триангуляция и так далее.

      Всё это будет сделано для того, чтобы запечка прошла без артефактов.

      Нам крайне важно не потерять исходный файл.

      Сделаем копию исходного файла: это будет отдельный файл лоуполи для запечки. Далее мы будем работать именно с ним.

      Первый шаг

      Объединяем всю топологию в один объект. Чтобы при нажатии на любую часть модели выделилась вся модель, а не конкретный элемент.
        В конце именно эту версию модели мы отправим аниматору.
        Все остальные версии лоуполи-модели — технические.

        Удаляем все элементы, на которых есть оверлапы

        На прошлом этапе пайплайна мы сделали оверлапы, чтобы сэкономить место на UV. Но в процессе запечки лишние одинаковые элементы не нужны.

        Оставляем только по одному оверлапнутому элементу на модели, остальные удаляем.

        В нашем случае это элементы на броне и перчатках.

        Слева — финальная модель. Справа — модель для запечки. Удалены объекты с оверлапами
        Разбиваем модель на несколько объектов

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

        Чтобы этого избежать, нужно разделить модель на несколько объектов.

        Внутри каждого объекта все элементы должны находиться на расстоянии друг от друга.

        Распределяем элементы по разным объектам. Это выглядит так:
        Внутри каждого объекта элементы находятся на расстоянии друг от друга.
        Если между элементами маленькое расстояние, у них будет пересекаться Cage (зона поиска). И снова появятся артефакты. Так делать не надо:
        Объекты слишком близко друг к другу, так делать нельзя
        Что делать? Если видим, что два элемента геометрии лежат рядом, кладём их в разные группы:
        Эти два элемента клади в разные группы, так как они пересекаются.
        Тело нашего стилизованного персонажа с парой тряпок на руках и ботинками у нас лежит в одной топологии, — поэтому под тело создаём отдельный объект.
        Триангулируем модель

        Теперь у нас есть две версии нашей лоуполи-модели.
        Первый — модель для запечки, в которой объекты разбиты по группам.
        Второй — финальная модель, где вся геометрия сшита в один объект.
        Слева — модель для запечки. Справа — финальная модель.
        Пока что обе модели сделаны в квадах.
        Алгоритмы запечки лучше всего работают с треугольными полигонами.
        Поэтому у версии лоуполи для запечки нам нужно сделать ещё одну копию и триангулировать.
        Затем берём триангулированные группы и выгружаем в формат .obj.
        Каждый триангулированный объект = отдельный файл в формате .obj
        Каждый файл .obj состоит из одного объекта. А в этом объекте геометрия не пересекается и лежит на расстоянии.
        Далее полученные файлы нужно загрузить в Marmoset для запечки.
        Можно использовать любую программу, но Marmoset на данный момент — самый удобный вариант.

        Открываем Marmoset

        Первым делом создаём новые группы в бейкере:

        В каждую группу бейкера загружаем файлы лоуполи и хайполи.

        1 группа в бейкере = 1 файл .obj с хайполи и триангулированным объектом лоуполи модели.

        Получилась такая структура внутри бейкера:
        Затем выбираем, какие карты будем запекать.
        Для стилизованного персонажа я рекомендую создать именно эти карты:

        — Normal Map
        — Normal (Object)
        — AO (Ambient Occlusion)
        — Curvature
        — Convexity
        — Concavity
        — Vertex Color (Color ID)

        Затем указываем расширение (размер) карт:
        Указывать нужно значение в два раза больше, чем будет в игре.
        Например, если нужны 2К текстуры для проекта, то запекаем в 4К.

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

        Другие настройки:

        Формат: .psd (или другой, как удобнее)

        Samples (уровень сглаживания): 16x (если поставить мало, то появятся «лесенки» на переходах от материала к материалу)

        Format: 8 Bits/Channel (зависит от ТЗ проекта)

        Padding Size: указываем размер паддинга равный паддингу на нашейUV.

        В нашем случае настройки такие:
        Дальше нажимаем кнопку со знаком «Р»:
        Эта функция привязывает все карты к одному конкретному материалу.

        Так как материал у нас один, то ничего больше делать не нужно.
        А один материал у нас потому, что развёртка всего персонажа сделана на одной UV.

        Дальше мы, наконец-то, нажимаем кнопку Bake.
        Когда всё готово, в папке появятся psd файлы со всеми картами:
        Описание карт

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

        Normal Map

        Содержит информацию о поверхности.

        Карта создаёт виртуальные вертекс-нормали в каждой точке low poly модели и искажает поведение света. Если наложить запечённый нормал на модель, то она будет выглядеть почти как high poly.

        Это одна из самых важных карт, которая запекается почти для каждой модели.

        Более подробно о Normal Map мы писали здесь.

        Normal (Object)

        Информация о поверхности относительно окружающей среды.
        По сути, эта карта учитывает то, что у модели есть верхняя и нижняя часть.

        Главное визуальное отличие от Normal Map состоит в том, что на этой карте есть градиенты.
        Карта Ambient Occlusion (AO)

        Это карта затенения. Она показывает самые глубокие тени в объекте. В основном это тени в углублениях и на пересечениях.

        Эту карту используют в игровых движках для создания корректного освещения, а также она очень полезна в текстурировании.
        Даже когда объект ярко освещён, на нём всё равно есть тени. Именно их передаёт эта карта.
        Curvature

        Содержит информацию о глубинах и высотах.
        Чёрный цвет показывает самые глубокие и плоские места, светлый цвет — острые и максимально выпуклые.
        На самом деле, есть ещё две отдельных карты: Convexity и Concavity. Карта Convexity передаёт только информацию о высотах, а карта Concavity — только о глубинах. Если эти две карты объединить, то получится карта Curvature.

        Но я люблю запекать сразу 3 карты: Curvature, Concavity и Convexity. Так проще работать во время текстурирования. В то же время, многие трёхмерщики запекают только карту Curvature, и этого зачастую вполне достаточно.

        Convexity (необязательная карта)

        Это карта выпуклостей. Помогает класть затертости и царапины на границах форм. Эту карту можно вытащить из АО и Curvature, но иногда удобнее запечь ее отдельно.

        Concavity (необязательная карта)

        Содержит информацию только об углублениях. Помогает накладывать грязь и пыль в тонкие места. Эту карту тоже можно сгенерить с помощью АО, но её тоже бывает полезно запечь отдельно.
        Vertex Color (Color ID)

        Об этой карте мы писали в статье про запечку.

        Эта карта сохраняет маски по материалам, что позволяет быстро, в один клик, выбрать один конкретный материал при текстурировании.

        У нашего персонажа есть рога, броня, ткань, болты и кожа. Всё это разные материалы, которые очень легко выбирать с помощью Color ID.
        С картами разобрались.

        Этап запечки почти закончен.

        Добавляем карту нормалей к лоуполи и сразу видим результат:
        Лоуполи + Normal Map
        Финальный этап — проверить карты на ошибки.

        Проверять на артефакты нужно прежде всего Normal Map. А небольшие артефакты на других картах можно легко исправить во время текстурирования.

        Проверяем запечку на артефакты

        О нет, у нас артефакт на нормале! На модели появились небольшие странные полоски.
        Артефакты появляются по целому ряду причин. Некоторые из них мы объясняли здесь.

        Это нормально, просто артефакт нужно убрать. Для этого попробуем самые частые методы исправления артефактов:

        1. Геометрия лоуполи и хайполи не совпадает

        Нужно исправить геометрию — немного подвинем вертексы, чтобы они лучше совпадали:
        Затем грузим этот изменённый кусок обратно в Мармосет, запекаем заново, меняем Cage.

        Стало лучше, но, к сожалению, до конца не помогло. Значит, идём дальше.

        2. Геометрия на лоуполи пересекается

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

        Проверяем. В нашем случае этот кусок лежит далеко от других элементов.
        Поэтому идём дальше.

        3. Замазываем артефакт в фотошопе

        Это самый кардинальный метод, который часто помогает. Нужно открыть запечённый Normal Map и замазать артефакт вручную.

        Проблема в том, что на карте нужный кусок не так-то просто найти. Поэтому запечём одну дополнительную карту: Wireframe.

        Эта карта поможет легко найти расположение любого элемента на UV.
        А благодаря этому мы легко найдём его же на Normal Map и сможем замазать артефакт.
        Так выглядит эта карта:
        Запечённая карта WireFrame
        Ищем нужное нам место на UV.

        Искать, конечно, нужно внутри первого квадрата UV. Просто выделяем нужный объект на модели, и его расположение на UV подсветится.
        А затем открываем карту с нормалом, увеличиваем и сразу видим наш артефакт:
        Просто замазываем его:
        Отлично! Теперь никто не узнает, что на нормале был артефакт:
        4. Альтернативный метод исправления артефактов

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

        ----------

        Итак, этап запечки завершён! Мы разбили модель на группы запечки, создали все необходимые карты и убрали артефакт на нормале.

        Если ты читал прошлую статью про запечку, написанную Игорем Дятловым, ты мог заметить, что на самом деле, этот этап гораздо сложнее. Отсюда вытекает логичный вопрос:

        Почему так просто?

        Почему запечка прошла так легко и без проблем?

        Давай разбираться.

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

        Мы учитывали особенности алгоритмов запечки на всех этапах, начиная со скульпта.

        Вот некоторые из моментов, которые всегда нужно учитывать.

        1. Правильная поза у персонажа

        У персонажа руки раздвинуты немного в сторону.
        Поэтому геометрия не слипается.

        Правильная поза для стилизованного персонажа
        Если, например, бицепс, будет пересекается с телом — в таком месте могут появиться артефакты. Вот пример, как не надо делать:
        Пример неправильной позы у стилизованного персонажа
        2. Правильная и простая группировка объектов

        Все объекты в каждой группе запечки находятся на расстоянии друг от друга, поэтому их Cage не пересекается.

        Это делается легко и просто, зато позволяет избежать большей части артефактов во время запечки.
        Вот пример того, как делать не надо. Здесь Cage (зона поиска зелёного цвета) у двух разных объектов пересекается:
        Пример с ошибкой, которую часто допускают новички
        3. Чистый ретоп

        Мы использовали функцию с «магнитиком», и поэтому, когда мы создавали лоуполи модель, все вертексы полностью прилегали к хайполи.

        Именно поэтому хайполи и лоуполи почти идеально совпадают, а артефакты не появляются.

        Вот пример плохого совпадения лоуполи и хайполи:
        Если видишь нечто подобное — исправляй модель, иначе во время запечки будут проблемы.
        4. На этапе UV

        Была создана ровная, без сильных потяжек,развёртка, с равномерным текселем на всех шеллах.
        Все шеллы оптимально упакованы в квадрат без лишних пустот.
        5. Продуманная модель

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

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

        На модели, где это возможно, прижаты элементы одежды. За счёт этого мы избегаем ненужных пустот, с которыми сложно работать на этапе ретопологии.

        Более того, такие места часто создают ненужные артефакты во время запекания.
        Если хочешь научиться создавать полный цикл стилизованных персонажей для компьютерных игр и перенять опыт наших преподавателей — ещё не поздно записаться на наш курс STYL.

        Тебя ждут целых пять месяцев обучения, индивидуальные фидбеки твоих работ и несколько сотен трёхмерщиков со всей России, с которыми ты познакомишься в отдельном Discord-сервере по персонажке. Читай подробности в этой статье.
        Понравилась статья?
        Хочешь получать лучшие статьи
        от XyZ раз в неделю?
        Подпишись на рассылку XyZ
        Нажимая на кнопку, вы соглашаетесь с условиями обработки данных