Making of Braveheart. часть 1: Портрет

img_001.jpg

Всем привет. Меня зовут Владимир Серёгин и я 3D artist в харьковской студии Plarium. Наш отдел создает рекламные видео и баннеры для игр и задачи у меня самые разнообразные - от моделинга и рига до симуляции взрывов и создания целого видоса, так что по сути я дженералист.
В свободное время увлекаюсь персонажкой, но до портфолио скульпты не доживают, поэтому, с целью обновить портфолио, я решил пройти курс по созданию персонажа. Заодно получить новые знания и показать накопленный за годы работы опыт.
Наша компания помогает с обучением сотрудников, я воспользовался ее поддержкой и записался на курс “Создание персонажа для синематиков” от zbrush3d.com. Преподавателем на тот момент выступил голливудский художник по персонажам Валентин Ербуке, который построил программу обучения по пайплайну ведущих VFX студий. Забегая вперед, я скажу, что остался доволен курсом и на момент написания статьи делаю следующего персонажа в рамках второго курса Валентина.
На первой лекции Валентин говорил о том, как важно в портфолио показать разные скилы. Утверждение справедливо, если вы находитесь на начальном или среднем уровне и пока не стали мастером в чем-то одном. Я посмотрел на свое старое портфолио, которое состояло из техники и лысых мужиков, и понял - надо делать женщину, ткань и волосы. Нашел подходящий концепт.
Финальная работа получилась объемной, и я решил разбить ее на две публикации: портрет, чтоб акцентировать внимание на лице и волосах, и в полный рост со всеми доспехами. В этой статье речь пойдет о портрете. Затем я выложу ее в полный рост и напишу вторую статью)

Референсы
В теории все мы знаем о важности референсов. А на практике, если элементу не хватает рефов, работа над ним идет медленно и/или некачественно. Для референса головы Валентин рекомендует выбрать актера/актрису, т.к. на концепте информации недостаточно, а набирать ее лучше с какого-то одного источника. Я отталкивался от Эммы Уотсон.

img_002.jpg

Моделинг
Скульптил все в Zbrush. Простые болванки моделил с помощью Zmodeller, сложные - в 3ds max. Обошелся без мелкой детализации типа морщин и пор, так как она добавится на этапе текстуринга. Грубо обозначил объем волос, чтоб в будущем было легче строить гайды для XGen.
Для оптимизации делаем decimate 2-3 раза, экспортим в obj и переходим к ретопологии.

img_003.jpg

Ретоп/юв/проджект/запекание
С ретопологией все просто - ограничений по полигонажу нет, сетка плотная, поэтому достаточно лупов вокруг лица, рта и глаз. Делаем это в Maya с помощью quad draw.
В дальнейшем, для более аккуратной детализации, я сгладил голову в Zbrush до 2го уровня Subdivision и работал уже с более плотной сеткой.

img_004.jpg

UV развертка. Чтоб отрендерить клоузап глаз (eyeshot) разрешением в 4k, нам на голову нужно 8 юдимов по 4k.

img_005.jpg

Отретопленный и развернутый меш готов, теперь нужно запечь карты displacement для детализации и cavity, AO и normal для текстуринга.
Для этого мы кидаем новый меш обратно в Zbrush, где мы будем переносить на него детализацию со скульпта.
Прежде всего нужно сохранить Morph Target, так как при дальнейшем сглаживании крупные формы поплывут и потеряют фактурность.
Теперь мы дивайдим наш меш и проджектим детализацию с помощью ProjectAll. Если нажать ProjectAll сразу на последнем сабдиве, вылезут косяки, поэтому жмем мы его на каждом новом уровне сглаживания.
Теперь возвращаемся на первый уровень сабдивов и жмем Switch Morph Target, тем самым возвращая фактурность нашему мешу.
Дисплейсмент экспортировал с помощью Multimap Exporter. Насчет запекания и экспорта всех остальных карт я подробно расскажу во второй статье, так как часть этого делалась в Zbrush, часть в Mari, и часть в Substance Painter.

Текстуринг
Текстуры я взял с сайта texturing.xyz и нанес их на голову следуя паплайну, который описан на канале Джереми Селесте. Если коротко, то этапы следующие:
1. дублируем голову, делаем UV на первом юдиме со швом на затылке, рендерим сетку в 8к
2. в фотошопе подгоняем текстуры XYZ под сетку с помощью puppet warp и liquify.
3. в мари подгружаем две головы - с восемью юдимами (голова А) и с одним (голова Б)
4. на голову Б подгружаем текстуры XYZ после подгонки в фотошопе
5. репроджектим текстуры с головы Б на голову А

Готово, теперь у нас есть голова с восемью юдимами и с текстурами XYZ. И гораздо быстрее, чем вручнуть проджектить отдельно дисплейсмент и отдельно альбедо.
Всю кожу головы кроме лица я заполнил тайловой текстурой, к-рую подготовил в фотошопе. так я сделал для альбедо и для дисплейсмента. Затем на альбедо я добавил цветовые зоны, грязь и повреждения. Из красного канала дисплейсмента сделал карту спек. Нарисовал маску для ссс.

img_006.png

Шейдинг

img_007.jpeg

Основной шейдер

Подключаем все карты куда надо:
albedo (кожа с грязью и повреждениями) в base color
specular в specular color и coat color
roughness в specular roughness
sss mask в subsurface
sss color (чистая кожа) в subsurface color

Дисплейсмент

Дано: дисплейсмент из Zbrush в 16 бит и дисплейсмент XYZ из Mari в 32 битах.
XYZ разбиваем на 3 канала и в каждом отнимаем 0.5 с помощью remap value. Теперь значения дисплейсмента у нас не с 0 по 1, а с -0.5 по 0.5. Это нам нужно для того, чтоб серый цвет вывелся в 0, белый цвет выступал а черный был впуклым.
Все 4 слоя объединяем вместе с помощью ноды Layered Texture, которую подключаем в дисплейсмент шейдер.

img_008.jpg

Карта specular подключается и в specular color и в coat color, тем самым давая нам два слоя отражений. Это имитирует реальную кожу с основным слоем отражений (с более высоким значением roughness), и слой с влагой сверху (roughness пониже).
В комплекте к specular у нас есть карта roughness, а в coat мы в roughness ставим числовое значение, в моем случае 0.4.

img_009.jpg

Глаза
Глаз состоит из двух сфер - основа со зрачком, и оболочка с роговицей. Плюс геометрия слезы.
На основу назначен материал с ссс и с простой текстурой, к-рую я намешал в фотошопе из гугл картинок за 5 минут. И она же через чб подключена в бамп.

img_010.jpg

На оболочку глаза и на слезу назначен прозрачный материал с нойзом:

img_011.jpg

Груминг

img_012.jpg

С XGen я до этого не работал, прическа была сложной и одной лекции по волосам мне не хватило, поэтому после окончания курса я купил подписку на patreon лид грумера MPC Jesus Fernandez для более детального изучения XGen.
Теперь рабочие таски с волосами направляют на меня)

img_013.png

Моя работа с волосами строится следующим образом:
1. скальп
2. гайды
3. маски
4. модификаторы
5. шейдинг

Скальп должен быть развернут на первом юдиме, поэтому в моем случае нужно
дублировать геометрию головы, отрезать лишнее и разворачивать.
На скальп надо назначать материал lambert, иначе не будут работать p-tex карты для масок.

Гайды оказались самым сложным пунктом. Отдельная коса не является проблемой, но в моем случае косичка наполнялась волосами по ходу всей своей длины, а потом заплеталась в большую косу. Гайды или создавались стандартным образом, или конвертились из сплайнов.

img_014.png

Сплайны или просто создавал, или детачил из отмоделенных в геометрии косичек.
Когда у тебя есть красивый гайд, но тебе нужно сдвинуть его основание, его можно сконвертить в сплайн, подвинуть вертекс и сконвертить обратно в гайд.
Чтоб не путаться в гайдах, их лучше раскрасить в разные цвета с помощью маски Guide Color:

img_015.jpg

Маски:
- в Density mask рисуем границы роста волос и блюрим для мягкого перехода.
- в Region map разбиваем на участки/проборы
- если работа какого-то из модификаторов не устраивает, создаем маску и закрашиваем проблемный участок

Усредненный стэк модификаторов выглядит так:
- 3 слоя клампинга: по гайдам, средний и мелкий
- кат
- 3 нойза: мелкий, средний, крупный

С глазами и ресницами чуть проще:
- 2 клампинга
- кат
- нойз

img_016.jpg

из экспрешнов использовал random expression для рандомности в клампингах:
$randmin = 0.0050; # 0.000, 0.050
$randMax = 0.0150; # 0.000, 0.050
rand($randmin,$randMax)
и percent stray expression для крупного нойза:
$percentStray=5;#0,100
rand() < $percentStray/100.0 ? 1 : 0
Для шейдинга использовал официальный гайд Arnold. Кстати! Всего у меня было 15 дескрипшнов. Чтоб в каждом не настраивать одинаковую толщину волос, я использовал Global Width Expression как в этом уроке.

Подача
“Нет большего заблуждения, чем мысль, что тщательная передача натуры — это искусство”
Василий Кандинский, 1896
Закопавшись в технических вещах не стоит забывать, что мы имеем дело с изобразительным искусством, и отдельную часть работы стоит посвятить формированию художественного образа.
Концепт сам по себе несет образ: по позе и по взгляду мы понимаем, что сейчас она кому-то за что-то будет мстить. Поэтому я наклонил ей голову и сделал взгляд исподлобья. Сразу меняется восприятие:

img_017.jpg

Чтоб образ считался наверняка, добавил разбитую губу и раздул геометрию слез. Когда кто-то из сотрудников проходил мимо и спросил “шо это за обиженка” я понял, что двигаюсь в правильном направлении.

img_018.jpg

Помимо “технических” рендеров, в которых нужно показать всю проделанную работу, я хотел сделать главный художественный портрет, в котором важно донести образ и совсем необязательно все освещать. В качестве референсов набрал живописные портреты:

img_019.jpg

Они более привычны нашему глазу в плане освещения и совпадают по эпохе. О живописи в качестве референсов подробно в своих докладах рассказывает Ian Spriggs.
Мне хватило двух источников света - главного и наполняющего, чтоб не было черных провалов.
На бэк кинул эту штукатурку.

img_020.jpg

Отдельную благодарность хочу выразить 2D Art Lead Игорю Мачихину, который помогал мне на финальных стадиях. Всем советую дружить с крутыми 2дшниками. Ты делаешь белки красными чтоб показать воспаление от плача, а тебе советуют на посте увести их в более холодный цвет, после чего глаза начинают контрастировать с кожей, акцентировать на себе внимание и картинка преображается. Или местами вручную дорисовать тени, добавив голове объема:

img_021.jpg

Заключение
Спасибо редакции render.ru за возможность написания этой статьи. Надеюсь, этот мейкинг оф был полезен. Во второй статье я расскажу о решении функционала доспехов на концепте, моделинге и текстуринге одежды, и о самом главном - о поиске организационных решений в работе 3D художника. Когда мозг прокрастинирует большую задачу, а списки и чек-листы перестают работать из-за нелинейности процессов.

818 0 850 22
4
2019-11-15
Andrew, почти Адольфи)
2019-11-17
Андрей КривуляОтличный Making of. Спасибо =)

Единственное - совет, который я получил от самого Jesus Fernandez =) И tarkan sarim иногда упоминает этот workflow. =) И он мне упростил жизнь.

Не нужно делать копию головы, так как для симуляции и прочих вещей - проще иметь один Mesh. Для многих заказчиков - тоже.

Для него нужно создать UV Set 1-2, в первом обычная развертка для масок и так далее, во втором - UDIM's.

Там все просто. Сначала делаем копию UDIM и получаем второй сет. А в первом уже собираем все в один UV, который будет для XGEN масок и так далее.

Udims и материалы соединяем через Windows -> Relationship Editors -> UV Linking -> Texture Centric.

Вот слова самого Jesus:

"Normally you don’t wrap a full animal as a scalp because will make the rig super heavy. You can groom the main geo.
The rig should not have the groom for the animators to use.
The groom should be on the already animated scene ready to render. You can do this either with an animated cache and importing the groom or blendshaping it. Or using the rig scene that has the groom to render but this can break more often"

То есть Workflow заключается в том, чтобы был один Mesh и на него уже загружались анимации через animation cache для последующих симуляций шерсти или причесок.

Мы вели приличную переписку в Facebook, в которой пришли к такому решению и оно используется в MPC и других крупных VFX-студиях.

круто, я видел как он рисует маски по основному мешу и не понимал как, спасибо!
2019-11-27
Статья интересная, но больно сложно всем этим заниматься. Что тебя толкает на подобное?
2019-11-30
КронштэйнСтатья интересная, но больно сложно всем этим заниматься. Что тебя толкает на подобное?
невроз и перфекционизм)
RENDER.RU