Приветствую! Меня зовут Федор Семенов. Мне 26 лет, я учусь в аспирантуре на специальности автомобилестроения, параллельно работаю на предприятии инженером-конструктором.
Занимаюсь 3D – моделированием около года, начинал с самых азов: изучал разные методы моделирования, разные пайплайны и методы текстурирования, постепенно подходя к разработке игровых моделей. И, на основе приобретенного опыта, решил создать свою модель для портфеля.
В данной статье я хочу рассказать о создании моего первого самостоятельного проекта APC «Bison-2025».
О том, что это за машина, какие были цели ее создания, сколько и как я над ней работал, я рассказывал ранее в посте.
Глава 1: Референсы
Первым этапом разработки было изучение объекта моделирования и сбор референсов. Этот этап помогает изучить конструктивные и технические особенности объекта, а также построить примерный план создания будущей сцены и определиться с материалами для модели.
Собранные материалы были оформлены в программе PureRef. Очень удобная программа для сбора референсов - если вы вдруг не знаете куда «складывать» свои изображения, то она точно решит этот вопрос.
Хочу сразу сказать, что к сбору материала необходимо подходить очень тщательно, чтобы не упустить важные детали объекта и сцены. В последующем именно референсы будут помогать вам работать, потому что именно на них в процессе создания модели сможете опираться.
Глава 2: Блокинг
После сбора всей необходимой информации начался процесс блокинга.
В основе блокинга лежит создание силуэта модели, делая ее читаемой, и моделирование основных форм, отвечающих габаритным и основным техническим требованиям создаваемого объекта. Простыми словами - на этом этапе нужно передать габариты и расположение деталей, не загружая модель лишней детализацией.
В начале моделирования у меня были только основные габаритные размеры бронемашины, поэтому я создал минимальную геометрию, чтобы попасть в размеры (уже в процессе я нашел чертежи и размеры для многих деталей).
Этап блокинга не занял много времени, и, через небольшой промежуток времени, был создан первоначальный объект, который стал «габаритной» опорой.
Глава 3: Базовый меш
Далее, после создания основных габаритных блоков и получения необходимых геометрических параметров для модели, я приступил к моделированию базового меша.
На данном этапе важно обозначить, что будет создаваться геометрией, что запечется на карту нормалей с помощью high poly и плавающей геометрией или будет создано с помощью текстур в Substance Painter (об этом будет рассказано дальше в статье) .
Это необходимо для экономии времени и оптимизации модели - чтобы не создавать детали, которые почти не будут видны.
Второй момент, который необходимо учитывать – расстояние, с которого будут смотреть на модель. Это нужно для того, чтобы увидеть визуальную составляющую модели.
Для этого, расставив камеры и определив расстояние и визуальную составляющую, было решено, что в модели можно упростить, чтобы она не была загружена лишней геометрией.
Необходимо уделить максимум внимания геометрии, которая играет важную роль в создании образа. А ту геометрию, которая не играет важной роли - незначительна из-за размера или расположения на модели, можно смело упрощать. Не стоит тратить время и поликаунт на кропотливое создание того, что никто никогда не увидит (или на то, что совсем не будет влиять на восприятие модели). Поэтому также важно удалять полигоны на стыке геометрии - это позволит не только избавиться от лишней геометрии, но и освободить место для будущих текстур на UV-развертке.
Такой подход позволяет:
- Уменьшить общий поликаунт модели;
- Облегчить создания high poly модели;
- Уменьшить общее время моделирования.
Более подробно также хочу остановиться на создании цилиндрических поверхностей, в том числе на вопросе: «сколько сегментов задавать?». Этот момент особенно часто упускают начинающие 3d-моделлеры.
Нужно понимать: чем больше цилиндр, тем большее количество сегментов необходимо задавать. Также важно не забывать, что лучше всего, чтобы значение сегментов были кратны 4.
Использование нечетных значений сегментов цилиндра я стараться избегать.
Как показано на рисунке выше:
- в цилиндрах с четной сегментацией сегменты расположены напротив друг друга;
- в цилиндрах с нечетной сегментацией - расположены не пропорционально, что может повести за собой создание неравномерной геометрии.
Создание базового меша не потребовало много времени, но часто приходилось поправлять размеры деталей, подгоняя их под реальные, руководствуясь референсами. В итоге была создана вся запланированная геометрия.
При создании базового меша я использовал только стандартные аддоны Blender.
Самым сложным в базовом меше было создание подвески - именно для нее референсов было не так много, да и не все детали можно было разглядеть - часть из них пришлось брать из бронемашин с похожей подвеской, где она была видна лучше.
Изначально я вообще не планировал создавать подвеску. Но в итоге решил ее добавить - хочу в последующем поработать над моделью в игровом движке, в том числе и с подвеской.
Далее следовал этап расстановки шарпов (Sharp edges). По таким ребрам на этапе развертки нужно будет в будущем задать разрезы. По этим же ребрам также пройдут бевелы (Bevel weight), использующиеся для создания высокополигональной модели.
После создания базового меша я приступил к созданию Low и High poly модели.
Глава 4: Создание Low и High poly модели
В основе создания Low poly модели лежит упрощение геометрии, но так, чтобы не терялась читаемость модели и базовая форма деталей.
Оптимизировать модель довольно медитативная работа, но важная: чем меньше в модели будет треугольников, тем лучше для игрового движка, хоть жестких рамок по поликаунту у меня и не стояло.
После оптимизации сетки Low poly модели, применив сглаживание auto smooth с вариацией градусов в зависимости от геометрии деталей, получился low poly броневик, который в последствии будет использован как основная модель для текстурирования и экспорта в игровой движок.
Делать высокополигональную модель было, наверное, интереснее всего, так как результат этого этапа очень классный - ты видишь высокодетализованную модель.
Для создания высокополигональной модели использовались модификаторы Bevel и Subdivision surface. С помощью модификатора Bevel создавались фаски, в этом помогли также ранее проставленные sharp edges. Модификатор Subdivision surface сглаживает модель.
Создание фасок - очень важный момент на этапе high poly. По своему размеру они сильно больше, чем в реальности - это делается для того, чтобы при отдалении камеры от модели, фаски оставались мягкими и от них давал блики свет в игре. Такой вид фасок будет более опционален, чем реалистичные фаски.
Изначально я хотел создать сварочные швы также на high poly модели, но, немного поразмыслив, пришел к выводу, что буду их делать в Substance Painter, так как это займет меньше времени, и освободит от возможных проблем с запеканием.
На последнем этапе создания high poly модели я добавил плавающую геометрию в некоторых местах, как и говорилось ранее в статье. Теперь расскажу подробнее о создании этой самой плавающей геометрии (флоатеров).
Глава 5: Запекание - теория
Первично важно понять, для чего нужно это самое запекание, о котором говорилось выше в статье.
При помощи технологии запекания текстурных карт мы переносим информацию с high poly модели на low poly модель. Таким образом, оптимизированная модель, которая пойдёт в игровой движок, будет иметь все детали, которые имелись на high poly.
На low poly добавляют запеченные карты нормалей и карту затенений.
Это карты, которые обманывают поведение игрового света.
Свет падает под определенным углом на модель и создает блик. В итоге нам кажется, что в модели много фасок, деталей и вырезов.
Нормали — это векторы, которые определяют, как свет отражается от поверхности. Их изменение как раз и влияет на поведение света. Но такие векторы отражения нельзя поставить на случайное место, они находятся у точки.
Технология запекания позволяет перенести информацию с детальной модели на легкую low poly и сохранить ее в Normal Map.
Технология запекания позволяет перенести вертекс нормали с детальной модели на легкую low poly и сохранить их в Normal Map.
Карта затенения – это карта Ambient occlusion (AO). Она показывает тени в объекте — в основном в углублениях и на пересечениях.
Данную карту используют в игровых движках для создания корректного освещения и в текстурировании. Например, без АО почти нереально сделать грязь. Но с картой АО мы легко сгенерируем маску углублений, чтобы забить их грязью.
Теперь расскажу о создании плавающей геометрии.
Глава 6: Создание плавающей геометрии | Флоатеры
Флоатеры — это детали, выполненные отдельно. Можно даже сказать, что они находятся в воздухе, над поверхностью модели. Они запекаются на low poly модель.
Такой метод помогает избежать сложностей в создании High poly модели, тем самым экономя время на моделировании.
Поэтапно распишу, как создать плавающую геометрию:
1) Создаем необходимую нам геометрию, которая будет запекаться на низкополигональную модель (рассмотрим на примере канистры и ее выштамповки в виде креста, для придания жесткости конструкции, предотвращающей раздутие стенок при заполнении, а также, чтобы канистра не схлопывалась при опорожнении).
При создании геометрии следует учитывать, что деталь, созданная под углом в 90 градусов, вряд ли запечется на карты нормали, поэтому следует создавать скосы, фаски.
2) Полученную геометрию необходимо близко расположить к high poly модели, но без пересечения. При этом нельзя забывать, что эта геометрия не должна слишком далеко располагаться от high poly детали, так как для этого в дальнейшем придется увеличивать клетку в программе, в которой будет производиться запекание, что в данном случае может негативно отразиться на запекании всей остальной детали.
Обязательно нужно проверить, не вывернуты ли нормали после того, как создали геометрию. Это важно, потому что если они вывернуты, то созданная геометрия попросту не запечется.
3) После того, как геометрия создана и все проверено, нужно созданную геометрию объединить с той, к которой мы хотим ее добавить. При этом в качестве активной должна быть геометрия, к которой мы присоединяем, чтобы имена и расположение детали не изменилось.
Глава 7: Развертка низкополигональной модели
Теперь необходимо произвести развертку низкополигональной модели. Для начала в модели необходимо расставить швы (seems) и развернуть детали.
На следующем этапе делим нашу модель на количество необходимых текстурных сетов. В модели я использовал много оверлапов. Оверлап - это накладывание одинаковых UV-шеллов на UV-развертке друг на друга с целью экономии текстурного пространства. Подробно на них останавливаться не стану.
После произвел упаковку: я использовал аддоны для более качественной и быстрой упаковки.
Всего у меня получилось 6 текстурных сетов с разрешением 4к.
Глава 8: Запекание
Для запекания я использовал программу Marmoset Toolbag 4. Очень удобная программа, позволяющая тонко настраивать свойство запекания, очень удобно работать с клетками при помощи параметров Paint skew и Paint offset. Программа дает возможность вносить правки в процессе работы, быстро просчитывает карты с хорошим результатом.
Походу запекания вносил правки с помощью все того же paint skew при запекании карт нормалей, все остальные карты можно запекать после того, как не осталось больше следов от артефактов или каких-то «несостыковок».
При запекании карты Ambient Occlusion необходимо учитывать тот факт, что некоторые части объекта могут быть подвижными и просто так запечь AO тогда нельзя. Иначе будет темный участок от деталей, которого быть не должно, и он станет неуместен, после того, как деталь начнет двигаться. В данном случае, чтобы этого избежать, я просто развел друг от друга детали броневика.
Также можно заменить подвижную геометрию на, так называемую, условную совпадающую по объему, и тогда будет возможность получить не такую явную деталировку АО.
Далее, после запекания карт, экспортировал модель в Substance Painter для текстурирования.
Глава 9: Текстурирование
До того, как я приступил к этапу тектурирования, я создал собственные кисти альф и нормалей, а также нашел необходимые текстуры для наклеек.
Примеры кистей и нормалей показаны ниже:
Текстурирование, наверное, самый творческий процесс на всех этапах создания модели.
Материалы в Substance Painter создаются слоями. К примеру, для получения материала кузова броневика, я сначала сделал материал металла, после - ржавчины, далее грунтовку и краску, а уже в самом конце нанес загрязнения: по типу масла, грязи и пыли.
Результат текстурирования в программе Substance Painter.
После создания текстур, я экспортировал текстурные карты непосредственно в Blender и приступил к подготовке сцены окружения.
Глава 10: Окружение
По сложности для меня это был самый непростой этап во всем пайплане созданий модели.
Для начала я определился, что буду брать за основу для окружения, что будет в этой сцене и какой свет выставлять.
Я знал, что хочу поместить свою бронемашину в пустынный район, поэтому, выбрав за основу несколько референсов, принялся за дело.
1) Первым делом я выставил камеру и откалибровал ее для понимания общих габаритов сцены.
2) Выбрав за основу референсы, которые мне понравились, я принялся за создание переднего плана и постарался воссоздать более красивый вид для него. С помощью аддона A.N.T.Landscape воссоздал почву – основу для переднего плана. При создании сцены необходимо помнить, что главный вид – это вид из камеры, а то, что выходит за ее пределы, необходимо удалять, чтобы система разгружалась и могла быстрее работать.
3) Далее я создал средний и задний план сцены, добавил горы, камни и растительность. Горы создавал также при помощи A.N.T.Landscape, придавая детализации итерациями subdiv.
4) Следующим этапом было создание текстур для гор и песка. Я смешивал различные текстуры, чтобы получить необходимый для меня эффект. Расскажу на примере создания текстуры песка и следов шин на ней:
В данном случае я смешивал 4 текстуры: текстуру песка, текстуры следов от ног, следы от шин и вариация материала песка.
Далее эти текстуры смешивались друг с другом с помощью Mix RGB для Displacement и Mix Shader для остальных текстурных карт.
Карта Displacement – это черно-белая карта, которая распределяет высоту каждой точки на поверхности объекта.
Данная карта дает возможность усложнять и варьировать геометрию на этапе рендеринга, но при этом не увеличивать количество полигонов модели при моделировании.
После того, как создал вариации того, что буду смешивать, нужно было определить, как будет наноситься это распределение. Для этого использовал распределение по Vertex color. Для этого:
- создаем новый Vertex color;
- переходим в режим редактирования Vertex color;
- наносим необходимую форму рисунка на поверхность;
- повторяем для всех нужных нам вариаций текстур.
При необходимости пользуемся кистью Blur, чтобы сгладить переходы между текстурами.
Такую же методику смешивания применял для тестурирования гор.
5) Дальше добавил в сцену деревья и остальную растительность, а также некоторые детали, дополняющие целостность картины.
После этого настроил свет, следуя выбранным референсам, настроил рендер и получил конечную сцену.
Глава 11: Итоговый результат
Остальные рендеры сделал на студийном фоне.
Глава 12: Заключение
В большей степени я доволен своей первой работой. Конечно, в определенные моменты я сталкиваося со сложностями, но эти сложности дали мне новый опыт и знания. Я смог вынести много полезного для себя, создавая этот проект, а также поставил себе новые цели и задачи, с которыми уже не терпится начать разбираться.
Хотелось бы отметить: не спешите в создании проекта. Очень важен тщательный подход к каждому этапу создания модели, ибо если хоть один из процессов проработан недостаточно хорошо, то есть риск, что это скажется на общем впечатлении от финальной сцены и ухудшит проект в целом.
Самое главное - старайтесь и не ленитесь доводить проект до конца, тогда все будет получаться. Всем удачи в создании своих работ.
Автор: Федор Семенов