Пайплайн создания волос для real-time движков
Original size 1140x1600

Пайплайн создания волос для real-time движков

PROTECT STATUS: not protected

В данном разделе будет кратко описан пайплайн создания волос на плашках под Unreal Engine. Имитация волос с помощью карт (Hair Cards) распространена в геймдеве, потому что она требует меньше вычислительных мощностей по сравнению с грумом, ведь в последнем нужно рассчитывать параметры для каждого волоса. Важно понимать, что существует масса вариантов создания и симуляции волос, но так как данное исследование сконцентрировано на инструменте Maya XGen, он же будет использоваться и для генерации текстур волос под плашки. В Майю также импортится бот с Mixamo, и дополнительно он импортится в программу для скульптинга ZBrush. Многие специалисты рекомендуют в начале работы с плашками заскульптить предполагаемую форму причёски. Сделаем ассет каре в ZBrush, чёлка будет опциональной.

big
Original size 1920x1027

XBot в Autodesk Maya

big
Original size 1920x1080

Импорт болванки в ZBrush

big
Original size 1920x1080

Скульпт референса причёски

Original size 1920x1080

Скульпт референса причёски

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

Один из вариантов работы — создание волос по референсу. Отдельно рисуется квадратная текстура с наброском прядей разного характера: плотных длинных прядей, редких длинных прядей, отдельных волосков, пушковых волос, коротких или кудрявых (в зависимости от задачи). В Maya создаётся квадратная плашка без сабдивов, и на неё назначается текстура референса. Потом отдельно создаются маленькие плашки, которые будут служить базой для волос (как скальп в пайплайне классического XGen).

На каждую микро-плашку создаётся своё описание. Одна прядь — это одно описание, но все эти описания входят в одну коллекцию.

Для удобства работы желательно соблюдать нейминг дескрипций. Например, такой: a_thick, b_thick, c_middle и так далее.

Original size 1920x1027

Плашка с референсами

Original size 1920x1027

Отправка референса в слой

Original size 1920x1027

Перед созданием дескрипций для каждой пряди создаётся меш привязки

Original size 1920x1025

Создание дескрипций для отдельных прядей. Выделение меша привязки

Original size 1920x1028

Создание дескрипций для отдельных прядей

Следующая часть работы выполняется по пайплайну стандартного XGen, с теми различиями, что здесь уже не нужно серьёзно «причёсывать» гайды и можно добавлять любое количество контрольных точек: получившиеся в результате волосы пригодятся только для рендера под текстуры.

Важно понимать, что на данном этапе создаётся по сути, модульный пак текстур под карты. Они будут повторяться, следовательно здесь нельзя добавлять выразительные детали. В этом заключается одно из главных визуальных отличий плашек от грума: плашки больше относятся к generic-явлениям, в то время как с помощью грума можно делать более оригинальные вещи. Или же для создания максимально детальной причёски на плашках просто делается дополнительный сет текстур, то есть и материалов в движке тоже станет больше.

Original size 1920x1028

Подбор модификаторов для прядей

Original size 1920x1027

Подбор модификаторов для прядей

Original size 1920x1027

Подбор модификаторов для прядей

Original size 1920x1028

Подбор модификаторов для прядей

Original size 1920x1027

Подбор модификаторов для прядей

Original size 1920x1028

Подбор модификаторов для прядей

Original size 1032x685

Готовые пряди во вьюпорте

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

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

Original size 1920x1030

Наложение материала волос на пряди

Original size 1920x1030

Наложение материала Ambient Occlusion на пряди

Original size 3840x1632

В настройках шейдера Maya XGen можно отрегулировать процент меланина в волосах. Его можно настроить рандомным, а можно сделать седой целую прядь отдельной дескрипции. «Храбрая сердцем», 2012, Pixar

Original size 1920x1027

Редактор материалов Hypershade

Original size 1920x1030

Настройка сцены для рендеринга

В рамках исследования были сгенерированы карты текстур:

1. Диффуз, или albedo — базовый цвет.

Для него внутри Maya был создан материал волос из пресета, и волосы были отрендерены на прозрачном фоне с HDRI-картой, подключённой к источнику света.

2. Альфа — карта для создания прозрачной маски.

Сложный путь: отрендерить в формате .tga по принципу диффуза, но с записью альфа-канала, который извлекается из файла в Photoshop. Простой путь: отрендерить диффуз с записью альфа-канала и подключить его через ноды в Opacity Mask.

3. Ambient Occlusion — информация о распределении света и тени.

Была отрендерена с пресетом материала ao из Arnold.

4. Depth map — глубина пикселя.

Отрендерена с материалом Ambient Occlusion, с настройкой Z в Arnold и с дополнительными настройками gamma/explosure. Контрастность увеличена в Photoshop.

Original size 3500x2480

Карты текстур

1. Normal map, или карта нормалей — содержит информацию о неровностях.

Отрендерена с материалом-утилитой с пресетом Normal. В Maya цвет карты нормалей зависит от оси, в сторону которой развёрнут меш. Если плашка лежит горизонтально, и фронтальная плоскость для неё в ортогональной камере обозначается как top, Maya окрашивает карту в зелёный.

2. ID — информация о точках.

Отрендерена с материалом-утилитой с пресетом ID. Отредактирована в Photoshop.

3. Specular — информация о распределении света.

Получен из карты нормалей с наложением шума.

4. Root — отделяет корни волос.

Отрендерена с материалом aiFlat c градиентом от корней к кончикам.

Original size 1920x1027

Распределение цвета нормалей в Maya OpenGL

Original size 3500x2480

Карты текстур

Original size 1920x1028

Рендеринг диффузного цвета в плагине Maya Arnold

Далее создаём плашку в Maya и наносим на неё материал с текстурой диффуза. Плашка режется на полигональные полоски, и они используются как атлас, откуда их можно копировать и добавлять прямо на голову персонажа (делать дополнительный меш скальпа здесь не нужно).

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

Original size 1920x1027

Референсный ассет причёски из ZBrush на болванке персонажа

Original size 1920x1030

Крепление полигональных полосок

Original size 1280x719

При близком рассмотрении изогнутые низкополигональные плашки или плашки с менее плотной текстурой очень заметны. «Heavy Rain», 2010, Quantic Dream.

Original size 1300x650

В играх двадцатилетней давности вместо карт волос использовалась другая технология. Текстура волос накладывалась на причёску-меш, но от этого ухудшалась эстетическая сторона. «Star Wars: KOTOR»

Вторая трудность — изогнуть плашки так, чтобы они почти не пересекали друг друга, создавали нужный объём и при этом своими корнями плотно прилегали к голове. Кто-то использует для этой цели деформеры из Maya (методы, позволяющие искривлять меш). Но так как для теста были выбраны обычные длинные волосы, деформеры мало помогли, и пришлось двигать плашки по точкам, включив мягкое выделение. Ещё на этом этапе стоит следить за пивотом модели. На каждой плашке он должен стоять у корня, так как волосы вращаются относительно него.

Original size 1920x1027

Крепление полигональных полосок

Третья трудность заключалась в том, что текстура на плашке тянулась, а потянутая текстура — это первый признак, внешне выдающий плашки. Но от этого избавиться не удалось. Функция сохранения UV-развёрток показывала близлежащие на квадрате текстуры, как только плашку увеличивали по точкам. Вероятное решение проблемы — изначально сделать большее количество полигонов на полоске, куда будет назначена текстура.

Так появилось предположение: насколько сильно полигонаж плашек может утяжелять движок? Это будет проверено на этапе измерений.

Другой вопрос — это насколько хорошо будут выглядеть волосы после построения шейдера в движке?

К сожалению, при выводе превью рендера, Maya не покажет прозрачность фона плашек просто так, для этого нужно настроить альфа-канал. Но во вьюпорте причёска выглядит очень пушистой. Результат превзошёл ожидания.

Original size 1920x1029

Карты волос во вьюпорте Autodesk Maya

Original size 1920x1030

Карты волос во вьюпорте Autodesk Maya

Original size 1920x1027

Карты волос во вьюпорте Autodesk Maya

Пайплайн создания волос для real-time движков
Chapter:
2
3
4
5
6
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more