Волосы персонажей в движке и подключение простой физики
Original size 1140x1600

Волосы персонажей в движке и подключение простой физики

PROTECT STATUS: not protected

Далее приступаем к работе с игровым движком. Создаём проект, внутри которого будут два уровня: в одном будут производиться тесты грума, а в другом — тесты real-time волос.

Для удобства презентации поставим в сцене циклораму с освещением.

big
Original size 1489x1025

Окно управления проектами UE 5

big
Original size 1880x700

Content Browser UE 5

big
Original size 1920x1026

Сцена с персонажем и циклорамой

Чтобы осуществить импорт грума, подключаем плагины Groom и Alembic Groom Importer. Волосы приходят в проект отдельно от персонажа, и их можно подогнать во вьюпорте по координатам. Пока что на них нет материала.

Original size 1920x1027

Подключение плагинов

Original size 1920x1025

Подключение плагинов

Original size 1920x1025

Грум во вьюпорте Unreal Engine

Если зайти в настройки ассета (в Content Browser ассет волос обозначается как грум), то здесь можно поварьировать параметры, например, толщину кончика или корня волос. Тут же сталкиваемся с первой проблемой: волосы проросли насквозь головы, и это портит эстетику, хотя в Maya маска роста волос была сделана правильно и сохранена на диск, а гайды не проходили через меш. В дальнейшем можно попытаться поискать решение такого вопроса.

Original size 1920x1025

Настройки ассета грума

Original size 1920x1025

Волосы, проросшие насквозь

Original size 1920x1027

Волосы, проросшие насквозь

Следующей проблемой стал выбор способа соединения меша персонажа и грума, ведь они пришли в проект по отдельности. Для этого был создан блюпринт, в который добавлен скелетный меш бота и грум. Отельно был создан HeadSocket на кость, которая вращает голову. HeadSocket — это кластер, к которому был привязан грум. Далее внутри блюпринта можно подвинуть прическу так, чтобы она точно прилегала к голове, а в настройках физического ассета тела бота настроить капсулы физики (которые определяют зону коллизии). Теперь волосы двигаются синхронно с костью головы.

Original size 1920x1025

Создание Head Socket на джоинте

Original size 1920x1027

Причёска и меш внутри блюпринта

Остаётся добавить симуляцию. В настройках грума есть пункт Enable Simulation. Здесь нужно поставить галочку. Чтобы проверить, насколько правильно она работает, возвращаемся в блюпринт персонажа и видим, что амплитуда слишком большая. Далее эта проблема решается долгим подбором значений в параметрах симуляции, а чтобы волосы не пересекали меш головы, нужно грамотно поставить коллизию. С первого раза сделать такое очень трудно. Но уже заметно, что симуляция работает, а значит, можно сделать её физически корректной.

Original size 1920x1030

Подключение симуляции к груму

Original size 1920x1028

Изменение размеров капсул коллизии

Original size 1920x1028

Чрезмерно высокая амплитуда симуляции

Original size 1920x1028

Добавление персонажа в секвенсер для записи анимации

Original size 3840x1600

Пример физики грума внутри Maya XGen. «Холодное сердце 2», 2019, Disney.

Модуль MetaHuman для UE5 позволяет создавать цифровых аватаров для внедрения в движок. Волосы MetaHuman представляют собой чистый грум, поддерживаемый плагином Groom. Следовательно, движок в принципе способен выдерживать нагрузку от грума, но метахьюман слишком тяжёл для геймдева.

Original size 1200x600

Модели из MetaHuman

С плашками ситуация выглядит ещё интереснее. Их нужно импортировать в движок как скелетный меш. Для этого пришлось достроить дополнительные джоинты от головы и прискинить их к мешу плашек.

Original size 1920x1028

Экспорт частей персонажа из Maya в формате .fbx

Original size 1920x1030

Работа над скином в Blender

Original size 1920x1030

Работа над скином в Blender

Original size 1920x1029

Работа над скином в Blender

Original size 1920x1029

Работа над скином в Blender

Original size 1920x1030

После распределения весов в скине меш причёски движется вместе с костью головы

Original size 1920x1030

Дополнительные джоинты влияют на отдельные пряди

На этом этапе возникла новая сложность — движок не захотел принимать риг, полученный при экспорте из блендера. Это объясняется только нестабильностью работы функций движка, и после нескольких попыток рескейла Unreal загрузил модель.

Original size 1920x1028

Подбор значений для рексейла в Blender

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

Original size 1920x1027

Персонаж и скелетный меш плашек внутри блюпринта

Original size 1920x1028

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

Original size 1920x1027

Преобразование причёски в физический меш

Original size 1920x1028

Преобразование причёски в физический меш

Original size 1920x1029

Добавление новой капсулы к джоинтам на причёске

Original size 1920x1027

Выбор типа физики: Kinematic

Original size 1920x1027

Такой размер капсул слишком большой для волос на картах

Original size 1920x1027

Оптимальный размер капсул

Original size 1920x1025

Привязка констрэйнтов к капсулам

Original size 1920x1027

Привязка констрэйнтов к капсулам

Original size 1920x1027

Добавление физики твёрдых тел к физическому ассету причёски

Original size 1920x1027

Добавление физики твёрдых тел к физическому ассету причёски

Original size 1920x1027

Добавление физики твёрдых тел к физическому ассету причёски

Физика твёрдых тел показалась более податливой и аккуратной, чем симуляция внутри грума. Здесь был подобран кинетический тип физики. Дополнительно к нему можно подключить cloth-симуляцию. Они могут работать как отдельно, так и вместе. Всё зависит от задачи и от предпочтений заказчика/специалиста. Что не очень импонировало — так это то, что отключать ту или иную симуляцию нужно внутри нодовой системы, а не имея опыта, в ней бывает проблематично ориентироваться. Но тем не менее результат того стоил: плашки движутся очень аккуратно и создают впечатление волос

Original size 3200x1800

Cloth-симуляция используется для написания физики одежды. «Mortal Kombat 11» собран на движке Unreal Engine 3. 2019, WB Games

Original size 1920x1027

Создание cloth-симуляции для скелетного меша причёски

Original size 1920x1027

Создание cloth-симуляции для скелетного меша причёски

Original size 1920x1027

Окно редактора cloth-симуляции

Original size 1920x1025

Активация cloth-симуляции

Original size 1920x1027

Распределение влияния cloth-симуляции на меше происходит по аналогии с развесовкой скина на риге

Original size 1920x1027

Процесс скининга меша

Original size 1920x1027

Рабочая cloth-симуляция. Пряди устремились вниз под действием физики

Original size 1920x1027

На основе полученных ранее карт текстур строится шейдер волос. Полигональные полоски становятся невидимыми из-за действия маски прозрачности

Следующий эксперимент — измерение нагрузки на движок. Один из способов проверки — включение отображения fps, где программа подсчитает в том числе задержку отрисовки.

Измерения следует проводить при прочих равных условиях.

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

В среднем разница задержки между грумом и картами волос составила 3 fps с одинаковых камер в пустой сцене с циклорамой и пятью источниками света.

Original size 1920x1030

Проведение измерений нагрузки на движок в различных условиях

Original size 1920x1027

Проведение измерений нагрузки на движок в различных условиях

Original size 1920x1027

Проведение измерений нагрузки на движок в различных условиях

Original size 1920x1030

Подключение анимации в анимационный блюпринт для тестов рендера. Записанная на конкретный скелет анимация добавляется в нодовый редактор через Drag-and-Drop и соединяется с компонентом

Original size 1920x1080

Статичные карты волос на рендере

Original size 1920x1080

Колебания карт под действием физики

Original size 1920x1080

Симуляция внутри грума более чувствительная и трудная в управлении

Loading...
Волосы персонажей в движке и подключение простой физики
Chapter:
3
4
5
6
7
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