Секреты шейдеров для стилизованного персонажа в UE4

Введение

Меня зовут Джунг Фунг Динь. Я занял 1-ое место в демориле по моделлингу в самом первом Autodesk Contest для студентов (CGSA) в 2010. Теперь это мероприятие называется “The Rookies” (Новички). Я работаю в 3Д индустрии уже почти 10 лет. В свои ранние годы, я работал как Игровой Художник на Rare UK, а также участвовал в создании таких игр для Xbox как: Fable 3 и Halo Reach. Затем я перешёл в VFX/индустрию кино, работал как ведущий художник в Double Negative London над такими фильмами как Джон Картер на Марсе, Белоснежка и Охонтник, 007:Скайфолл.
Но все эти вещи в прошлом, сейчас я основатель и руководитель собственной студии Thunder Cloud, основанной во Вьетнаме, мы занимаемся созданием эксклюзивного контента для видеоигр по запросу различных студий, которым нужна помощь или аутсорс в деле создания арта для их проектов. Нашей высшей целью является становление Thunder Cloud как анимационной студии, которая будет создавать анимацию и синематики. Именно поэтому, освоение UE4 является одной из моих целей и занимает ключевое место для R&D проектов.

Проект ЭКСПАРИЯ
Как вы уже знаете в 2016 году, ArtStation запустил свой официальный конкурс «The Journey» (Путешествие)

Меня очень вдохновила эта тема, и я решил принять участие. Я присоединился к участию, и планировал создать эпичную 3Д сцену. Общая продолжительность конкурса была около 3-х месяцев. Думаю, этого времени достаточно для художника, чтобы сделать что-то по-настоящему хорошее, в свободное от основной работы время. К сожалению, я был вынужден заниматься различными работами в Thunder Cloud, и не смог закончить свою работу к сроку. Мне не хватило времени или возможно я был слишком амбициозен в своих планах насчёт моей работы. Но совсем недавно, я решил собрать в одно целое свои наработки и сделать на их основе свой персональный проект. Я снова полон энтузиазма.

Рефы для позы и настроения

Рефы иного мира

Рефы цветовых решений

Моя цель – создать эпичную синематик сцену на тему «Путешествие». Главный персонаж – это девушка по имение Экспария (Exparia). Её имя происходит от игры слов – Исследователь (Explorer; вы можете заметить, что в моей галерее все женские персонажи имеют имя оканчивающиеся на «-ария»). Она пилот меха, с миссией исследовать новый мир для человечества. Для своей сцены, я также придумал небольшую историю, как вы можете видеть на концепте, гигантская чревоточина возникает над орбитой Земли, и вокруг неё летают некие инопланетные строения, что говорит нам о том, что эта чревоточина не обычное природное явление. Она было создана вручную, с некой зловещей целью. Человечество решает послать исследовательскую флотилию на изучение того, что лежит на её обратной стороне. Все мехи, которых несут корабли флота, называются «Камикадзе», что значит, что их первыми бросят на линию фронта и они, скорее всего не вернутся оттуда живыми. Их пилотов тренируют быть одновременно солдатами и учёными. И наш главный персонаж – Экспария, один из пилотов меха, - показывает своё рвение в готовности исследовать новый мир, она готова с улыбкой встретить все предстоящие ей угрозы.

Рефы для персонажа

Финальный результатом проекта будет не просто статичная картинка, а небольшой синематик с анимацией и эффектами – всё будет сделано в UE4. Работая над этим проектом, я хочу улучшить свои навыки как в области арта так и техники. В сцене будут присутствовать как органические персонажи с одеждой, роботы/мехи, интерьеры помещений и окружение другого мира на фоне и т.д. Есть очень много вещей, которые я могу сделать, чтобы проверить и отточить свои навыки, знание рабочего процесса и различных инструментов, для того чтобы всё этого как можно лучше работало в UE4. Как я уже и говорил, весь рабочий процесс выстроен вокруг UE4.
Одна небольшая заметка, так как было перечислено столько разных вещей – вы можете спросить, какой элемент самый главный в этом проекте? Это главный персонаж и потенциальная возможность UE4 в рендере качественных изображений, а также анимация для продакшена. Из-за того что я художник по персонажам, то и Thunder Cloud это очень мощный сервис по персонажному арту. Таким образом, этот проект служит как R&D (Research and Development – Исследования и Разработка) и тренировка для меня и команды Thunder Cloud.

2Д Концепт

Хороший 3Д художник занимает положение между художественным и техническим компонентами 3Д. Я учился рисовать 2Д арт и концепты, в то же самое время я решил изучить и 3Д. Умея работать как 2Д художник, позволяет мне мыслить более свободно при работе над концептами, при работе над дизайном и цветом, не ограничивая себя лишь возможностями 3Д программ. Для этого проекта я решил нацелиться на создание 2Д работы с сильно стилизованным визуальным стилем с небольшим вкраплением PBR шейдеров.

Это 2Д работа, нарисованная мною ранее, я использую её как главный концепт для Экспарии. Я также использую её как референс для разработки шейдеров и текстур. Я разбил каждый элемент картины на отдельные части, чтобы работа выглядела как можно более живописно и привлекала внимание зрителя. В то же самое время, это позволяет мне, используя свои навыки создать все эти элементы используя 3Д. Я научился, глядя на работы других 2Д художников тому, как они «рендерят»/интерпретируют формы и определённые области 2Д персонажей.

Например, глаз в 2Д выглядит более естественными и живыми, на мой взгляд, чем в 3Д, после обработки рендером. Сперва, я научился рисовать в 2Д, выучив основы определённого 2Д стиля. Затем я стал пытаться повторить всё эти стилизованные элементы в 3Д и UE4 (в этом случае).

Из-за особенностей проекта, я сначала нарисовал 2Д концепт, что позволило мне более осознано подойти к тому, как моя сцена будет выглядеть в итоге в 3Д. Это также задало стандарт визуального качества для моих 3Д моделей. Такой подход помог мне определить важность отдельных элементов моей работы и правильно расставить приоритеты, а также выработать подходящий рабочий процесс. Например, глядя на начальный концепт, девушка и мех, выглядят как ключевые элементы, но пол ангара, также нуждается в определённой детализации. Также в картине присутствуют гигантские космические корабли и огромные открытые пространства на фоне, но они очень далеко и блекнут из-за тумана в дали, поэтому я могу определить подходящий для них уровень детализации и выбрать наиболее подходящий процесс работы с ними. Нужна ли им будет high poly карта нормалей или хватит лишь одной модели с диффузной картой, или может matte painting лучше сработает для гор вдали и т.д.

Рабочий процесс

Thunder Cloud представляет услуги по созданию персонажей для различных клиентов со всего мира, с огромным разнообразием стилей и различными требованиями, будь то мобильная игра или проект ААА класса.
У нас есть разработанный «материнский» рабочий процесс для персонажей всех типов, хотя это может звучать несколько смешно для вас, но сперва мы применяем этот подход к проекту «на бумаге», а затем убираем ненужные части или подбираем наиболее подходящий для данной части подход. В конце у нас выходит хорошо оптимизированный процесс, настроенный под конкретный проект, с сохранением основных рабочих особенностей «материнского» процесса. Таким образом, все члены нашей команды, могут быстро включаться в работу, и не будут сбитыми с толку разными подходами для разных проектов, так как основой служит «материнский» подход.
Вот так выглядит «материнский» подход.

Это пример урезанной версии рабочего процесса для низкополигонального персонажа с вручную отрисованной текстурой.

Ниже вы можете увидеть «завершённую» версию, которую я использовал для проекта Экспария, с стилизованными PBR персонажами, что потребовало высокополигонального скульптинга и запекания (Overwatch неплохой пример схожего подхода).

Инсрументы и Софт

Мы в Thunder Cloud, используем различные инструменты для отдельных этапов работы, Maya как главный инструмент для моделлинга, Zbrush для скульптинга, xNormal для запекания, Substance Painter для PBR маскирования и даже такие редкие вещи как BodyPaint 3D для текстурирования, Crazybump для конверсии карт и несколько внутренних разработок Thunder Cloud, которые я сам написал, для помощи в создании персонажей. Как вы уже, может быть, знаете это инструмент для создания волос GMH2, это моё творение и я использую его, чтобы конвертировать базовый меш волос в hair cards и текстуры для Экспарии. Больше информации об GMH2 вы можете найти здесь.

WIP модели волос используя GMH2.6

Есть ещё множество внутренних инструментов, которые я сам написал, для помощи в продакшне этого проекта:

Менеджер для запекания, для того чтобы ускорить процесс запекания от high poly к low poly и сделать его менее напряжённым. Он помогает делать исключительно качественное запекание, авторазделение меша для ID запекания, cage auto generation и т.д. Я также пытаюсь объединить его с xNormal для batch baking.

Экспорт Менеджер: небольшой скрипт, который помогает очень быстро экспортировать персонажа и его материалы. Он также позволяет мне быстро и плавно переключаться между UE4 и Maya.

Арт Дирекшн и Продакшн

В этом конкретном проекте, моей целью было создание стилизованного 3Д PBR похожего на Overwatch, Blade & Soul и на некоторые 2Д картины отдельных художников, таких как: Mujiha, BdsPlace. Таким образом, я не особо заморачивался с детальным скульптингом, я скорее старался сделать всё аккуратным и чистым. Особое внимание я уделяю большим и средним деталям, таким как большие скосы и края, большие складки ткани, общая форма персонажей, такие важные характеристики как нос, глаза, губы и т.д.

Маленькие детали в скульптинге не будут так хорошо видны после обильного наложения текстур, их трудно изменять и работать с ними. Таким образом, на high poly скульпте я работаю только над средними и большими деталями, которые будут видны после запекания карт.

Для low poly модели, как для многих современных игр сегодня, я планирую потратить на главного персонажа около 50к треугольников и 40-60 треугольников на волосы, так что у меня достаточно полигонов для своей low poly модели. Я делаю каждый объект отдельным мешем, чтобы было легче запекать их и само собой все они будут использоваться после этого в синематике. Поэтому они не должны быть слишком низкополигональными, но при этом полигонов должно быть достаточно для плавной работы в UE4.
Рисованные текстуры играют важную роль в моём проекте, они оказывают сильное влияние на внешний вид и ощущение от модели. Обычно я не рисую текстуры с нуля. Я запекаю серию карт из Xnormal, затем комбинирую и накладываю фильтры на эти карты в Photoshop, чтобы быстро создать base map, которая будет представлять финальный результат, близкий к тому, что я хочу получить.

Таким образом, я могу легко и быстро видеть предварительный результат и контролировать финальный итог работы текстуры. Я называю эту базовую текстуру Процедурной картой, так как она полностью создана в Photoshop при использовании фильтров и масок, без какого-бы то ни было рисования. Как только я доволен внешним видом, цветом и общей формой/объёмом передаваемыми моей Процедурной картой, я начинаю создавать, на её основе, новую текстуру в BodyPaint. Причина по которой я выбрал Bodypaint состоит в том, что при небольшой настройке интерфейса и хоткеев, он становится очень похожим на Photoshop, поэтому я чувствую себя в нём очень комфортно, можно очень легко переключаться между ним и Photoshop, когда я работаю над одним и тем же PSD файлом.
С точки зрения работы над стилизованным персонажем, диффузная текстура для меня является наиболее важной картой, чем остальные. После того как я получил хорошую диффузную текстуру для модели, я сразу кидаю модель в UE4 для дальнейшей проработки. В UE4 я устанавливаю окружение, настраиваю освещение и HDRI для устранения различных недостатков и делаю превью остальных карт, таких как roughness, specular, normal.

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

Материалы

Если честно, то работать в UE4 я начал совсем недавно, так что мне ещё есть чему поучиться. Я не делаю сверхсложных функций материалов и не пишу свои собственные кастомные шейдерные ноды, так как я по большей части гуманитарий. Поэтому, я работаю с базовыми нодами и графами в UE4.
Я начинаю с базового материала в UE4, он лучше всего подходит к желаемому материалу кожи. Я начинаю с Subsurface шейдера, затем работая от него, смотрю на свою 2Д картинку и вижу какие элементы отсутствуют, и пытаюсь найти способ передать их в UE4. Вот пошаговый процесс:

  • Базовый материал (SubSurface шейдер) с базовыми параметрами как основа.

Диффузный цвет

  • Включает Базовую Текстуру.
  • Добавил fresnel mask с затемнённой текстурой кожи, чтобы контролировать эффект градиента от силуэта, подобный тому как 2Д иллюстраторы накладывают свой шейдинг (Street Fighter был для меня примером этого в 3Д)

Этот эффект можно изменять используя strength и falloff для разного результата.

Подповерхностный цвет (Subsurface Color)

Применяю Multiply к diffuse texture и зелёному цвету и подключаю к Subsurface Color слоту, чтобы увидеть эффект подповерхностного рассеивания.

Создаю Fresnel mask чтобы объединить 2 подповерхностных цвета вместе, чтобы передать нежный цвет переходящего градиента шейдинга который, есть в рисунке.

Я создаю отдельную функцию материала (material function) fresnel mask, которая будет контролировать положение и силу градиента. Эта функция также позволит мне добавить немного шума к обычной fresnel mask, чтобы получить более органичный вид кожи. Ниже вы можете более детально взглянуть на градиентную функцию:

Использую различные значения strengths, falloff и дополнительно смешанные текстуры наподобие вен и пор, для более органичного вида. Разные комбинации могут дать разный вид и потенциально могут применяться к другим вещам кроме шейдера кожи.

Roughness/ Specular & Custom Reflection

Некоторые отражения/сильно освещённые области в 2Д работе имеют множество сильных и маленьких бликов, почти как материал автомобильной краски, поэтому я добавил несколько noise map микродетализации поверх своих базовых roughness / specular map /normal map в режиме наложения overlay с micro grunge текстурой, чтобы добавить небольшие детали в отражения, при близком виде.

Однако мне требуется больше освещённых точек в области отражения. Я нашёл положение, которое контролирует точки отражения/бликов без сильного смешения с освещением самой сцены.
Этот момент был несколько хитрым, я установил этот граф для Reflection Vector из UE4. Подключив его к входу UV Texture sample ноды, я получил что-то типа сферической текстуры отражения от окружения (environment reflection).

Однако я сделал несколько тестов и обнаружил, что необходима Cube map как образец текстуры для ноды, чтобы она корректно работала. Процесс конвертирования 2Д изображения из Photoshop в Cube map достаточно простой, но остаётся ручной работой, которая занимает много времени, особенно если приходится часто переключаться туда-сюда, чтобы протестировать результат. Поэтому я использую длинную плоскую 2Д текстуру environment reflection из Photoshop и применяю её, к неосвещённой сфере, затем размещаю render target cube внутрь сферы, чтобы создать cube map изнутри сферы. Сделав так, я могу улучшать свою карту отражений в Photoshop, переимпортировать и обновлять свою cube map в UE4 постоянно. Режим наложения Screen смешает эту карту отражений с цветной текстурой (color texture) вместе fresnel mask, чтобы получить на выходе приличное custom reflection смешанное с нашей цветной текстурой.

Я также сделал custom material function чтобы контролировать некоторые параметры reflection map, такие как сила освещённой области, базовое значение отражения, Френелевское затухание (fresnel falloff), specular map и т.д.

Это общие настройки шейдера кожи, я ещё не тестировал их вне этого проекта, но я вполне доволен получившимся результатом и тем, что я могу сохранить 2Д/рисованный вид и иметь возможность сохранить освещение или даже добавить дополнительный слой детализации к нему, как например, отражение и подповерхностный цвет. Этого всего вполне достаточно для шейдера кожи, позже я поговорю, о настройках для глаз которые более сложные, но основаны они на тех же принципах.

Цель и Ограничения

Моей главной целью было создание 3Д анимации для синематика, который бы выглядел как 2Д рисунок. Так что этой частью проекта, было достижение моих пределов в том, что может быть визуально достигнуто в UE4. Таким образом, до тех пор, пока результат выглядит достаточно хорошим для определённых условий (различное освещение, угол обзора и дистанция), я не против того, чтобы полностью его имитировать.
Например, подповерхностный градиент (subsurface gradient) Fresnel Ramp, был бы гораздо более аккуратным, если бы он основывался на направлении света, как при настоящем подповерхностном рассеивании, но так как этот эффект очень слабый, я могу обойтись простым fresnel gradient. Это может не работать для персонажей при сильном освещении. Подповерхностный цвет затухает в зависимости от направления света, а не угла обзора. Но в моём случае, можно обойтись и этим допущением.
Всякий раз, когда я добавляю слой с деталями к своему шейдеру, я вынужден тестировать как он выглядит и ведёт себя при разном освещении и углах обзора. Иногда результат выглядит очень неплохо, если изображение статично и вид спереди, но иногда выглядит очень странно при виде сбоку, словно размывается. Поэтому я должен найти баланс между тем, что выглядит круто и круто работает, либо мне придется найти новый способ создать этот эффект.

Структура

Некоторые методы/настройки могут быть не достаточно точны, но у меня уже есть все необходимые элементы, чтобы получить нужный мне результат, так что я всегда могу вернуться, чтобы что-нибудь подправить. Например, в будущем, если я смогу найти лучший способ для создания custom reflection map или subsurface gradient, то я могу просто обновить Material functions, которые уже отсортированы и сохранены в моей собственной библиотеке, которая всегда готова для использования и обновлений.

Баланс

Важно, что после того как я закончил добавлять все эти разные детали в шейдеры, я останавливаюсь и оцениваю, не ушёл ли я слишком далеко от изначальной цели, так как этот проект я хочу оставить близким к стилизованному 2Д рисунку. Поэтому если я слишком увлекусь, то могу получить либо неестественный вид, либо уйду слишком далеко от желаемого мной стиля.
Например, слишком сильное увлечение normal / bumpy поверхности кожи, может привести к слишком 3Д-шному виду.

Элементы Лица

В своих старых проектах, я закидывал свои рисованные текстуры в UE4, добавлял немного света и всё. Изображение не выглядело правильным, несмотря на то, что текстуры могли неплохо смотреться на элементах без освещения и получать свой собственный стиль лишь от одной color texture. Но когда в дело включался свет, то сразу появлялись проблемы, так как не только color texture воздействует на модель. Существуют тени, блики и отражения в сцене, вы потеряете детали, нарисованные на текстуре, и color texture будет выглядеть как нарисованная.

Эта Дива один из моих старых проектов, когда я ещё не особо разбирался в UE4, так что всё здесь с базовыми настройками. Поэтому в проекте Экспария, я уделил особое внимание тому, чтобы свет/тени/отражения корректно вели себя на модели. Особенно на лице. Я уделил особое внимание элементам лица, таким как глаза, нос и губы. Я мог потратить целый день на подготовку текстуры, редактирование модели, настройку шейдера капля за каплей, для того чтобы получить нужный мне вид.
В моём рабочем процессе от начала и до конца, всё достаточно прямолинейно, исключая момент доводки до идеала. Время, которое мне требуется, чтобы довести до идеала может быть таким же как все предыдущие этапы вместе взятые, но это того стоит. Не существует прямого решения, чтобы получить желаемый эффект сразу, иногда я должен возвращаться к моделированию новой части, менять структуру модели или всю её часть целиком, чтобы заставить всё работать вместе с созданным мною шейдером.

Глаза

Сначала я сделал единый глаз (без отдельных глазных яблок), но потом я разбил его на разные части, чтобы иметь больше контроля над отдельными элементами глаза, такими как отражение, блики, поворот глазного яблока и т.д.

Ниже граф для шейдеров глаза:

Ресницы

В самом начале, ресницы были просто нарисованы на текстуре лица, но позже я, выделил их отдельный лист меша. Для финального результата, я продублировал меш ресниц, чтобы добавить им объёма. Я старался использовать шейдер полупрозрачности (translucency shader), как можно больше, потому что его AA alpha mask, гораздо лучше, чем у Masked shader type. Единственный минус в приоритете сортировки, но так как глаз это аккуратная вогнутая форма, я могу обойтись без сортировки в этом случае. Другой альтернативой может быть использование Dither Opacity Mask шейдера, который также даёт хороший AA результат, но не достаточно хорош для тонких моделей или полупрозрачных и подвижных поверхностей.

Губы

Здесь нет микродеталей, как вы можете видеть я отскульптил большую часть деталей губ в Zbrush и я не собирался заходить слишком далеко в плане детализированного скульптинга. Я чувствую себя более комфортно, добавляя детали позже в Photoshop, нежели в Zbrush, потому что так у меня больше свободы и скорости, попробовать различные типы деталей и увидеть, то, как они работают. То же самое касается пор кожи и деталей - я предпочитаю добавлять эти детали на текстуру, нежели делать их во время скульптинга.

На заметку, иногда я вынужден анимировать некоторые из элементов как отдельную часть и отрендерить его при суперприближении, чтобы увидеть что все детали смогут пережить изменения при анимации/деформации и освещении/изменении угла обзора, как например, при анимации губ, открытии/закрытии глаз и т.д. Анимация и деформирование в UE4 достаточно простое дело, я лишь готовлю серию blend shapes мешей. Почему blend shapes? Потому что их быстрее тестировать и легче контролировать деформацию, чем при joint skinning анимации. Затем анимирую blend shape в Maya, экспортирую всю секвенцию в UE4 и делаю быстрый рендер.

Рендеринг

Для «Экспарии» я не сдерживался в плане настроек, потому что вся сцена будет использоваться для создания небольшого синематика, который может быть отрендерен в фильм, используя UE4 level sequencer. Качество сцены можно снизить, если я захочу запустить её как реал-тайм демо с пониженной частотой кадров. Я использовал по-максимуму почти каждую настройку рендера в UE4, потому что не хочу, чтобы меня что-нибудь задерживало при разработке визуального образа. Оптимизация будет потом. Ниже некоторые хитрости, чтобы улучшить настройки рендера в UE4:

Я отключил pre-computed lighting, так что всё время я буду работать в realtime dynamic lighting, у меня нет времени ждать пока будет, просчитан и выстроен свет.

Так как я работаю только на refining & ldev atm, я стараюсь сохранять освещение простым насколько это возможно, используя BP_lightStudio blueprint asset в стартовом наборе как базовую сцену, поэтому у меня один направленный источник света, свет от неба и HDRI купол для начала, без всяких spot light, или area point lights и т.д. Всё для того, чтобы избежать любых неточностей и недопониманий, когда позже начнутся проблемы с тенями и отражениями.

Джунг Фунг Динь, Основатель - Thunder Cloud Studio

Интервью взял Кирилл Токарев

Оригинал статьи

Переведено с согласия сайта 80.lv

80lvl Facebook

80lvl Twitter

754 0 850 17
0
RENDER.RU