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

XBot в Autodesk Maya

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

Скульпт референса причёски
Скульпт референса причёски
Импортим причёску в файл к персонажу, для удобства работы добавляем её в другой слой, чтобы можно было отключать видимость ассета во вьюпорте и возможность его выделения.
Один из вариантов работы — создание волос по референсу. Отдельно рисуется квадратная текстура с наброском прядей разного характера: плотных длинных прядей, редких длинных прядей, отдельных волосков, пушковых волос, коротких или кудрявых (в зависимости от задачи). В Maya создаётся квадратная плашка без сабдивов, и на неё назначается текстура референса. Потом отдельно создаются маленькие плашки, которые будут служить базой для волос (как скальп в пайплайне классического XGen).
На каждую микро-плашку создаётся своё описание. Одна прядь — это одно описание, но все эти описания входят в одну коллекцию.
Для удобства работы желательно соблюдать нейминг дескрипций. Например, такой: a_thick, b_thick, c_middle и так далее.
Плашка с референсами
Отправка референса в слой
Перед созданием дескрипций для каждой пряди создаётся меш привязки
Создание дескрипций для отдельных прядей. Выделение меша привязки
Создание дескрипций для отдельных прядей
Следующая часть работы выполняется по пайплайну стандартного XGen, с теми различиями, что здесь уже не нужно серьёзно «причёсывать» гайды и можно добавлять любое количество контрольных точек: получившиеся в результате волосы пригодятся только для рендера под текстуры.
Важно понимать, что на данном этапе создаётся по сути, модульный пак текстур под карты. Они будут повторяться, следовательно здесь нельзя добавлять выразительные детали. В этом заключается одно из главных визуальных отличий плашек от грума: плашки больше относятся к generic-явлениям, в то время как с помощью грума можно делать более оригинальные вещи. Или же для создания максимально детальной причёски на плашках просто делается дополнительный сет текстур, то есть и материалов в движке тоже станет больше.
Подбор модификаторов для прядей
Подбор модификаторов для прядей
Подбор модификаторов для прядей
Подбор модификаторов для прядей
Подбор модификаторов для прядей
Подбор модификаторов для прядей
Готовые пряди во вьюпорте
Далее нужно настроить свет в сцене, поставить камеру в ортогональной плоскости, увеличить количество сэмплов в Arnold и настроить разрешение рендера так, чтобы на выходе получилась квадратная текстура.
Как уже упоминалось в предыдущем разделе, не существует универсального рецепта работы с текстурами. Их можно запечь в любом софте, который это позволяет. Количество текстур зависит от целей и от желаемого уровня проработанности.
Наложение материала волос на пряди
Наложение материала Ambient Occlusion на пряди
В настройках шейдера Maya XGen можно отрегулировать процент меланина в волосах. Его можно настроить рандомным, а можно сделать седой целую прядь отдельной дескрипции. «Храбрая сердцем», 2012, Pixar
Редактор материалов Hypershade
Настройка сцены для рендеринга
В рамках исследования были сгенерированы карты текстур:
1. Диффуз, или albedo — базовый цвет.
Для него внутри Maya был создан материал волос из пресета, и волосы были отрендерены на прозрачном фоне с HDRI-картой, подключённой к источнику света.
2. Альфа — карта для создания прозрачной маски.
Сложный путь: отрендерить в формате .tga по принципу диффуза, но с записью альфа-канала, который извлекается из файла в Photoshop. Простой путь: отрендерить диффуз с записью альфа-канала и подключить его через ноды в Opacity Mask.
3. Ambient Occlusion — информация о распределении света и тени.
Была отрендерена с пресетом материала ao из Arnold.
4. Depth map — глубина пикселя.
Отрендерена с материалом Ambient Occlusion, с настройкой Z в Arnold и с дополнительными настройками gamma/explosure. Контрастность увеличена в Photoshop.
Карты текстур
1. Normal map, или карта нормалей — содержит информацию о неровностях.
Отрендерена с материалом-утилитой с пресетом Normal. В Maya цвет карты нормалей зависит от оси, в сторону которой развёрнут меш. Если плашка лежит горизонтально, и фронтальная плоскость для неё в ортогональной камере обозначается как top, Maya окрашивает карту в зелёный.
2. ID — информация о точках.
Отрендерена с материалом-утилитой с пресетом ID. Отредактирована в Photoshop.
3. Specular — информация о распределении света.
Получен из карты нормалей с наложением шума.
4. Root — отделяет корни волос.
Отрендерена с материалом aiFlat c градиентом от корней к кончикам.
Распределение цвета нормалей в Maya OpenGL
Карты текстур
Рендеринг диффузного цвета в плагине Maya Arnold
Далее создаём плашку в Maya и наносим на неё материал с текстурой диффуза. Плашка режется на полигональные полоски, и они используются как атлас, откуда их можно копировать и добавлять прямо на голову персонажа (делать дополнительный меш скальпа здесь не нужно).
Сложность данного пайплайна заключается как раз в правильной постановке плашек, и их количество вполне может достигать сотни, потому что важно перекрыть голову, чтобы не просвечивала кожа. Наблюдение, полученное в ходе работы: для первого слоя нужно генерировать максимально плотные текстуры волос на этапе XGen, когда только разрабатываются процедурные пряди.
Референсный ассет причёски из ZBrush на болванке персонажа
Крепление полигональных полосок
При близком рассмотрении изогнутые низкополигональные плашки или плашки с менее плотной текстурой очень заметны. «Heavy Rain», 2010, Quantic Dream.
В играх двадцатилетней давности вместо карт волос использовалась другая технология. Текстура волос накладывалась на причёску-меш, но от этого ухудшалась эстетическая сторона. «Star Wars: KOTOR»
Вторая трудность — изогнуть плашки так, чтобы они почти не пересекали друг друга, создавали нужный объём и при этом своими корнями плотно прилегали к голове. Кто-то использует для этой цели деформеры из Maya (методы, позволяющие искривлять меш). Но так как для теста были выбраны обычные длинные волосы, деформеры мало помогли, и пришлось двигать плашки по точкам, включив мягкое выделение. Ещё на этом этапе стоит следить за пивотом модели. На каждой плашке он должен стоять у корня, так как волосы вращаются относительно него.
Крепление полигональных полосок
Третья трудность заключалась в том, что текстура на плашке тянулась, а потянутая текстура — это первый признак, внешне выдающий плашки. Но от этого избавиться не удалось. Функция сохранения UV-развёрток показывала близлежащие на квадрате текстуры, как только плашку увеличивали по точкам. Вероятное решение проблемы — изначально сделать большее количество полигонов на полоске, куда будет назначена текстура.
Так появилось предположение: насколько сильно полигонаж плашек может утяжелять движок? Это будет проверено на этапе измерений.
Другой вопрос — это насколько хорошо будут выглядеть волосы после построения шейдера в движке?
К сожалению, при выводе превью рендера, Maya не покажет прозрачность фона плашек просто так, для этого нужно настроить альфа-канал. Но во вьюпорте причёска выглядит очень пушистой. Результат превзошёл ожидания.
Карты волос во вьюпорте Autodesk Maya
Карты волос во вьюпорте Autodesk Maya
Карты волос во вьюпорте Autodesk Maya