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 – и готово Smile

Ворс на наплечнике, наручах, сапогах и одежде я сделал, используя 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 – опыт у меня небольшой и тяжело претендовать на какую-то новизну и оригинальность. Поэтому надеюсь, что было интересно Smile
P.S. Также хотел бы поблагодарить своих коллег, которые помогали фидбеком в процессе работы и советовали, что улучшить.

818 0 850 37
12
2016-12-12
Спасибо, серьезнейший подход!
2016-12-12
Прекрасная работа и прекрасное описание!  Сам слабоват с Vray - вы можете порекомендовать урок или расписать момент - какие текстуры из сабстенс пейнтера как правильно подключать (нода это 80% подсказки, но чуть-чуть слов можно? ) в Вирей. И как вообще правильно рендерить мид поли в вирее, а то картинка часто выдается очень уж далекой от желаемого, когда плохо знаешь настроить. Что имеет смысл почитать/посмотреть? 
2016-12-12
[quote=Leoluch] Прекрасная работа и прекрасное описание!  Сам слабоват с Vray - вы можете порекомендовать урок или расписать момент - какие текстуры из сабстенс пейнтера как правильно подключать (нода это 80% подсказки, но чуть-чуть слов можно? ) в Вирей. И как вообще правильно рендерить мид поли в вирее, а то картинка часто выдается очень уж далекой от желаемого, когда плохо знаешь настроить. Что имеет смысл почитать/посмотреть?  [/quote]Результат может  очень зависить от освещения, как вы его настроите, иногда просто HDRi карты бывает не достаточно.  Ед. о чем я забыл написать - те настройки для ноды что я описал, не всегда подходят для материалов которые не являются металлами, в данной работе я ткань настроил отдельно. Для ткани сабстанс выдает карту спекуляр с одним параметром, поэтому карту спека я делал в по старинке - на основе диффуза, так же для ткани я в ручную задавл значение IOR, не используя ту карту что сгенерировал сабстанс.Так же, при настройке, могу посоветовать рендерить все пассы (дифуз, спек, глос, ао, gi, sss и тд), и если где то есть проблема то смотреть  где именно она.
2016-12-12
[quote=Igor Golovkov] Результат может  очень зависить от освещения, как вы его настроите, иногда просто HDRi карты бывает не достаточно.  Ед. о чем я забыл написать - те настройки для ноды что я описал, не всегда подходят для материалов которые не являются металлами, в данной работе я ткань настроил отдельно. Для ткани сабстанс выдает карту спекуляр с одним параметром, поэтому карту спека я делал в по старинке - на основе диффуза, так же для ткани я в ручную задавл значение IOR, не используя ту карту что сгенерировал сабстанс.Так же, при настройке, могу посоветовать рендерить все пассы (дифуз, спек, глос, ао, gi, sss и тд), и если где то есть проблема то смотреть  где именно она. [/quote]А как вы решали момент с АО ? Я возможно ошибаюсь, но АО в Vray на нормалках немного фейковое или это мои додумки и стандартного Vray dirt хватило? 
2016-12-12
[quote=Leoluch] А как вы решали момент с АО ? Я возможно ошибаюсь, но АО в Vray на нормалках немного фейковое или это мои додумки и стандартного Vray dirt хватило?  [/quote]Ну на самом деле вот с АО я вообще не думаю что должны возникать какие либо проблемы :) обычного Vray dirt  хватает для всех нужд
2016-12-12
Крутяк, спасибо .
2016-12-13
очень здорово! спасибо!
2016-12-13
"""""""""В настройки рендера я практически не лезу (кроме GI и gamma 2.2)""""""" что вы хотели сказать про гамму? какие настройки?
2016-12-15
Все хорошо, скульптинг, текстуринг- но на выходе все равно персонаж с игрушки, а хочется что то реальное и живое. Возможно все  в настройках рендера, света ,шейдинга. Хотя автор эту цель видимо не преследуют.
2017-01-30
Прекрасная работа, спасибо!  Люди, объясните новичку ситуацию с экспортом текстур в VRay из Substance, пожалуйста. Если быть конкретным - с картой Reflection. На сайте Allegorithmic есть подробная инструкция, здесь тоже есть подсказка, но у меня все равно остается неясность. VRay в Maya и в 3ds max чем-то отличается? В теории - не должен. Но я работаю в 3ds max, и экспортируемые из Substance карты Reflection либо неправильные, либо я все еще не понимаю азов Vray (что вполне вероятно). В VRay в 3ds max карта Reflection вроде как отвечает за силу отражения и за цвет отражения, а Substance экспортирует карту, которая отвечает только (!!) за цвет отражения. То есть сделал я материал дерева в Substance, например. А при экспорте получается пустая белая карта, потому что дерево отражает равномерным белым цветом. А если на этом дереве был какой-то золотой металлический элемент, то на выходе из Substance будет белая карта с желтым пятном. В итоге в Reflection приходится кидать карту Glossiness. Вроде бы и никаких проблем. Но это только если вся текстура отражает равномерно белым цветом. А если происходит ситуация, которую я описал выше (с золотым элементом)? Приходится делать карту Reflection вручную в Фотошопе, переводя экспортированную карту Glossiness в режим RGB и накладывая на нее экспортированную карту Reflection в режиме Color, чтобы это золотое пятно легло на текстуру дерева. Я что-то понимаю/делаю не так? Substance неправильно экспортирует текстуру Reflection? Или VRay в 3ds max и Maya отличается, а Substance подходит только для Maya (официальная инструкция сделана именно для этой программы)?
2017-02-03
[quote=VoKi] Я что-то понимаю/делаю не так? Substance неправильно экспортирует текстуру Reflection? Или VRay в 3ds max и Maya отличается, а Substance подходит только для Maya (официальная инструкция сделана именно для этой программы)? [/quote]Аналогичная ситуация с рефлекшеном. Но я работаю в Maya, так что видимо нет разницы между ней и максом.
2017-02-03
[quote=Sunchezzz] Аналогичная ситуация с рефлекшеном. Но я работаю в Maya, так что видимо нет разницы между ней и максом. [/quote]Спасибо за ответ. Видимо, придется написать разработчикам и попросить прояснить ситуацию/исправить недоработку.
RENDER.RU