Making Of "Beast Hunter"
Всем привет! Меня зовут Игорь Головков, я работаю в харьковском офисе компании Plarium на должности 3D Artist. В этой статье я постараюсь описать процесс создания своей работы Beast Hunter.
Beast Hunter – персональный проект, который я делал в свободное от работы время. Финальный результат – рендер с постобработкой.
Выбор персонажа
Выбирал я недолго – под впечатлением от вышедших Dark Souls и The Witcher решил делать персонажа-воина. Собрав подходящие референсы в интернете, я принялся за скульптинг.
Моделирование
Как только я начал работу над персонажем, сразу же пришлось и прерваться. Наша компания как раз оплатила курсы всем желающим, и я выбрал CGMA Anatomy for Production, а там большой объем домашних заданий. Но так как болванка для персонажа нужна была в любом случае, время было потрачено не зря.
Закончив скульптинг тела, я продолжил работу над внешним видом персонажа.
Сам процесс моделирования не представлял из себя чего-то сложного, всё было довольно стандартно: скульпт в ZBrush, потом ретопология в Maya. Некоторые элементы делались сразу в Maya, а в ZBrush добавлялись детали, кое-что делалось только в ZBrush. Больше времени ушло на сам дизайн и многочисленные изменения, которые вносились постоянно.
Когда high-poly модель была готова, я приступил к работе над mid-poly.
UV и запекание карт
Основные детали, на которых при запекании нужны бы были швы UV-развертки в определенных местах (зачем это – детально описано тут), я разворачивал в UVLayout. Остальные детали для экономии времени я развернул в ZBrush. Как я уже писал, финальным результатом должен быть рендер с постобработкой, поэтому я не ограничивал себя в количестве UV-сетов: сначала их было 7, но под конец их количество значительно возросло.
После того как mid-poly модель была разбита по UV-сетам, я приступил к запеканию карт. Запекать решил попробовать в Substance Painter. Я использовал практически все стандартные настройки, кроме cage. Для некоторых частей пришлось поменять Max frontal distance и Max rear distance.
Чтобы быстро получить геометрию для cage в Maya, можно воспользоваться Transfer Maps. В Outliner выбираем получившуюся геометрию и экспортируем ее, а в Substance Painter указываем путь к этому файлу в разделе cage file.
Я остался очень доволен скоростью работы Substance Painter при запекании карт, но он может надолго подвиснуть во время запекания карт при включении настройки antialiasing x8. Большой плюс в том, что можно сразу проверить эти карты на модели, поправить модель или cage, если есть дефекты, и запечь заново.
Создание текстур
В процессе скульптинга я специально не стал добавлять на модель мелкие царапины, сколы, фактуры материалов, чтобы иметь больше свободы при текстуринге.
Создавая каждый материал, я начинал с простого и двигался к сложному. В самом начале я затекстурил всего персонажа с использованием стандартных материалов, а кое-где залил нужным цветом, чтобы определиться с внешним видом.
После этого я начал детально прорабатывать каждый материал. Когда все основные материалы были готовы, я начал добавлять потертости, царапины и грязь. Для этого я использовал генераторы масок, которые есть в Substance Painter. На этом этапе я немного застрял, потому что сначала допустил ошибку, пытаясь получить нужный мне результат только процедурно. В итоге я использовал процедурно полученные маски в качестве основы и дорабатывал их вручную.
Также хотелось бы немного описать процесс создания швов в Substance Painter. Создаем Fill Layer, применяем к нему маску, залитую черным, настраиваем для этого слоя нужные свойства материала нашего будущего шва. Затем я взял кисть с альфой стежков и нарисовал шов в нужных мне местах. Чтобы он выглядел реалистичнее, я сдублировал слой со швом, в свойствах слоя отключил все параметры, кроме color и normal map. Color меняем на какой-нибудь темный цвет и ставим слою свойство multiply, а normal map ставим отрицательное значение, затем к маске этого слоя применяем размытие – в итоге нитки шва как бы немного вдавлены в ремень.
Настройка материалов (V-Ray).
После экспорта текстур из Substance Painter настраиваем материал в Maya. Сначала необходимо подключить все карты, которые мы получаем при экспорте (diffuse, glossiness, height, reflection, IOR, normal), и на ноду файла назначить атрибут Texture input gamma, чтобы на рендере результат был похож на тот, что в Substance Painter. Для каждой карты устанавливаем свое значение, как показано на скриншоте. В параметрах материала нужно обязательно выставить тип reflection в свойстве GGX.
Основной материал готов, теперь нужно подключить карту bump. Для этого создаем материал VRay Bump Mtl, к нему подключаем ранее созданный материал и карту bump. Это нужно для того, чтобы мелкие детали (сколы, царапины и т.п.) были четче видны на рендере.
Риг
Так как работа над персонажем заняла уже прилично времени и немного мне надоела, этап с ригом я постарался пройти как можно быстрее.
Я сделал основной скелет и несколько вспомогательных костей для управления элементами брони, контроллеры только для ног – все максимально просто. Единственная сложность, с которой я столкнулся при выставлении персонажа в позу, – это ткань.
Результат, который получался с использованием костей, мне не нравился, поэтому я решил работать через nCloth. Делаем ткань nCloth, затем прикрепляем ее к поясу через transform constrain. Для ног и частей брони, которые будут взаимодействовать с тканью, указываем collide with nCloth. После этого я сделал анимацию перехода из T-Pose в основную позу. Не стоит делать анимацию очень короткой – нужно учесть время, которое понадобится ткани на то, чтобы принять нужную форму.
Волосы и мех
Волосы на шлеме (хвост) я начал делать в ZBrush: там я придал им основную форму, разбил на пряди и отдельные слои. Затем экспортировал их как кривые в Maya и назначил на них nHair. Для волос хвоста я создал несколько стилей nHair: редкие волосы, густые пряди и вьющиеся волосы.
Далее необходимо изменить положение волос в соответствии с позой. Я создал proxy mesh, который повторял форму хвоста, добавил в него кости и заскинил, потом применил wrap deformer к волосам. Теперь можно скрыть proxy mesh, и при изменении положения костей волосы тоже будут менять свое положение. Это нужно для того, чтобы было проще редактировать направление волос, потому что применение скина к самим волосам очень нагружает сцену.
Косы персонажа тоже были сделаны с использованием nHair. К кривой применяем nHair, затем выделяем фолликул волос, в его шейп ноде отмечаем галочкой Braid – и готово
Ворс на наплечнике, наручах, сапогах и одежде я сделал, используя XGen.
XGen – невероятно мощный инструмент, который добавили в Maya 2015. Я использовал его в первый раз, и, хотя сначала всё выглядит непонятно, после пары уроков быстро понимаешь принцип работы.
Для каждого элемента лучше создать отдельный меш, так будет удобнее работать. Затем создаем сплайны, которыми задается основная форма волос, и добавляем мелкие детали, используя модификаторы. У каждого модификатора есть свои параметры, к каждому параметру можно применять экспрешены (чаще всего это rand()), которые позволяют придать волосам более реалистичный вид.
Очень помогает использование в экспрешенах stray. Допустим, мы сделали пучок волос, но, если все волосы одинаковой длины или все вьющиеся, это выглядит не очень реалистично. Пишем в строке параметра Frequency – stray() ? 1:3. Затем задаем Stray Percentage, например 10 – значит, для всех волос значение frequency будет 3, а для 10% – 1.
Render
Рендерил персонажа я в VRay, хотя изначально хотел попробовать что-то новое – Arnold Renderer, Octane или Marmoset, но так как работа уже затянулась, решил использовать инструмент, который хорошо знаю (хотя Marmoset отпал и так – мне не хотелось возиться в нем с волосами).
В настройки рендера я практически не лезу (кроме GI и gamma 2.2), только меняю количество сэмплов, когда необходимо повысить качество.
Основной свет у меня от Dome Light с HDRi-картой из Substance Painter, добавляю дополнительные источники света, чтобы поймать блик. Для некоторых частей пришлось настроить Light linking (источник света направлен только на один объект, не влияя на другие).
Когда я настроил нужный мне свет, позу и камеру, пришло время для тестовых рендеров уже с текстурами. Обычно после первых тестов приходится поправлять кое-что на текстурах – где-то усилить или убавить блик, изменить цвет, силу бампа, фактуры ткани или металла (если бы я сделал это на скульпте, пришлось бы перепекать) и так далее.
И, собственно, результат, который я получил на рендере:
Постобработка
То, что я получил на рендере, – это еще не финальный результат, заканчивал работу я в Photoshop. Помимо финальной картинки, я отрендерил следующие render passes:
Но по факту я использовал всего несколько render passes: alpha, AO, specular. Этапы работы над изображением в Photoshop:
Ну что ж, на этом всё. Спасибо всем, кто дочитал! Мне непросто писать making of – опыт у меня небольшой и тяжело претендовать на какую-то новизну и оригинальность. Поэтому надеюсь, что было интересно
P.S. Также хотел бы поблагодарить своих коллег, которые помогали фидбеком в процессе работы и советовали, что улучшить.