Making Of "FV-214 Conqueror game-ready model"
I. Знакомство
Привет! Меня зовут Максим Соколов, мне 18 лет, мой Artstation. Я учусь в университете на специальности «Прикладная математика и информатика». В 3д относительно недавно, в феврале 2022г будет год, как я закончил базовый курс «Blender 2.0» от университета «Кайно», именно этот момент является началом моего пути в 3д. У меня всегда были сложности в художественной деятельности, но мне хотелось что-нибудь создавать. 3д – это смесь из творческого и технического контента, именно поэтому я выбрал его.
О проекте
Меня всегда привлекала техника, в частности танки. Изначально мой выбор пал на французский квадратный танк с неинтересной геометрией. Благо меня быстро отговорили от него, тогда среди военной техники я стал искать что-то монструозное и мощное, чтобы при одном только взгляде приходило осознание величия этого творения. Мне сразу вспомнились танки Великобритании, за счет их интересных форм и размеров.
Выбор стоял между тяжелым танком Conqueror и средним centurion. Выбрал я, конечно же, Conqueror, так как он больше подходил под моё описание и был сложнее в геометрии. Дальше я стал готовиться к созданию модели: собрал рефы, их было немного, так как танков было произведено всего 100-200 штук и рефы повторяли друг друга.
Вариант, который изначально планировал создавать Сен-Шамон.
Доска с собранными рефами перед началом работы. Вдохновлялся работами художника Денис Лаханов.
II. Making of
Во время работы с моделью я использовал различные подходы, какие-то были удачными, какие-то вовсе не стоили потраченного времени, зато какой опыт приобрел.
В этой статье я опишу сложные, на мой взгляд, моменты, с которыми я столкнулся при работе над этим проектом. Я не буду расписывать по клику каждый шаг, т.к. это займет очень много времени и раздует статью. Но постараюсь максимально подробно описать принципы работы в некоторых этапах.
Перед каждым этапом, я опишу сначала свой первоначальный вариант создания чего-либо, а потом правильный/более удачный, чтобы вы-читатели не совершали моих ошибок и не тратили время в пустую.
На полное завершение проекта у меня ушло почти 4 месяца.
Game-ready пайплайн, 62728 треугольников, моделирование и рендеринг в Blender, текстурирование в Substance 3D Painter(SP), запекание в Marmoset/SP
Моделирование
Моделирование корпуса, бортов и кормы проходило стандартно, всё как и везде, ничего интересного в них нету.
Моделирование башни началось с анализа референсов: она имеет довольно плавную и не самую простую форму, к тому же она литая.
Сначала я попробовал сделать ее стандартным путем: создать 3-4 объекта, “сбулить” (использовав Модификатор Boolean) их вместе, а потом отредактировать сетку, но этот вариант не подошел, так как не получалось создать форму, повторявшую оригинал.
Преподаватель курса — Павел Голубев подсказал, что нужно создавать башню под “Subdiv” (Модификатор Subdivision Surface), а затем сделать ее ретопологию. Так я и поступил.
Я не стал создавать все заново, а просто, накинув модификатор, исправил сетку и подравнял форму. В процессе работы я также корректировал ее.
Когда базовый меш был готов, пришло время ретопологии. Я не пользовался никакими аддонами или сторонними программами, использовал стандартные инструменты Blender. С помощью этих инструментов нужно создать новый меш, с упрощенной геометрией, который повторяет все формы и пропорции базового:
1) Добавляем в сцену плоскость, скейлим и располагаем близко к поверхности базового меша.
2) В режиме редактирования включаем инструмент «магнит» выбираем привязать к Грани(«Faсe») и настраиваем его, ставим галочку - Project Individual Elements- проецировать отдельные элементы на поверхности других объектов.
3) Далее добавляем модификатор Displace и регулируем его. Этот модификатор оставляет между базовым мешем и плоскостью небольшое расстояние, чтобы было удобнее создавать ретопологию. С ним легче работать, нужно настраивать только силу, она поднимает/опускает плоскость над основной геометрией.
4) После начинаем экструдировать ребра, вершины и создаем нужную нам полигональную сетку. Для упрощения работы с сеткой я пользовался аддоном LoopTools. Например, если нужно было равномерно распределить вершины.
Так выглядит полигональная сетка после ретопологии(далее я ее также редактировал).
Вторым интересным и сложным моментом могу выделить создание чехла маски орудия. Можно было и без этого элемента, но я выбрал более сложный и интересный вариант.
Сначала я попробовал создавать чехол используя скульптинг, но этот вариант оказался непосильным и трудоёмким для меня. Пробовал несколько раз, но так и не получилось создать нужную форму.
Посоветовавшись с куратором курса Анатолием, решил попробовать симуляцию ткани, почему-то тогда я боялся её использовать.
И свершилось чудо. Около 20-30 минут мне потребовалось на настройку симуляции, чтобы получить необходимую форму. После сделал ретопологию, по тому же принципу, как и с башней.
Коротко опишу процесс симуляции:
(*)
Создаем плейн, располагаем над объектами, которые она должна покрыть → настройки симуляции → настраиваем физику, «бросаем» на наши объекты с коллизией, снова делаем ретопологию → ретопология → Также я использовал 1 ограничитель по масштабу, где указал ребро(чехол является родителем для этого ребра), которое надо сжимать или сужать, пока идет анимация, чтобы наш чехол принимал скейл ребра и сжимался/растягивался в зависимости от наших действий.
Гусеницы создавались по статье на странице Павла
Из особенностей могу выделить только то, что каждый сегмент гусениц оверлапнут, то есть моделировал я один сегмент, а затем размножил его модификаторами.
Больше внимая хочется уделить созданию нареза, так как во время моей работы я столкнулся со сложностями.
Я сделал High-Poly (HP) нарез , чтобы потом запечь его на Low-Poly (LP), но после запекания результат был не удовлетворительным.
После неудачной попытки, я обратился к Павлу за помощью. Он посоветовал метод, которым я хочу поделиться с вами:
*Для наглядности LP залита красным материалом, HP немного смещена.
Суть заключается в том, чтобы нарез был не на внутренней геометрии, а внутри этой геометрии.
Для лучшего эффекта убираем шов (Seam) и шарп (Sharp) c этого места, чтобы была одна группа сглаживания
Запекаем текстурные карты в удобном вам софте, и после всех манипуляций получаем практически идеальный нарез.
Оптимизируем Low-Poly модель: полигоны, которых не видно удаляем, чтобы сэкономить место на UV и можем переходить к самому интересному этапу — текстурированию.
(*)
В конце статьи расскажу как можно сэкономить почти 400 треугольников (в данном случае) и не потерять в Texel Density
Текстурирование
В текстурировании я опирался на работы из игры World of Tanks, поэтому почти не собирал референсы для текстур, но я также использовал различные рефы для материалов не относящихся к краске и основному металлу танка.
Создание текстур было самым сложным этапом моего проекта с точки зрения морали. Так как рисовать я не умею, приходилось выкручиваться и переделывать всё по нескольку раз. К слову использовал я стандартные кисти и инструменты SP, в основном были кисти для грязи, а также Dots для создания высот.
Сначала я создал основной, стандартный материал для металла, без использования высоты и нормалей. Дальше использовал текстуру шероховатости (Roughness) на металле, чтобы придать ему фактуры.
За это отвечают 2 слоя: Bump и Height(стоит выше, так как добавил его уже позже, когда показалось, что не хватает жесткости для металла).
Слой Bump используется как основной для самых крупных повреждений. В его основе лежит не самый мелкий шум, который распределяется гранжем в маленьком процентном соотношении. Подслой «Clear» служит для сглаживания слишком выпирающих мест и рисования особо глубоких повреждений, подслой «Paint» является главным рисующем в этой сборке. Также добавил якорную точку, чтобы потом использовать информацию о высоте для генераторов.
Якорные точки — это как бы ссылка на информацию со слоя с этим якорем. Она копирует материал с исходника, и с помощью нее легче создавать различные материалы.
Слой Height работает по тому же принципу, в его основе лежит мелкий шум, который распределяется по гранжу и другому шуму в режиме multiply (можно также использовать Color Burn, он будет чуть более контрастным), подслой paint служит для того, чтобы закрашивать/рисовать ненужные/нужные нам участки.
Дальше я добавил вариативности слою Roughness, чтобы в углублениях металл был матовым, а в наивысшей точке, он наоборот блестел.
В генераторе AO используем информацию о высоте (слой Bump), гранжем разбавляем, чтобы выглядело интересно (режим наложения multiply, чтобы накладывался только на маску нашего генератора)
_
Когда закончили с нижними слоями, можно приступать к верхним. Я хотел создать многослойный материал, который будет меняться в RealTime. Поэтому создал основу под эти слои и назвал ее Damage, так как с помощью него буду рисовать все повреждения на краске.
Добавляем стандартный Fill (можно ничего не менять, так как от него нам нужна лишь маска и якорь) на него кидаем белую маску и в эту маску якорь. Важно, чтобы этот слой был самым нижнем в нашей иерархии.
Теперь разберемся с основной краской. Я придал ей немного высоты, поигрался с шероховатостью и цветом.
Далее нужно создавать повреждения на самой краске:
Первым делом в маску добавляем слой Fill, в него подслой с якорной точкой со слоя Bump. Дальше добавляем вариативности генераторами, подслоями Paint и гранжевыми текстурами.
Включен только слой с якорем →
Подключен генератор Metall Edge Wear с якорем от слоя Bump и гранж в режиме наложения Subdivide (для добавления мелкой фактуры) →
Рисующими подслоями убираем лишнее и добавляем нужное.
Слой с ржавчиной имеет точно такие же подслои в маске, но инвертирован в генераторе, чтобы ржавчина виднелась из под краски.
Подслоем Level регулируем кол-во и насыщенность ржавчины (должен стоят выше подслоя Fill, но ниже основных генераторов и других подслоев)
С основными слоями закончили, теперь надо заняться добавлением разнообразия: создать выцветшую краску, грязь и т.д.
Для удобства я перешел в канал Mask, где видно как отрабатывает черно-белая текстура.
Слой White Paint является менее насыщенной краской и должен лежать около царапин и выпуклостей, для этого используем фильтр Highpass, который будет придвигать нашу краску к выпуклостям и повреждениям →
С помощью фильтра Warp добавим немного хаотичности и отрегулируем положение подслоем Levels →
Подслоем Paint и Fill с гранжем добавим вариативности →
Для разнообразия материала я добавил еще один слой краски, грязно-зеленоватый — это краска, которая забивается в углублениях и служит как дополнительный слой с грязью. По структуре — это та же белая краска, но с добавлением нескольких слоев гранжей и другими настройками генератора.
После работы над основным материалом, я доработал мелкие детали: грязь, надписи и болты, сделал простые материалы для окон.
Для деталей, которые не имеют ярко выраженной фактуры добавил те же материалы, но с уменьшенным слоем Bump ( убавил высоту, а где-то и вовсе убрал)
Далее копируем наши материалы, очищаем все маски и применяем их к другим текстурным сетам. Остается только проявить художественные способности и нарисовать все нужные нам повреждения.
Все текстуры в разрешении 2K
_
Для текстурирования маскировочной сетки я руководствовался статьей Татьяны Турукиной, где описывается работа с каналом Opacity. Поэтому подробности ее создания можете прочитать в ее статье на стене группы.
Making of Drifter-bike (байк бродяги). Процесс создания сетки с рваными краями. (vk.com)
Создание сцены и студийных рендеров
Изначально хотел создать сцену в разрушенном городе, но в поисках референсов для презентации, вдохновился несколькими чужими работами. Выделил из них основные моменты, которые я бы хотел увидеть в своем проекте и приступил к созданию окружения.
1) Первое, что я сделал — это выставил камеру с помощью дополнения Fspy для калибровки камеры, после я уже вручную доработал ее положение и фокусное расстояние.
2) Проанализировав референсы постарался повторить ландшафт почвы на переднем плане. Моделировал все вручную: создал плоскость, подразделил ее и скорректировал нужную форму, воспользовавшись пропорциональным редактированием, далее правил полигоны как считал нужным.
Область, которая не попадает в объектив камеры нужно удалить, чтобы не грузила систему. Затем, этим же способом создаем еще несколько ландшафтов почвы для среднего/дальнего плана.
Для полноценности композиции я решил добавить в сцену второй танк на средний план и деревья.
Второй танк можно объединить в один меш для оптимизации
Теперь, когда мы видим всю картину, можно поработать с передним/средним/дальним планом, добавляя мелкие детали и истории в кадр.
Начнем с переднего: добавил камни, ветки и гильзу. Мелкие камни раскидал с помощью геометрических нодов, а средние и крупные я расставил в ручную
Мелкие камни →
добавил крупных камней →
мелкие камни + крупные камни + ветки
Использовал геометрические ноды, так как система частиц не подошла в данном случае.
Теперь можно добавить камушки под гусеницы. Создал 3 айкосферы (Ico Sphere) и немного поменял им форму. Чтобы разбросать камни использовал самую стандартную настройку симуляции для Emitter и добавил все Ico Sphere в коллекцию Particle.
Настройки для системы частиц →
Чтобы придать форму потока камней, летящих из под гусениц и обтекающие их, я использовал силовые поля, а именно ветер и турбулентность. Для каждого поля менял всего 2 параметра: Strenght/Flow
Теперь расставляем наши Emitter'ы под гусеницы для обоих танков, каждый эмиттер я немного изменял, чтобы была разнообразность.
Перейдем к добавлению атмосферы в сцену
Чтобы добавить атмосферу я использовал обыкновенный куб с настройкой нод Principled Volume и градиентной текстурой.
Расставляем кубы в сцене, а для того чтобы создать эффект отдаленности предметов, можно скопировать и уменьшить этот же куб, оставив его внутри геометрии.
Главное помнить, что нам нужно отделить вольюметрикой средний фон от ближнего и дальний от среднего, а также скрыть переход от неба к земле.
Теперь разберем вопрос, который как мне кажется волновал многих — как же я сделал пыль для танка не используя сторонний софт?
Для создания ± похожей формы я смешал большое кол-во шумов и несколько цветов. Также не маловажным оказалось создать и геометрически похожую форму — помните об этом, когда будете применять это в своих работах.
Это был основной материал для всей пыли в сцене:
Общий вид и дерево нодов →
настройки для первого шума →
настройки для второго шума, в качестве текстур использовался мелкий шум →
настройки для цвета.
Для пыли по бортам я использовал чуть более усовершенствованный материал, но логика его работы та же.
Осталось правильно все расставить. Я использовал несколько дополнительных кубов, чтобы добавить дымку в воздух. Для них назначил материал с очень низким значением Density.
Примерно так выглядит вся сцена:
Рендер и постобработка
Для создания киноэффекта с имитацией виньетирования, я использовал постобработку в Blender.
Покажу ноды в композиторе, вы можете воссоздать их в своем проекте, если вам нужен такой-же эффект. Коротко объясню основной принцип работы ноды «Ellipse Mask»: она необходима для создания круглой маски, которая будет немного высветлять участок кадра. А также, только в ней будет работать нода Glare — используется для добавления бликов объектива, тумана, свечения вокруг открытых частей изображения и многого другого. По умолчанию в Glare стоит Streaks — режим, в котором свет тянется от источника полосами. Переключаемся на Fog Glow и получаем более-менее правдоподобное свечение. Края размываем блюром.
А теперь обещанная экономия полигонов. Для экономии UV пространства, мы удаляли полигоны, которых не видно. Теперь, когда мы сделали текстуры, можем немного схитрить. Заполняем пустое пространство через «F» и растворяем ребра окружности. После этого обязательно триангулировать поверхность в ручную. Ищем такие места по всей модели и экономим полигоны.
Следим за кол-во треугольников: 726 tris
730 tris
710 tris
III. Заключение