Что такое запекание карт

Это норма — 2: как запекаются карты нормалей

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

Общий принцип запекания карты нормалей относительно прост: у нас есть lowpoly-модель с UV-координатами и highpoly-модель; мы переносим информацию о нормалях с highpoly на lowpoly. Благодаря этому lowpoly будет отражать свет так же, как highpoly.

Во время этого процесса программа запекания по сути испускает лучи из lowpoly, следуя по нормалям вершин и ища higpoly. Это самый важный аспект создания карт нормалей, и бОльшая часть проблем, возникающих при работе с картами нормалей, связан с ним.

Если вы не контролируете нормали вершин lowpoly-модели, то потеряете контроль над картой нормалей.

Плохая корреляция карт нормалей

Чтобы контролировать сглаживание lowpoly-модели, нам нужны разделённые (split) нормали вершин (для создания жёстких рёбер) или усреднённые (averaged) нормали вершин (для создания гладких рёбер).

Как оказалось, не все 3D-программы используют для усреднения нормалей вершин одинаковые вычисления. Это значит, что в разных 3D-редакторах lowpoly-модель будет выглядеть иначе, а её нормали вершин будут указывать немного в разных направлениях. Обычно это не представляет большой проблемы, потому что эти отклонения очень малы, но они влияют на внешний вид модели; и эти различия усиливаются при использовании карт нормалей, потому что карты нормалей изменяют нормали lowpoly-модели, которые в разных программах различаются.

Индустрия 3D-графики работает над устранением этой проблемы; недавно появился стандарт под названием Mikk space. Это метод вычисления нормалей вершин, который могут использовать все 3D-приложения, чтобы нормали вершин во всех 3D-программах выглядели одинаково. Однако нужно учесть, что пока его используют не все 3D-приложения.

Ещё один способ снижения этого влияния заключается в том, чтобы не очень сильно полагаться на карты нормалей при запекании. Попробуйте сделать так, чтобы lowpoly-модель больше напоминала highpoly-модель и используйте больше жёстких рёбер на плоских поверхностях. В таком случае карте нормалей не придётся выполнять всю работу и небольшие отклонения станут менее заметными.

Скос деталей карт нормалей

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

Так как программа запекания нормалей при поиске деталей highpoly использует направления нормалей lowpoly, то если эти направления будут скошенными, то они будут выглядеть скошенными на карте нормалей:

Это очень распространённая проблема, для которой найдено несколько решений. Идеального решения нет, всё зависит от геометрии.

1. В некоторых 3D-программах запекания существует опция повторного запекания (rebaking) этих частей с временным изменением нормалей lowpoly, чтобы они запекались без скоса. Например, такая опция есть в Marmoset Toolbag. Пользователь Reddit под ником Tanagashi любезно объяснил мне, что некоторые программы наподобие xNormal могут тесселировать lowpoly, чтобы добавить новые вершины и сделать нормали перпендикулярными к поверхности lowpoly, запекать карту нормалей в пространстве объекта, а затем преобразовывать её в касательное пространство на основании исходных нормалей lowpoly. С помощью новой карты нормалей программа может создавать маски для управления тем, где использовать исходную карту нормалей, а где созданную из тесселированной lowpoly-модели.

2. Добавление вершин сделает переход между нормалями вершин менее скошенным, потому что один угол в 90º будет разделён на несколько меньших градусов, делая второй переход менее скошенным. Очевидно, что это увеличивает количество полигонов, и поскольку вы добавляете геометрию, я рекомендую использовать эти дополнения для создания более интересного силуэта модели.

3. Разделение усреднённых нормалей вершин (делая ребро жёстким/используя отдельные smoothing groups): таким образом, каждая вершина будет иметь несколько нормалей, каждая из которых перпендикулярна к поверхности lowpoly. Не забывайте, что когда 3D-программа имеет разделённую нормаль вершины, то она на самом деле создаёт дубликат вершины, увеличивая таким образом количество вершин и немного снижая производительность. Кроме того, как мы увидим позже, жёсткие рёбра создают проблему «чёрных рёбер».

4. Можно изменять нормали моделей, чтобы изгибать нормали lowpoly, чтобы они были перпендикулярными нормалям highpoly. Помните, что не все программы позволяют использовать изменённые нормали (в Zbrush есть только усреднённые нормали, файлы OBJ и устаревшие FBX не содержат специальной информации о нормалях). По сути, существует два способа изменения нормалей:

Cage/baking distance

По умолчанию, испускаемые с поверхности lowpoly лучи проходят ограниченное расстояние, чтобы lowpoly не получала информацию о нормалях от далёких частей highpoly. Это расстояние обычно называется «frontal/rear distance», потому что лучи могут испускаться по направлению внутрь, наружу, или в обоих направлениях. На рисунке ниже это расстояние показано красным:

Некоторые 3D-приложения (например, 3ds Max) также позволяют использовать «клетку» (cage). Cage — это «копия» lowpoly-модели, которую можно модифицировать таким образом, чтобы она идеально заключала в себе highpoly. Также в некоторых случаях (не всегда) она позволяет нам менять направление лучей, не изменяя при этом исходные нормали вершин lowpoly. Это может помочь получит наилучшие граничные случаи запекания и избежать скосов; однако нужно помнить, что мы запекаем, используя не направление вершин нормалей, но в конечном итоге применим карту нормалей для изменения истинных нормалей lowpoly, поэтому результат может выглядеть странно.

Швы на рёбрах

Как мы видели, если имеется модель с жёсткими рёбрами (некоторые рёбра имеют больше одной smoothing group, или некоторые рёбра помечены как «hard»), то программа запекания разделяет нормаль вершин между двумя гранями. У этой операции есть хорошие и плохие стороны.

Хорошо в ней то, что нормали не усредняются, поэтому присутствует меньше искажений нормалей: нормали вершин полностью перпендикулярны к поверхности lowpoly. Также это может сделать lowpoly более красивой, если у неё есть грани под резкими углами, более подходящими для жёстких рёбер.

Плохо то, что теперь между нормалями существует пробел, и это может означать, что мы можем потерять информацию, если lowpoly имеет пробел в нормалях там, где она не может получить деталей highpoly. Более того, некоторые части проекции lowpoly могут пересекаться и конкурировать за одно UV-пространство. Оба эффекта создают шов вдоль ребра, заметность которого зависит от движка.

Читайте также:  Брексит это что такое

Однако этого можно легко избежать при помощи простого трюка: если две грани разделены жёстким ребром, то нужно поместить каждую грань на отдельный UV-остров, оставив между ними пространство. Чтобы снизить влияние проблемы разделённых нормалей, программы запекания пытаются немного дополнительной информации за пределами вершин нормалей, но для этого им требуется на текстуре дополнительное пространство. Если грани, разделённые жёстким ребром, соединены в UV, то для сохранения этой дополнительной информации на текстуре не будет места.

Заключение

Подготовив lowpoly-модель и сделав её как можно ближе к highpoly-модели, я начинаю работать над сглаживанием перед UV. Я задаю сглаживание для lowpoly (если объект органический, то я начинаю с полностью сглаженной модели, если он имеет твёрдую поверхность, то я задаю угол сглаживания в пределах 30-60º и настраиваю сглаживание, пока результат не будет выглядеть хорошо).

Подготовив сглаживание модели, я начинаю работать над UV, разделяя все жёсткие рёбра на отдельные UV-острова (чтобы избежать швов на рёбрах).

Если возникают ошибки со скосами, то я добавляю дополнительные рёбра (обычно я делаю фаски (bevel), чтобы сохранить округлость силуэта). Это срабатывает для большинства моих моделей, но я могу исправлять ошибки со скосами, если использую для запекания Marmoset Toolbag, или применяя собственные/взвешенные нормали.

При наличии ошибок проецирования я изменяю baking distance/cage, модифицирую lopoly/highpoly, чтобы они лучше подходили для запекания, или удаляю карты нормалей на отдельных очень жёстких частях, например, на концах конусов.

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

Источник

Всё про Bake (Запечку) как этап ААА-пайплайна

Привет! Мы продолжаем цикл статей по пайплайну разработки стилизованных персонажей. Сегодня расскажем, что такое этап запечки, и как перенести детализацию с высокополигональной модели (high poly) на низкополигональную (low poly).

Запечка (Bake) — четвёртый этап ААА-пайплайна. На прошлом мы сделали развёртку, а сейчас будем её использовать для создания Normal Map, AO и Color ID.

Примечание: нам часто говорят, что правильнее писать «запекание», а не «запечка». Мы пишем «запечка», потому что это устоявшийся термин в индустрии.

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

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

Взглянем на low poly модель, которую сделал наш студент Leon.

Низкополигональная модель, созданная на этапе ретопологии

В ней минимум полигонов и чистая сетка. Эта модель будет загружаться в игровой движок.

Есть ещё 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. Normal Map

Normal Map переводится как «карта нормалей»
Она изменяет направление блика на геометрии.

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

Вот хороший пример: low poly модель с включенным Нормалом и без него.

Модель с включенным нормалом и без него

Новые полигоны не создаются, это лишь иллюзия формы:

Приглядись, видишь low poly сетку? Все детали и затенения, которые ты видишь — иллюзия.

Чтобы создать нормал, нужно взять развёртку, которую мы делали ранее, взять high poly и скульпт, загрузить в программу для запечки и нажать кнопку «bake».

Там много нюансов, но мы обо всём расскажем.

Из чего печётся Normal map

Что нужно знать о Нормале

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

Чёрные полоски на нормале

Почему не стоит сильно волноваться о чёрных полосах?
Игрок почти всегда видит модель в игре на расстоянии. Поэтому не нужно тратить несколько часов, чтобы убрать чёрные полоски на нормале:

Та же модель, но на расстоянии. Чёрные полосы не режут глаза, — значит, всё окей.

Из чего состоит карта нормалей

Normal map создает иллюзию объёма благодаря трем картам в каналах текстуры: красный, зелёный, синий.

Чтобы переключаться между каналами, откроем файл с нормалом в Photoshop и зайдём во вкладку Channels.

Красный канал показывает искажение вертекс нормалей по горизонтали. Чем светлее пятно на красном канале — тем сильнее виртуальная поверхность наклонена вправо, а чем темнее — тем больше «поверхность» бликует влево.

Читайте также:  нанопласт что входит в состав

Красный канал нормала

Зелёный канал — работает так же, но искажает шейдинг по вертикали.
Светлый-блик поворачивается наверх, а тёмный — вниз.

Зелёный канал Нормала

Чтобы лучше понять разницу между этими двумя каналами, посмотрим на эту часть модели:

У бочки на high poly есть фактура дерева.
Затемнение идёт только по одной из осей.

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

А зелёный канал — показывает искажения по вертикали. Так как виртуальные плоскости не отклоняются вверх/вниз, то затемнений почти нет, то информации на нормале в этом канале почти не будет:

Зелёный и красный канал нормала на примере бочки

Красный и зелёный каналы — основные для нас (как моделлеров).
Но у Нормала есть ещё синий канал.

Синий канал имитирует углубления в объекте.
В играх он практически не используется.

За счет изменения синего цвета на нормале создаются искажения на плоской поверхности.

Если на синем канале есть артефакты, можно просто выключить этот канал, т.е. отключить синий цвет у нормал мапа в фотошопе. Или просто их замазать артефакты кисточкой.

Синий канал нормал

Больше про три канала Нормала — в этой статье.

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

Нейтральный цвет Нормала

128х128х255 — нейтральный цвет нормала.

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

В каком формате лучше хранить нормал

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

Поэтому файл лучше сохранять в форматах Targa или TIF.
При сохранении есть выбор, сохранять в 24 или 32 bit.
Если есть Альфа-канал — сохраняем с 32 bit.
Если Альфа-канала нет — в 24 bit.

2. Карта АО

Так выглядит запечённая карта АО

Карта Ambient occlusion (AO) — это карта затенения.
Она показывает самые глубокие тени, которые есть в объекте.
В основном это тени в углублениях и на пересечениях. Эту карта используют игровые движки для корректного освещения. Она также очень полезна в текстурировании.

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

Если добавить на low poly модель карту АО, на модели появятся самые глубокие тени

Также как и нормал, карта АО печётся на развёртку модели из high poly и скульпта.

Карта AO создаётся из highpoly и скульпта

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

С картой АО разобрались, последняя карта, которая нам нужна — 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.

Источник

Всё про Bake (Запечку) как этап ААА-пайплайна

Это пятая статья из цикла про ААА-пайплайн. Вот ссылки на все пять, выбирай ту, которая тебе нужна:

Эта статья поможет новичкам, которые хотят научиться делать запечку без артефактов. Ты узнаешь, что такое запечка, зачем она нужна и научишься переносить детализацию с high poly на low poly. Внимательное изучение статьи займет около 20 минут. Если возникнут вопросы — пиши в чат-бот (кнопка справа внизу). Там на связи живой менеджер 🙂 Он поможет разобраться. Ну что, давай начнем!

Что такое запечка в 3D

Взглянем на low poly модель нашего студента.

Минимум полигонов и чистая сетка. Эта модель будет загружаться в игровой движок.

Есть ещё high poly модель с высокой детализацией и скульпт.

На low poly мы добавляем запеченные карты нормала и карту затенений. Это карты, которые обманывают поведение игрового света. Свет падает под определенным углом на модель и создает блик. В итоге нам кажется, что в модели много фасок, деталей и вырезов.

На этапе запечки наша задача — запечь 3 карты:

1) Normal map — карту неровностей
2) Ambient Occlusion (AO) — карту затенения
3) Color ID — цветные маски

Читайте также:  какие начинки для торта хорошо сочетаются

Если добавим Normal map и AO на low poly модель — на ней появится детализация с high poly и скульпта. Благодаря Color ID модель легче разбить по материалам и текстурировать. Эти карты создают на основе развертки, которую мы делали этапом ранее. Помни, если есть ошибки на развертке или low poly модели — будет куча проблем с артефактами.

Как запекать карты

Пример low poly модели с включенным нормалом и без него

Из-за того, что игрок видит модель в игре на расстоянии, нам не нужно тратить несколько часов, чтобы убрать черные полоски на нормале:

Normal map создает иллюзию объема из-за трех карт в каналах текстуры: красной, зеленой, синей. Чтобы переключаться между каналами, откроем файл с нормалом в Photoshop и зайдем во вкладку Channels.

Если после запечки есть артефакты, нормал нужно править руками. Иногда это делают сразу на всех трёх каналах, а иногда — на одном из них.

128х128х255 — нейтральный цвет нормала.

Если добавить полностью нейтральный нормал — особой разницы видно не будет. Модель будет шейдить так же, как обычная low poly.

В каком формате лучше хранить нормал?

После запечки часто приходится вносить изменения в нормал при помощи Фотошопа. Поэтому файл лучше сохранять в форматах Targa или TIF. При сохранении есть выбор, сохранять в 24 или 32 bit. Если есть Альфа-канал — сохраняем с 32 bit. Если Альфа-канала нет — в 24 bit.

Ambient occlusion (AO) — это карта затенения. Она показывает самые глубокие тени в объекте — в основном в углублениях и на пересечениях. Эту карту используют в игровых движках для создания корректного освещения и в текстурировании.

Например, без АО почти нереально сделать грязь. Но с картой АО мы легко сгенерируем маску углублений, чтобы забить их грязью.

По-умолчанию карта черно-белая, но на этапе текстурирования ее можно покрасить.

С помощью Color ID красим модель в разные цвета

Чтобы создать карту Color ID, нужно покрасить high poly модель в разные цвета. Один цвет — это одна группа объектов разбитая по материалам. Например, все дерево на Color ID — оранжевое, вся кожа — розовая, ржавый металл — синий, шерсть — голубая, а новый металл — зеленый.

Color ID — не цвета будущей модели, эта карта нужна для разделения на разные материалы.

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

Список карт, которые можно запечь

Если ты интересовался какой софт лучше использовать для запечки — это не важно. Принцип запечки во всех программах одинаковый. Просто выбирай, что больше нравится: Maya, Blender, 3D Max, Modo или Cinema 4D.

Как сделать самую быструю в мире запечку?

Шаг 1: Открываем Marmoset.
Шаг 2: Загружаем low poly и high poly, добавляем их в одну группу запечки (Baker).
Шаг 3: Нажимаем кнопку «Bake».

Когда карта будет готова, открываем Maya, добавляем на low poly карту нормалей.
Получается такой результат:

Артефакты появились по целому ряду причин. Где-то low poly и high poly плохо совпадают. Где-то элементы запеклись друг на друга. Где-то кейдж недостаточно большой. Единственный способ исправить ситуацию — переделать модель.

Что делать, чтобы на модели не было артефактов

1. Правильно подготовить low poly к запечке

Для этого мы следим за шейдингом модели. Вот пример плохого и хорошего шейдинга:

Секрет хорошего шейдинга — в правильной работе с хардами и софтами:

2. Убирать зазоры между геометрией

Следим, чтобы не было дырок между геометрией:

В таких местах нужно слегка притопить геометрию внутрь другой

3. Триангулировать модель

Проверив всю low poly модель, обязательно включаем функцию триангуляции.
Если не триангулировать модель перед запечкой — в разном софте она будет смотреться по-разному.

Что учитывать на high poly?

Если high poly шейдит некрасиво — дорабатываем геометрию. С high poly вся детализация будет переноситься на low poly.

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

Скошенная геометрия лучше печется на плоскости. А геометрия без скосов не печется совсем.

Крутой лайфхак в мире моделлеров — парящая геометрия.

Проверяем, совпадают ли high poly и low poly

High poly и low poly должны максимально совпадать. Вот пример, когда они не совпадают:

Затем проверяем, совпадают ли фаски. Для этого назначаем на low poly бликующий материал и делаем его прозрачным.

Что делать перед тем, как начать запечку

Мы уже подготовили low poly, high poly и развертку к запечке. Но прежде чем нажимать волшебную кнопку, нужно выполнить еще три простых действия, которые помогут в дальнейшем.

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

В Maya есть полезная функция File → Optimize Scene Size, которая удаляет из сцены мусор, который нигде не используется. Лишние слои, материалы и пустые группы.

Backup похож на резервное копирование, он поможет не потерять проделанную работу. Во время запечки иногда приходится править часть геометрии. Где-то добавятся фаски, где-то поддержки, и так далее. Поэтому может начаться настоящий хаос, если не сохранить исходник модели.

Перед запечкой создаем отдельную папку «Bake» и сохраняем туда бэкап исходного файла до начала запечки — на всякий случай.

Подготовка сцены в Marmoset

Ставим более высокое разрешение

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

Источник

Портал знаний