Making Of "T 2 5 Character - Real Time"
Всем привет! Меня зовут Андрей Иванов, и я 3D-художник по персонажам.
Идея данного проекта: мне захотелось показать свой текущий уровень владения 3D-инструментами и проверить себя. Я ставил цель достичь максимального качества в этой работе. Также хотелось обновить портфолио.
Референс для проекта был найден практически сразу. Это работа художника Zet под названием T25. Мне понравился образ героини и то, что персонаж выглядит сложным благодаря большому количеству элементов. Здесь есть и hard-surface элементы, и ткань. Мне хотелось, чтобы в этой работе был вызов, чтобы для меня это было немного сложнее, чем обычно.
Я разбил работу на этапы и начал двигаться по намеченному плану. Шаги выглядели следующим образом:
• Сбор референсов
• Скульптинг головы и тела
• Моделирование базовых мешей, hard-surface элементов
• Симуляция тканей
• Финальный скульптинг
• Ретопология, UV, бейк
• Текстурирование
• Волосы
• Поза
• Презентация и рендер
Первым делом в любой работе я всегда начинаю собирать референсы и уделяю этому достаточное количество времени. Мое правило — собрать как можно больше референсов. Среди них у меня были примеры качества подобных проектов, референсы головы/тела/анатомические референсы, референсы элементов одежды, оружия и т.д.
Когда я ищу референсы, то стараюсь найти либо оригинал, либо изображения, максимально похожие на то, что использовал концепт-художник. Если я моделирую какие-то предметы, у которых есть физические размеры, то ищу их характеристики на сайте производителя.
Реф-борд в программе Pureref.
Далее я приступил к работе, придерживаясь плана, и начал с головы. В качестве основы я взял скан 3DScanStore (HD Female 3D Head Model 49), который модифицировал на низком уровне сабдивижна. Я часто экспортировал рабочий меш, чтобы проверить, как выглядит результат в Marmoset, где у меня была настроена камера, соответствующая камере на референсе. Далее я накладывал изображение в Photoshop поверх референса, чтобы понять, что нужно изменить. Этот метод работы я подсмотрел в туториале Hyperreal 3D Character Creation by Şefki Ibrahim.
Вот несколько скриншотов процесса работы над головой:
Скриншот головы в процессе работы.
Результат в marmoset toolbag.
Финальный скульпт головы в Zbrush.
Если подвести итог: очень важно сделать так, чтобы связка программ позволяла быстро экспортировать рабочий меш, и чтобы сцена в Marmoset подхватывала этот файл автоматически. Таким образом можно быстро увидеть, как это выглядит на рендере. Это крайне важно, потому что в ZBrush геометрия воспринимается иначе.
Для временных волос я взял готовые плашки из программы Character Creator и примерно подогнал их под силуэт прически в ZBrush. Это очень грубо, но уже дало эффект живых волос и помогло мне с правильным восприятием на данном этапе.
Далее я работал над телом. За основу также был взят скан, который я модифицировал.
Поскольку на референсе есть повязка на шее, это позволило мне не объединять голову и тело. Шов был прикрыт лентой. Для рабочих задач лучше сделать все единым мешем, однако в этом проекте я решил немного упростить.
Далее я создал все hard-surface элементы, начав с пистолетов и автомата. Оружие и прочие твердотельные элементы, на мой взгляд, проще и быстрее делать в CAD-программах. Также я создал более простые элементы: баллончик, термос и т.д.
Вот скриншоты бейзмешей оружия (более органичные формы я не делаю, их проще моделировать полигонами):
Когда я моделирую в CAD, мне нравится переносить модели в KeyShot, чтобы оценить, как они будут выглядеть с хорошим освещением и камерой.
Оставшиеся детали я моделировал в 3ds Max при помощи стандартных инструментов полигонального моделирования.
Тестовый рендер шлема в Keyshot.
Если говорить о процессе переноса CAD-модели в ZBrush, то сначала я делаю экспорт геометрии в 3ds Max. Все, что можно исправить с помощью встроенных инструментов 3ds Max, я исправляю и довожу. В основном это делается с помощью модификаторов Subdivide/Retopology. По сути, это аналог Zremesher, но внутри 3ds Max. Далее я переношу все в ZBrush и там доделываю модели.
В ZBrush я использую такие инструменты как Groups by Normals, затем Zremesher с включенным параметром Keep groups. Если эта связка не работает, то экспортирую из CAD более подробную модель, чтобы все скругления сложных форм были максимально плавными, и использую Dynamesh. Далее делаю дубликат модели и Zremesher. Накидываю сабдивов. Далее Project all. Иногда приходится доводить какие-то части модели руками с помощью кистей Smooth, hPolish и т.д.
Базовый меш для обуви я делал в 3ds Max. Затем доводил геометрию в ZBrush.
Когда все элементы были созданы, я приступил к ткани в Marvelous Designer. Нужно было создать куртку, штаны, сумку, ремень с подсумками и кепку.
Очень важно в начале работы убедиться, что аватар физически правильного роста. Это можно сделать, например, открыв стандартный аватар в программе и добавив к проекту свой аватар. Если модели примерно одного роста, то все в порядке. Если аватар больше или меньше, то можно при импорте настроить масштаб (Scale) в диалоговом окне import. Также желательно уменьшать количество полигонов на аватаре, чтобы симуляция происходила быстрее.
Вот общий вид финального проекта перед экспортом в Zbrush:
Параметр Particle distance при экспорте у меня варьируется от 5 до 10 на разных элементах. Если некоторые складки или места на ткани не выглядят идеально, можно доработать их в ZBrush. Это обычная практика. Сетка в данном случае состоит из треугольников, так как мне хотелось попробовать метод Shaafi Ahmad "Marvelous Designer Jitter Fix in Zbrush".
Для создания элементов я часто использую подход, когда базовый меш делается в любой программе (3ds Max, ZBrush и т.д.), делается UV-развертка и через import OBJ этот объект загружается в Marvelous Designer. Есть много гайдов этого процесса, например видео на канале Outgang "How to import a Zbrush garment sketch in Marvelous Designer".
Диалоговое окно импорта:
Обращу внимание на важные моменты: Load type – Add; Object type – Garment; Trace 2D Patterns form UV Map – On.
Проиллюстрирую этот процесс на примере сумки:
В начале я создал блок-аут сумки в ZBrush. На этом этапе очень просто контролировать размеры и формы деталей, так как для работы можно использовать любые кисти.
Необходимо сразу делать эту модель с учетом того, как она сшита в реальности. Отдельные фрагменты ткани можно отделить либо полигруппами, либо запускать луп в месте, где будет разрез ткани, чтобы на следующем этапе, на развертке, создать там UV-шов (напомню, что Marvelous Designer будет нарезать модель на фрагменты именно по UV).
Модель в Zbrush.
UV-развертка (некоторые “шелы” я выравниваю).
Так выглядит модель после импорта (Import/Add/Garment/Trace Uv patterns).
Как видно на последнем изображении все выкройки уже выглядят неплохо. Можно провести аналогию с "сырым" 3D-сканом, который нужно чистить, но базовые формы уже очень хорошие. Здесь стоит обратить внимание, что некоторые фрагменты не будут сшитыми (Sewing), а также форму некоторых фрагментов ткани лучше подправить.
Финальный вид сумки в Marvelous Designer.
Не буду расписывать, как создавался каждый фрагмент одежды, так как это достаточно прямолинейный процесс, и сейчас есть много роликов на YouTube и туториалов, как делать те или иные элементы одежды. Отмечу лишь, что я много использую PIN'ы и считаю это очень удобным. Если вы не знакомы с таким методом работы, то есть хороший туториал Flipped Normals "Making a Street Wear Outfit in Marvelous Designer", в котором подробно показан этот метод.
Далее я приведу несколько скриншотов финальной одежды перед экспортом:
Кепку я сделал уроку на канале Travis Davids “Creating a Baseball Cap”
Далее я экспортировал геометрию и приступил к финальной сборке high-poly и доводке деталей.
Удобно делать это частями, потому что если работать в одной сцене, это может быть ресурсоемким. Я постарался логично разбить модель на части (Сумка, пистолеты, ремень и т.д.) и работал по частям.
Вот пример как выглядел проект с сумкой:
Если на конкретной детали есть возможность работать с Dynamic Subdivision, то я стараюсь оставаться в этом режиме как можно дольше, чтобы экономить ресурсы компьютера. К тому же этот режим позволяет видеть плоские детали с толщиной.
Наплечник я создал с помощью плагина SlideKnit.
Ролик с примером, как работает плагин:
Результат которого нужно было достичь:
Покажу некоторые шаги:
Сначала нужно создать деталь-блокаут с UV-разверткой.
Также необходимо создать отдельный объект-паттерн, который требуется спроецировать на эту поверхность.
Если применить плагин SlideKnit к первому блокаут-объекту, то он станет плоским и по форме как UV-развертка (аналогия — это Morph UV в ZBrush).
Располагаем второй объект близко к поверхности "развернутого" объекта и подрезаем границы, чтобы форма стала как у первого объекта-блокаута.
Путем применения модификатора Skin Wrap и изменяя параметр модификатора Morph первого объекта, трансформируем оба объекта в исходное (не развернутое) состояние.
Финальная модель, которую легко доработать, придав толщину и применяя Bevel by Polygon и т.д.:
Далее я покажу несколько скриншотов из программы ZBrush.
Финальная хайполи. Рендер в Marmoset Toolbag.
Я использую в основном стандартные кисти для работы — Move, ClayBuildup, Standard, DmStd, Smooth и т.д. Для шлифовки складок хорошо себя показывает кисть Smooth Directional. Также у меня есть несколько дополнительных кистей, но основа - это стандартные кисти.
Для работы с тканью хорошо показывают себя специальные кисти, например, Pascal ACKERMAN “Marvelous Designer to Production for Artists” которые я использую много в работе. Они включают в себя также несколько неплохих альфа-изображений. Здесь есть хорошая IMM кисть для ниток швов. Этот набор весьма хороший и целостный. Если нет других кистей, с ним можно начать работать, постепенно добавляя какие-то еще кисти и альфы к своему пайплайну.
Несколько примеров кистей и альф из набора “Marvelous Designer to Production for Artists”.
Когда загружаете свои альфы в Zbrush не забывайте о параметре MidValue. Чаще всего следует выставить его равным 50, но бывают ситуации, когда приходится подбирать эту цифру перебирая разные варианты.
Ссылка на кисти Pascal ACKERMAN “Marvelous Designer to Production for Artists”
Часто в работе с персонажами требуется сделать паттерн вдоль детали на хайполи-геометрии. В этой работе были ремни и мне хотелось сразу сделать паттерн в виде полосок. Чтобы сделать это нужно развернуть(UV) детали и в Noise Maker применить “кастомную” альфу в качестве текстуры.
Когда делаете несколько деталей с одинаковым паттерном при помощи noisemaker удобно сделать пресет. Но нужно помнить, что у разверток должен быть одинаковый тексель. Это нужно для того, чтобы масштаб паттерна в Zbrush был одинаковым.
Если говорить о работе в Zbrush, то я использую метод Gio Nakpil из тутора Master Organic Modelling к лепке. Для себя, в том числе, я почерпнул оттуда, что лучше использовать низкую интенсивность кистей при лепке. Я использую следующие параметры интенсивности: Move – 13; Clay Buildup – 5; Dam Standart – 12 в качестве стартовых настроек.
Финальная high-poly имеет бюджет Total Points = 139 млн, файл занимает порядка 7 гигабайт. Далее я сделал decimate и перешел к ретопологии. Для ретопологии я использую 3D-Coat. Поскольку это персональный проект, я не думал о количестве полигонов, сильно не экономил.
Вот несколько скриншотов процесса:
Часть швов UV я делаю прямо в 3D-Coat, но финальную развертку, маппинг делаю в RizomUV.
Бейк был сделан в программе Marmoset Toolbag. Артефакты бейка я правил в Photoshop.
При редактировании бейка в Photoshop удобно сделать "render UV" в 3ds Max. Это поможет видеть, где находится тот или иной шелл.
В Marmoset я запек Normal, AO, Curvature, ID карты. Остальные карты я пек в Substance Painter.
Вот картинка со всеми текстурами, здесь много текстурных сетов, но повторюсь, это мой личный проект, и я не был ограничен в бюджете.
В Substance Painter я решил сделать один проект для всех текстурных сетов. Финальный файл SPP весит порядка 6 гигабайт. В этот раз я текстурил в ACES (рендерил соответственно тоже).
Вот несколько сриншотов из программы:
Сейчас существует очень много хороших готовых смарт-материалов, которые дадут хороший старт проекту. Также можно комбинировать элементы из разных материалов. Ещё есть много туториалов о том, как создать тот или иной материал. Например, у художника Milad Kambari на канале много роликов.
Повреждения на деталях я не делал в Zbrush на геометрии, поэтому сделал это в Substance.
Чаще я рисую подобные “дамаги” вручную с помощью кисти Dirt 2 или аналогичной в маске создав новый слой Paint.
Часть ниток я добавил с помощью встроенного инструмента Topstiching (часть ниток у меня была сделана геометрией).
Иногда я нахожу нужный материал среди бесплатных Comunity Assets на официальном сайте Substance.
Найти татуировки, аналогичные концепту, я не смог. Использовать что-то похожее я не хотел. Мне было интересно создать татуировки максимально близкие к оригиналу-концепту, поэтому пришлось их рисовать вручную. Для этого я использовал Autodesk Sketchbook. Очень простая и интуитивная программа.
Стоит упомянуть, что некоторые надписи на референсе не читаемые, и здесь я решил попробовать использовать нейросеть, чтобы придумать эти фразы-слова. Я использовал нейросеть DeepSeek для этого.
В процессе работы я также применял нейросети для поиска визуальных идей, например, вводил запрос про серьги в стиле киберпанк. В работу это не вошло, скорее помогло мне понять, что требуется.
Пример генерации Reve по запросу "cyberpunk earings".
В процессе создания текстур я уже создал сцену в Marmoset и постоянно делал тестовые рендеры, чтобы увидеть, как выглядит все в реальных условиях.
Далее я приступил к волосам. Я не часто делал волосы до этого. Это та область, где всегда хочется найти какой-то "чит", но все заканчивается всегда тем, что расставляешь пряди вручную, и это дает лучший результат. Чтобы освежить подход в памяти, я пересмотрел туториалы:
Hair Breakdown — with Andreea Scubli на канале Outgang
Hazel Brown Realtime Hair Tutorial (бесплатный туториал + можно на ArtStation купить файлы с прической и использовать как референс)
Первое видео про общий подход, второе я брал за основу, потому что мне показалось, что прическа чем-то похожа на то, что мне нужно.
Чтобы упростить себе работу, было принято решение печь пряди в программе FiberShop, которую мне давно хотелось освоить и проверить в работе. В итоге я убедился, что этот инструмент достаточно мощный, включающий в себя даже модуль, напоминающий Photoshop, где при помощи слоев и режимов смешения можно довести финальные текстуры до нужного вида. Также эта программа удобна тем, что она сразу запекает и сохраняет уже отредактированные карты в определенное место, откуда их подхватывает Marmoset (если все настроить). Это отличная связка, и это сильно ускоряет работу.
Плашки я расставляю в ZBrush при помощи модификатора Bend Curve.
Такой подход я увидел в туториале UE4 for Real-Time Hair Course
Всем, кто хотел бы освоить этот подход, я настоятельно рекомендую обратить внимание на этот курс. Также очень важно в процессе создания прически постоянно смотреть, как выглядит текущая итерация в рендер-движке.
Теперь, когда у меня есть вся модель в A-позе пришло время поставить персонажа в финальную позу. Для этого я использовал программу Character Creator. В программе есть авториг и возможность рисовать веса. Я не тратил много времени на идеальный риг, т.к. всегда есть возможно подправить недостатки руками в программе для скульптинга. Куртку и часть деталей я подгонял вручную в программе Zbrush.
Далее настало время рендера. Marmoset Toolbag 5 был выбран изначально в качестве рендер-движка. К этому моменту у меня уже появилась хорошо работающая сцена, так как когда я отсматривал, как выглядит модель в процессе работы, я делал какие-то настройки, проводил эксперименты.
Одна из итераций рендера на первых этапах.
Больше всего времени занял поиск основного атмосферного кадра, фона.
Я пробовал разные фоны, пытался поймать идею.
Мне нравилась идея сделать фон геометрией, например, чтобы сзади был киберпанк-город или что-то подобное. Я нашел тематические kitbash-наборы и пробовал это использовать, но сцена в Marmoset становилась слишком неповоротливой, если использовать несколько зданий или чего-то подобного. Поэтому было принято решение использовать только стену, пол и несколько пропсов.
Модели окружения я брал из наборов с сайта kitbash3d.com.
Освещение в сцене: HDRI-карта + два вертикальных светильника разных оттенков (геометрия с картой emissive) слева и справа.
На полу есть дым — это плоскость с текстурой дыма, примененная в качестве карты прозрачности.
Кадры с темным окружением - это просто кастомная HDRI карта.
Для сцен с однотонным фоном я использовал первую HDRI-карту и два светильника, один справа-сверху и второй контурный сзади.
Ниже скриншоты настроек камеры и рендера:
Для финальной обработки я делал немного цветокоррекции в Photoshop с помощью встроенного Camera Raw Filter. Картинка из Marmoset получилась уже очень хорошая по цветам, поэтому тут лишь небольшие, минорные изменения.
Видео рендерилось аналогично, для сборки видеофрагментов я использовал Adobe Premiere. Для более плавной картинки следует не забывать про параметр Motion Blur в настройках Marmoset.
В процессе работы я показывал работу друзьям, чтобы они подсказали, что можно улучшить. Это очень важно по разным причинам, так как глаз "замыливается", где-то более опытные художники видят важные нюансы, которым ты не придаешь значения.
Подводя итог, могу сказать, что я очередной раз убедился в важности персональных работ. Это помогает понять, где есть проблемы, и над чем стоит работать в будущем, также это наполняет портфолио, что помогает реализоваться профессионально.
Спасибо всем, кто прочел эту статью, комьюнити за фидбек и отзывы, редакции сайта render.ru за возможность написать эту статью! Всем удачи!