Что такое запекание текстур
Разбираем одно из ключевых понятий в 3D-моделировании и все основные операции, связанные с ним.
Скриншот: Damon Woods / ArtStation / Skillbox Media
В производстве игр важно найти баланс между производительностью и качеством картинки. Для лучшей оптимизации будущего проекта разработчики прибегают к процессу запекания, но не кулинарных творений, а данных, связанных с визуальной составляющей, — освещения, симуляций, анимаций и, конечно же, текстур.
Почему процесс называют запеканием
Термин «запекание» или «запечка» — буквальный перевод с английского слова baking. В контексте 3D-моделирования под этим подразумевается перенос комплексных данных в статичную форму. В данном случае — в текстурные карты. Эти текстуры формируют поверхность будущего материала.
Причины, по которым запекают текстуры
1. Создание уникальных материалов. В качестве основы может быть как фото, так и изображение, нарисованное вручную или созданное процедурным методом с помощью нодов. Художник запекает набор текстурных карт, свойства которых зависят от того, как должен выглядеть итоговый материал после экспорта в игровые движки или системы рендеринга. Также в процессе запекания текстуры можно спроецировать на готовую UV-развёртку модели.
2. Запекание упрощает рендеринг в реальном времени, так как игровой движок должен просчитать все тени, освещение и полигоны в каждом кадре. Запечённые текстуры уже содержат в себе информацию об отражении, освещении, объёме и прочих свойствах объекта, которые создают ощущение реализма.
3. Когда художник продаёт или делает на заказ модель с использованием PBR-материалов, загруженных с какого-либо ресурса, он рискует нарушить авторское право. Например, на большинство бесплатных материалов портала BlenderKit распространена лицензия Royalty Free, согласно которой пользователь может использовать загруженный контент в своих работах в коммерческих целях, но не в первозданном виде. И в этом случае запекание текстур помогает художнику избежать неприятностей при использовании лицензированного контента: у будущего покупателя не будет доступа к исходникам. Вместо этого он получит наборы текстур, содержащие лишь фрагменты сторонних материалов.
4. В игровые движки и системы рендеринга нерационально загружать модели, содержащие несколько миллионов полигонов. В целях оптимизации и экономии ресурсов создаётся low-poly-версия high-poly-модели, а все мелкие детали переносятся в виде текстурных карт.
Какие текстуры запекают
Существует много вариаций текстур, и каждая из них наделяет поверхность объекта особыми свойствами. Такое разнообразие связано с тем, что у каждого ПО разные системы шейдеров и наборы инструментов. Задача художника состоит в том, чтобы подготовить собственный набор карт, исходя из специфики игрового движка, системы рендеринга и общего визуального стиля проекта.
Текстуры, которые чаще всего используют в работе
Diffuse Map / BaseColor Map (Albedo/Color Map) — основная карта, которая определяет цвет и изображение поверхности меша. Исходя из названия, несложно сделать вывод, что у этой текстуры множество названий. Пользователи часто считают их синонимами, ведь данный тип карт обычно подключают в один и тот же слот шейдеров. Однако диффуз-карта и карта альбедо отличаются друг от друга как визуально, так и по свойствам. Поэтому начинающие 3D-художники часто путают понятия, когда речь заходит о создании базовой текстуры. В чём же отличие?
На стандартных диффуз-картах изображение содержит светлые участки и тени. Это приводит к тому, что при наличии дополнительных источников света и технических карт на объекте могут появиться лишние тени или засветы. В контексте реалистичной графики это может негативно повлиять на итоговую картинку.
В последние годы художники часто используют PBR-материалы с картой альбедо в качестве основы. По сравнению с диффуз-текстурой она достаточно блёклая: на изображении отсутствуют затенения и яркие участки, но остаётся информация о цвете будущего материала. Все расчёты по освещению выполняет движок или система рендеринга в сочетании с картой Ambient Occlusion, речь о которой пойдёт ниже. Из-за этого поверхность объекта выглядит более яркой и естественной.
Normal Map — карта нормалей с информацией о направлении каждого пикселя. Визуально она выглядит как цветная текстура с RGB-каналами. Красный отвечает за направление по оси X, зелёный — за ось Y и, соответственно, синий — за ось Z («выдавливает» нормали из поверхности). В зависимости от направления света в сцене карта нормалей придаёт объекту рельеф, создавая иллюзию высокополигональной модели. Форму рельефа можно отрегулировать, настроив RGB-каналы вручную.
Примечание
Bump Map — более ранняя версия карты нормалей. Это 8-битная карта, поддерживающая оттенки белой, чёрной и серой гаммы. При сером пространстве поверхность остается неизменной. Белый цвет создает имитацию выпуклых деталей, а чёрный, наоборот, «вдавливает» их внутрь. Тем не менее в некоторых системах шейдеров всё ещё существует поддержка Bump Map, и вместо неё можно подключить современную Normal Map.
Displacement Map — карта смещения, которая добавляет поверхности объём и эффект глубины. В отличие от Normal Map и Bump Map она не просто создает иллюзию объёма от освещения, но и смещает геометрию объекта, в результате чего он приобретает видимый объём.
Примечание
Height/Parallax Map — карта высот/параллакса — аналог Displacement Map. Она тоже создаёт эффект рельефа, выходящего за пределы меша. Карту высот часто используют для текстурирования ландшафта, так как её свойства изменяют высоту вершин. За счёт этого некоторые участки меша визуально кажутся выше, чем другие, в зависимости от того, с какого ракурса зритель или игрок смотрит на текстурированную поверхность.
AO (Ambient Occlusion) Map — текстура, придающая мягкое затенение поверхности объекта, как при рассеянном освещении в облачную погоду. Она содержит данные о том, какие участки текстуры будут меньше или больше освещаться. Ambient Occlusion влияет только на диффузные (не зеркальные) отражения поверхности и зависит от общего света окружения, а не от отдельных источников.
Примечание
Сейчас многие игровые движки поддерживают эффект Ambient Occlusion в реальном времени. Эта техника известна как SSAO (Screen-Space Ambient Occlusion).
Specular Map — текстура с данными отражения от источников освещения. Обычно она выглядит как карта в серых тонах, где светлые участки сильнее отражают свет. Если нужно подчеркнуть отражение сложных металлических поверхностей — например, металлов со ржавчиной, — можно использовать цветную текстуру и таким образом оттенить отражение, что характерно для подобных материалов.
Glossiness Map — карта глянцевитости (не блеска), которая используется в сочетании с картой Specular. Она определяет, какие области поверхности дают больше глянца, а какие — меньше, в зависимости от интенсивности цветов карты. Чёрные области текстуры создают полный глянец, белые убирают его, а серые дают промежуточное значение свойства.
Metallic Map — альтернатива карте Specular, указанной выше. Эта чёрно-белая текстура работает как маска основной карты и сообщает системе рендеринга, какие участки поверхности объекта металлические, а какие — нет.
Roughness Map — карта шероховатости, которая идёт в сочетании с Metallic Map. Прямая противоположность карты глянцевитости, поэтому текстура инвертирована.
Примечание
Существует два подхода к текстурированию металлов PBR-материалами — Diffuse/Specular/Glossiness и Albedo/Metallic/Roughness.
В первом случае необходимо самостоятельно отрегулировать Specular Map, чтобы отражение не получилось слишком цветным и рассеянным, так как у металлов нет таких свойств. Для более реалистичного отображения металлов тёмные участки Specular-текстуры получают основной оттенок поверхности, а неметаллические — серый. В свою очередь, участки диффуз-текстуры закрашивают чёрным в тех местах, где предполагается металлическая поверхность.
Подход с картой Metallic намного проще: система рендеринга самостоятельно посчитает оттенок отражения элементов, отмеченных белым. Цвет металла зависит от базового цвета карты, а остальные элементы будут отмечены чёрным.
Если все условия соблюдены, итоговый результат обоих подходов будет практически неотличим. Но стоит учитывать, что в этом случае Specular-подход потребует больше производительности из-за наличия цвета в карте отражений, и художнику придётся больше работать над покраской текстур, чтобы достичь нужного эффекта реализма.
В отличие от реалистичной графики стилизация не так требовательна к реализму. Поэтому в рамках стилизованных проектов набор текстур зависит от специфики общего визуала. Часто встречаются случаи, когда художнику не требуется ни одна из карт, озвученных выше, кроме Diffuse, так как материалам не нужно ни отражение, ни рельеф, ни тени — все эти свойства уже присутствуют в базовой текстуре за счёт ручной рисовки или других художественных техник.
Текстуры с побочными свойствами
Emissive/Emission Map — цветная карта для имитации излучения света материалом. Цветные участки соответствуют цвету излучения. В зависимости от настроек шейдеров в ПО, поверхность объекта может просто светиться изнутри или стать полноценным источником света.
Curvature/Concavity/Convexity Map — карта кривизны в серых тонах, которая содержит информацию о выпуклых (белый цвет) и вогнутых (тёмно-серый цвет) участках. Нейтральные области отмечены серым цветом. Чаще всего используется в качестве маски, когда нужно подчеркнуть мелкие трещины, изношенность, щели и швы, в которых скопилась грязь.
Opacity/Transparency/Alpha Map — чёрно-белая карта (иногда с оттенками серого), определяющая непрозрачность текстуры. Чёрный цвет — прозрачные участки, белый — непрозрачные. Чаще всего используется для текстурирования решёток, растительности и волос.
Transfluency Map — цветная карта прозрачности. Внешне похожа на диффуз-карту, но её оттенок более яркий. Свойство прозрачности позволяет источникам света пропускать сквозь материал часть лучей. Transfluency Map используют в работе, когда нужно подчеркнуть реализм в сценах, где лучи солнца или яркого фонаря просвечивают листья деревьев, лепестки цветов, ткани и другие тонкие меши. Цветную карту прозрачности сочетают с картой Opacity для определения границ эффекта от текстуры.
Color (ID) Map — техническая цветовая карта (не путать с Color Map / Albedo Map), которая упрощает дальнейшую работу по раскраске или наложению текстур сложных объектов. Для этого модель разделяют на логические части и за каждой закрепляют материал с определённым цветом. Например, бежевый — для тела, коричневый — для одежды и так далее. Подобная разметка помогает быстро распределить все необходимые материалы по текстурному пространству и подготовить основную карту.
Примечание
Как и прочие ситуативные карты, перечисленные выше, текстуру Color ID запекать необязательно. Тем не менее она значительно упрощает процесс текстурирования в Substance Painter и аналогичных программах.
На что обращать внимание при запекании текстур
Во многих подходах наборы текстур можно сгенерировать с помощью графических редакторов или специальных программ наподобие ShaderMap. Поэтому в рамках этого материала мы рассмотрим несколько нюансов запекания текстур, которые встречаются при переносе деталей high-poly-моделей на low-poly.
Перед запечкой необходимо подготовить так называемый кейдж (от англ. cage) — продублированный меш low-poly-объекта. Кейдж должен максимально плотно прилегать к high-poly- и low-poly-моделям, но не пересекаться с их геометрией. Таким образом исходящие лучи при запекании будут отскакивать от кейджа и получать информацию о том, как преобразовывать мелкие детали high-poly-объекта в карту нормалей для low-poly.
Примечание
Во время процесса переноса нельзя изменять геометрию low-poly модели и кейджа, иначе на запечённых текстурах появятся артефакты. Если остались какие-то детали, которые нужно перекрыть кейджем, то геометрию кейджа можно двигать только в пространстве путём перемещения, не меняя направление граней и вершин.
Также желательно назначить кейджу материал яркого цвета. Так при корректировке перекрытия будет проще заметить, какие части high-poly-модели всё ещё находятся поверх кейджа.
Чаще всего после запекания текстур на поверхности низкополигонального объекта образуются артефакты из-за отсутствия шва в местах жёстких рёбер, о которых мы упоминали в материале про UV-развёртку. В этом случае придётся либо переделать развёртку и отметить недостающие швы, либо смягчить углы с помощью специальных инструментов в программе для 3D-моделирования. Например, использование Фаски (Bevel) в Blender на краях высокополигональной модели помогает улучшить качество запекания.
Примечание
Перед тем как исправлять артефакты, вызванные швами, оцените, насколько они критичны в контексте текущей задачи. Если модель сделана не для ассета на маркетплейсе и не для игры, а рассчитана на использование в статичном рендере или расположена в сцене таким образом, что данные недочёты не увидит зритель, возможно, рациональнее уделить внимание каким-то более важным вещам.
Ещё одна частая проблема — некорректное отображение нормалей в результате запекания. Полученный рельеф кажется либо слишком вдавленным, либо нечётким, либо его вообще нет. Это связано с тем, что лучи, исходящие от low-poly-объекта, не могут правильно считать информацию о рельефе high-poly-объекта из-за того, что его меш расположен слишком близко или слишком далеко. Эту проблему может исправить корректировка расстояния во время запекания.
С более подробным списком проблем, связанных с запеканием карт нормалей и их решением, можно ознакомиться в четвёртой части туториала This is normal от художника Карлоса Лемонса на ArtStation. На Habr размещён неофициальный перевод этой главы на русский язык.
Примечание
Существуют техники, при которых необязательно запекать все мелкие детали высокополигональной модели. Достаточно обзавестись специальным набором кистей и использовать их в программах, которые поддерживают альфа-кисти и карты высот.
Полезные ссылки на материалы о запекании текстур
В рамках ознакомительного материала невозможно разобрать все тонкости запекания в каждой программе для 3D-моделирования. Но можно узнать о них больше, ознакомившись с небольшой подборкой обучающих материалов.
3ds Max:
- официальная документация;
- подборка уроков (канал Autodesk 3ds Max Learning Channel).
Maya:
- видеоурок по компоновке UV-развёртки персонажа и запеканию текстур (канал TutorCG);
- видеоурок по переносу деталей с high-poly на low-poly (канал Figura).
Blender:
- пошаговое руководство по UV-развёртке и запеканию текстур (сайт Brandon’s Drawings 2D/3D-художника Брэндона Стокинга);
- видеоурок по запеканию нормалей с высокополигонального объекта на низкополигональный (канал Blender Guru);
- видеоурок по запеканию разных деталей на одну карту (канал Ryan King Art).
Substance Painter:
- официальная документация;
- видеоурок (канал Flipped Normals Marketplace).
Marmoset Toolbag:
- официальная документация по запеканию деталей высокополигональной модели на низкополигональную;
- официальный видеоурок.
3DCoat:
Итог
Существует много причин, по которым запекают текстуры. В любом случае этот процесс помогает оптимизировать объекты, поверхность которых наделена множеством свойств.
Окончательный вид текстуры формируют технические карты — Normal, Specular, Ambient Occlusion и многие другие.
Набор текстур зависит от визуального стиля проекта, специфики ПО и предполагаемой фактуры самих материалов.
При переносе деталей high-poly-модели на low-poly необходимо проверить наличие швов на жёстких рёбрах, настроить правильную дистанцию между проецируемыми мешами и использовать кейдж.
Запекание текстур доступно во всех программах для 3D-моделирования, но сам процесс в каждой из них происходит по-разному. Выберите для себя самый оптимальный и понятный инструмент, внимательно изучите его и приступайте к освоению «кулинарных» навыков в 3D.