Гайд. Создание ёлочной игрушки с нуля. Часть 2
Дмитрий Копейкин, автор и преподаватель нашего курса Draft Punk, написал гайд по созданию ёлочной игрушки для новичков в двух частях. Делимся с вами.
UV Mapping
Сначала немного теории. Текстурная развёртка (UV-маппинг) — это что-то вроде снятой с 3D-модели шкурки, как с мандарина, разложенной на плоскости. Нам она необходима чтобы в дальнейшем работать с текстурами. Без развёртки программа не поймёт, как наложить на 3D-модель плоскую текстуру.
По умолчанию у каждого примитива есть стандартный маппинг, его автоматически делает программа. Например, вот маппинг цилиндра.
Толстые белые линии — швы, вдоль которых нарезана модель. Без швов модель не получится аккуратно и без искажений разложить на плоскость.
В большинстве случаев стандартного маппинга достаточно, если примитив не видоизменяется. Но нашу игрушку мы собрали из разных примитивов, которые ещё и сложным образом сшивали и нарезали. Поэтому нужно создать новую развёртку для нашей модели.
UV-развёртку нужно сделать именно для лоуполи, так как красить будете её.
Для начала обнулите старый маппинг, то есть сделайте так, чтобы все полигоны были спроецированы на плоскость без дополнительных швов. Необходимые швы вы добавите сами.
Выделите все элементы лоуполи.
Мне удобнее работать с одним объектом, чем с несколькими отдельными, поэтому я их склеиваю. Рекомендую сделать тоже самое.
И выберите команду Camera-based: UV > Camera-based.
Этой командой вы спроецировали всю поверхность игрушки на плоскость камеры. Звучит сложно, но как только увидите UV, всё станет понятно.
Чтобы увидеть UV-редактор и саму развёртку, нажмите на эту кнопку.
Вот и новая UV.
Теперь нужно нарезать дополнительные швы, чтобы ровно развернуть поверхность игрушки. Чтобы отслеживать, насколько аккуратно мы делаем нашу работу, в UV-редакторе можно включить отображение специальной карты в виде шахматных квадратиков.
Включите её, нажав кнопку на скрине:
И посмотрите на модель во вьюпорте.
В идеале каждый квадратик на модели должен выглядеть как ровный квадрат. Сильные искажения означают, что и текстура будет накладываться на модель с искажениями. Это надо исправить, добавив швы.
Если у вас квадртатики отображаются слишком маленькими или слишком большими, кликните с зажатой клавишей Shift по уже знакомой кнопке.
Откроется окно, где можно настроить размер.
Теперь займёмся швами. Их нужно добавлять как можно меньше и в самых малозаметных местах. Начнём со сферы.
Логичнее всего расположить швы по бокам. С основного ракурса они будут незаметны. И не бойтесь швов — их можно сделать незаметными на будущей текстуре. Также на текстуре будет шум, который скроет все швы.
Сначала выделите во вьюпорте рёбра по кругу. Не забывайте зажимать Shift для добавления к выделению.
Чтобы по выделенным рёбрам сделать шов, в UV-редакторе выберите команду Cut: Cut/Sew > Cut.
Новые швы должны стать белыми. Они как бы разделили сферу на два отдельных UV-островка (UV-shells).
Теперь посмотрите как программа развернёт сферу с такими швами.
Выберите режим выделения UV-островков: зажмите правую кнопку на сфере и выберите пункт UV.
Далее UV Shells.
Выберите два острова сферы.
И примените команду Unfold (Развернуть): Modify > Unfold.
Вот как распрямились и раскатались половинки:
Квадраты всё ещё не идеальные, но этого для нашей модели достаточно. Главное, что нет каши как в самом начале. А на швы не обращайте внимания.
Теперь аналогичным образом добавьте швы на остальные части. У крепления добавьте швы сзади и отрежьте верхнюю часть.
А у кольца добавьте швы внутри и снизу.
Разрежьте и разверните. Должно получиться что-то вроде этого.
Перед завершением давайте ещё поработаем с развёрткой, чтобы сделать её лучше.
Например, можно выпрямить этот кривой островок, чтобы текстура легла ровнее.
Отодвиньте его в сторону для удобства при помощи инструмента Move.
Войдите в режим редактирования UV (не UV Shells, а просто UV). Зажмите правую кнопку и выберите нужный пункт.
Выделите точки с одного края.
Затем примените команду Straighten Shell: Modify > Straighten Shell.
Программа выпрямит выделенные точки и дополнительно весь островок.
Кстати, этот остров уменьшился в размере после применения команды. В результате квадратики на нем стали чуть больше, чем на остальных частях модели.
Чтобы будущая текстура равномерно ложилась на все части, лучше привести все квадраты к одному состоянию. Войдите в инструмент Scale и поменяйте размер каждого островка так, чтобы квадраты стали примерно одинаковыми.
На самой сфере размер квадратиков немного плывёт, поэтому ориентируйтесь на что-то среднее.
Теперь вам предстоит поиграть в тетрис — сложить все части развёртки в область, которая называется первым текстурным квадратом. Она очерчена более толстыми линиями и как бы олицетворяет собой будущую текстуру. Чтобы все части нашей игрушки были аккуратно покрашены, они должны в эту область влезть. Я обвел её желтой рамкой.
Этот процесс называется упаковкой. Главное правило — использовать как можно больше места, не оставлять больших пустот. Пустые непокрытые островками части — неиспользуемые пиксели будущей текстуры, которые будут просто занимать память компьютера.
Не обязательно упаковывать всё именно в квадрат — будущая текстура может быть и прямоугольной. Главное, чтобы стороны прямоугольной текстуры соотносились друг к другу как 1 к 2 в степени. То есть соотношение сторон должно быть или 2:1, или 4:1, или даже 8:1. В нашем случае лучше всего подойдет соотношение 2:1. То есть упаковывать будем в половину квадрата.
Двигая, поворачивая и масштабируя островки старайтесь максимально плотно упаковать их. Главное увеличивать и уменьшать их равномерно и не нарушать соотношение квадратиков на модели. Ставьте островки прямо — либо горизонтально, либо вертикально. И оставьте небольшой отступ от каждого островка. Этот отступ называется паддинг. Сейчас мы не будем рассматривать, для чего он нужен — это тема для отдельного урока. Поэтому просто учтите данный факт.
Вот как получилось у меня:
Я решил на этой части крепления переместить шов в бок (как у сферы) и добавить дополнительный, разрезав ее пополам, чтобы все островки компактнее влезли в половину квадрата.
На неиспользуемую половину будущей текстуры снизу внимание пока не обращайте. В конце мы к ней вернёмся.
Текстурная развёртка игрушки готова. Далее приступаем к переносу детализации с хайполи на лоуполи — бейку (bake).
Bake (запекание)
После запекания у вас останутся специальные карты со всей детализацией. Эти карты потом лягут на лоуполи и создадут впечатление, что модель хайпольная. Для бейка будем использовать программу Marmoset Toolbag. Но сначала нужно подготовить лоуполи и хайполи модели.
В первую очередь разбейте модели на группы, чтобы во время переноса детализации (запекания) лишние части не запекались в ненужные места.
Начнём с хайполи. Кстати, она и так разбита на части.
Сфера. Переименуйте её в Sphere и добавьте в конце суффикс _High, чтобы программа для запекания поняла, что это хайполи.
Крепление с флоатером. Также переименуйте их. Чтобы программа не воспринимала флоатер как отдельную группу, а отнесла его к креплению, напишите, что это флоатер после суффикса _high — чтобы основа Fastening до суффикса была одинакова у обоих частей. В итоге получится вот так:
Аналогично переименуйте кольцо.
Такую же разбивку нужно сделать для лоуполи. Выделите и разделите целую модель на части при помощи команды Separate: Mesh > Separate.
Назовите части точно так же, но вместо суффикса _High пишите _Low.
Перед экспортом в Toolbag осталось сгладить хайполи, но не через клавишу 3. Она включает предпросмотр сглаживания, а нам нужно именно сгладить модель. Для этого выделите хайполи и примените команду Smooth: Mesh > Smooth. Программа сгладит модель, добавив кучу новых полигонов.
А лоуполи перед бейком нужно триангулировать. Это нужно, чтобы в программе для бейка модель выглядела и воспринималась так же, как и в редакторе, без малейших отличий.
Теперь выделите все части моделей и экспортируйте их.
Укажите место для сохранения, переименуйте и укажите формат экспорта FBX — для наших целей он подойдет лучше всего.
Откройте Marmoset Toolbag. Я буду использовать четвёртую версию. Если у вас более ранняя версия, не переживайте, там расположение кнопок такое же. Главное не используйте версии меньше 3.00 — в них нельзя запекать.
Нажмите на кнопку с хлебом, чтобы появилась возможность запекать.
В появившихся настройках нажмите на кнопку Load, чтобы загрузить модель. И укажите путь к ней.
Если до этого все сделали правильно, программа загрузит игрушку и сразу разобьёт её на заданные вами группы.
Если заглянуть в каждую группу, можно увидеть, как суффиксы помогли программе понять, где хайполи, а где лоуполи.
Перед бейком задайте следующие настройки будущих карт и укажите путь, куда они будут сохраняться. В подробное описание настроек в данном уроке углубляться не будем — это отнимет много времени.
Снизу поставьте галочки напротив тех карт, которые будете запекать. Они отмечены на скриншоте.
Если кратко описать их предназначение, то:
- Normal — основная карта детализации
- Curvature — карта, которая цветом показывает кривизну поверхности. Светлым покрасит выступы, тёмным — впадины и ямки
- Ambient Occlusion — карта самозатенения. Формирует красивые тени на модели в труднодоступных местах
- Material ID — карта, которая цветом раскрашивает разные материалы модели. Она очень полезна при создании текстур: не придётся руками отделять один материал от другого.
Теперь осталось проверить, правильно ли программа будет запекать детализацию с хайполи на лоуполи, все ли части хайполи она заметит.
Включите отображение хайполи:
И выберите, например, группу с креплением (Fastening). Кликните по строчке Low внутри.
После клика вокруг данной части во вьюпорте формируется специальная сетка — кейдж (Cage), в рамках которой программа и ищет нужную хайполи. Если какая-то часть последней будет вылезать за кейдж, в этом месте на картах появятся артефакты. У нас хайполи выходит за кейдж. Нужно сделать кейдж чуть больше, чтобы охватить всю часть хайполи. Для этого покрутите снизу параметр Max Offset.
И так надо проверить все части.
В конце опять спрячьте хайполи и нажимаем кнопку Bake.
Чтобы увидеть результат, нажмите на кнопку P (Preview) и оцените работу: покрутите модель и проверьте наличие странных пятен (артефактов). Если они есть, то вернитесь к увеличению кейджа, а потом снова нажмите Bake.
Нажимая на кнопку P перед каждой картой, можно увидеть как она выглядит изолированно. Это позволит тщательнее проверить результат работы.
Если вы всё сделали правильно, получите вот такую игрушку.
Бейк готов, приступаем к текстурам.
Textures (текстуры)
Вернитесь в Maya, сделайте дубликат группы с LP и склейте модель в один меш: Mesh > Combine. Потом экспортируйте лоуполи в Substance Painter. Можете выбрать форматы OBJ или FBX. Обратите внимание на настройки экспорта на втором скриншоте.
Откройте Substance Painter и нажмите File > New. У меня интерфейс будет немного отличаться, но по названию окон легко сориентируетесь.
В появляющемся окне задайте следующие настройки. Разрешения текстуры в 1024 пикселя будет достаточно.
Нажмите на кнопку Select и укажите путь к экспортированной лоуполи игрушки. Потом на кнопку Add и выберите путь к запеченным картам.
Нажмите Ok — новый проект создан. Навигация аналогична программе Maya. Также попробуйте поуправлять светом: зажмите Shift и правую кнопку мышки и подвигайте мышкой в стороны.
В новой сцене нужно загрузить все карты в соответствующие слоты окна Texture Set Settings.
Карту Normal перетащите в Select normal map, Ambienr Occlusion — в Select ambient occlusion map и так далее.
Toolbag во время бейка иначе назвал карты. Вот расшифровка:
- normal — Normal Map
- ao — Ambient Occlusion
- curve — Curvature
- matid — Materila ID
Далее поверните свет или камеру, чтобы вьюпорт обновился. Если вы всё сделали правильно, игрушка примет следующий вид:
Начинаем текстурить. Начнём со сферы.
Удалите лишний слой: выделите и нажмите клавишу Delete.
Нажатием на пиктограмму папки создайте две папки. Одна будет отвечать за материал шара (Sphere), другая — за позолоченный материал (Gold). Давайте названия осмысленно. Папки — это своеобразные группы. Материал порой состоит не из одного слоя, а нескольких. Поэтому мы сразу и создали группы, чтобы объединять слои по логике.
Теперь создайте слой, нажав на пиктограмму банки с краской. И поместите его в папку Sphere. Это будет основа красного материала. Я так его и назову — Base (Основа).
Кликните на прямоугольнике под строчкой Base Color и задайте красный цвет материалу.
Параметр под строчкой Metallic увеличьте до 1, чтобы краска стала похожа на металлизированную.
А параметр Roughness (Шероховатость) опустите, чтобы шарик был более глянцевым.
Теперь добавим шум — примерно как на референсе. Сделаем это с помощью специального фильтра.
Кликните по слою правой кнопкой и выберите Add Filter.
Под слоем сразу появится строчка Filter (Empty). Кликните по ней и затем по большой кнопке Filter справа. Выберите фильтр Matfinish Powded Coated.
Этот фильтр будто рассыпает по поверхности маленькие разнонаправленные кусочки, запечённые в карту нормалей. Можете немного поиграться с их размером, покрутив параметр Scale.
Приступаем к позолоченному материалу. Создайте залитый слой и перетащите его в папку Gold.
Так как этот слой находится выше, он перекрывает нижний материал, окрашивая всё в серый цвет. Но можете заметить, что перекрывается не вся информация. Этот шум, что мы добавили, как бы пробивается сквозь серый слой. Для исправления выберите в верхнем списке вариант Normal, чтобы увидеть настройки смешивания канала карт нормалей.
И справа от пиктограммы всей папки кликните по строчке NMdt. Из выпадающего списка выберите режим Normal.
Режим, стоящий по умолчанию, как бы смешивал между собой карты нормалей двух слоев. А в режиме Normal происходит полное перекрытие нижнего слоя верхним. Теперь все должно вылечиться.
Но! Нам же нужно сделать так, чтобы верхний материал лежал только на креплении и кольце. Для этого нужно замаскировать папку верхнего материала и оставить его видимым только в нужном месте.
Кликните по папке правой кнопкой и выберите вариант Add mask with color selection чтобы создать маску по запечённой ранее карте Material ID.
Выберете появившуюся под папкой строчку Color Selection, нажмите на Pick Color и укажите пипеткой на цвет нашего крепления.
Вот и все.
Осталось немного настроить материал. Выберете цвет, шероховатость и металличность.
Остались финальные штрихи. Сверху осталось непокрашенное отверстие. Нужно покрасить его в чёрный цвет.
Создайте чёрный матовый (высокий Roughness) слой и замаскируйте его по Material ID, как делали это ранее. Но маску примените на слой, а не на папку. Сам слой поставьте выше всех папок.
Если после этого вокруг отверстия начнут просматриваться нижние пиксели, увеличьте параметр Tolerance.
Почти все.
Я бы еще добавил немного пыли, грязи в углубления, чтобы разнообразить текстуру и подчеркнуть форму.
Создайте тёмный, матовый слой сверху. Не забывайте давать осмысленные имена слоям.
Чтобы добавить грязь только в труднодоступные места, можно применить к слою маску со специальным генератором.
Кликните по слою правой кнопкой и выберите вариант Add mask чтобы добавить маску.
Затем кликните правой кнопкой по значку чёрной маски и добавьте генератор Add generator.
В качестве генератора выберите грязь — Dirt.
Программа забила игрушку пылью, но очень сильно.
Плюс пыль будто приглушила металлический блеск игрушки. Чтобы это исправить, отключите влияние слоя с пылью на металличность (Metallic). Кликните по значку слоя, чтобы увидеть настройки слоя, а не генератора, и по кнопке Metal чуть ниже.
Теперь можно просто поиграться с настройками генератора. Вернитесь обратно и кликните по значку маски, чтобы увидеть генератор.
И меняйте настройки. Например, так делаем слабее.
В конце можно немного уменьшить прозрачность генератора. Например со 100 до 85, чтобы пыль не была такой тёмной.
Текстуры готовы. Конечно, дорабатывать и улучшать их можно ещё долго. Но для первого опыта хватит. Хотя я настоятельно рекомендую ради эксперимента и развития добавить в папки свои слои с разными цветами и текстурами. Уверен, получится даже лучше.
Ещё можно проверить, как игрушка смотрится в разных вариантах освещения. Кликните справа на пиктограмму монитора с шестерёнкой и выберите карту освещения в слоте Environment Map. Возможно, что-то захочется подкрутить.
Осталось выгрузить готовые текстуры. Нажмите File > Export Textures.
Укажите путь и нажмите Export.
Со стандартными настройками экспорта программа выгрузит пять текстур.
Текстура Height чаще всего не требуется, её можно удалить. А остальные желательно назвать лаконичнее. Например, так:
Вот и всё. По сути модель (OBJ-файл, что мы выгрузили ранее) и текстуры к ней готовы. Их уже можно загружать в игру (точнее игровой движок) или любую другую программу.
Но! Если у вас ещё есть силы, давайте подрежем лишнюю половину снизу у текстур.
Откройте Photoshop и загрузите в него все карты. Далее делайте один порядок действий для каждой. Нажмите Image > Canvas Size.
Уменьшите размер текстуры в два раза, то есть вместо 1024 напишите 512. И чтобы изображение подрезалось снизу, кликните по центральному верхнему квадрату. Нажмите Ok.
И сохраните результат. File > Save.
Проделываем это для каждой из четырёх текстур.
Это ещё не всё. Вы подрезали текстуры — удалили лишнюю информацию снизу. Но чтобы новые текстуры хорошо легли на модель, нужно поправить её UV-развёртку.
Текстура, независимо от своей формы, растягивается на весь текстурный квадрат в 3D-редакторе, прямоугольная тоже. Так как UV-маппинг игрушки находится только на верхней половине квадрата, он захватит только половину от новой прямоугольной текстуры.
Выход из ситуации простой — растянуть UV-координаты модели на весь текстурный квадрат.
Вернитесь в Maya, выделите финальную модель и включите UV-редактор.
Войдите в режим редактирования UV (ПКМ).
Выделите все UV-точки. Растяните островки в 2 раза по вертикали, нажав на правой панели на кнопку Scale со следующими настройками. Ось U (горизонтальная) отключаем.
Осталось опустить координаты в центр текстурного квадрата — сместить ровно на 0.25 единиц вниз. Сделайте это через команду Move. Введите цифру смещения 0.25 и нажмите на стрелочку вниз.
Проверьте, всё ли правильно вы сделали. Для этого повесьте на модель любую созданную ранее текстуру, применив к модели новый материал (ПКМ).
Чтобы применить текстуру, в настройках материала нажмите на «шахматы» напротив параметра Color.
В появившемся окне выберите File.
И укажите путь к текстуре, отвечающей за цвет (BaseColor).
Если текстура не отображается, нажмите на клетчатый шар сверху вьюпорта.
Всё легло как надо. Вы всё сделали правильно.
Материал подготовлен командой XYZ Media.