Стилизуем готовые модели под полигональный Low Poly в Maya + UE4

Рестайлинг
Рестайлинг

С чего все начиналось

Так как мы маленькая инди-студия, то нам интересно максимально сэкономить средств и получить при этом достойный результат. Мы разрабатываем на Unreal Engine, и, благодаря этому, нам доступно довольно много хороших бесплатных ассетов от Epic. Однако, поскольку визуал нашей игры основывается на сверхпопулярных паках Synty Studios в полигональном стиле, большинство прочих ассетов нам не подходят, если их не рестайлить.
В игре не хватало негуманойдных врагов, а среди пака Infinity Blade: Adversaries есть отличные паучки, медведь и волчара с мощными лапищами, у которых, в свою очередь, уже есть риг и анимации.

Начинаем начинать, полигонизация и текстурирование

Мы закинули пак в проект UE4, и сделали экспорт скелетал меша медведя в формате FBX. Создали новую сцену в Maya, сделали file - import и приступили к обработке.

Оригинальный медведь из пака
Оригинальный медведь из пака
Сглаженный импортированный медвед
Сглаженный импортированный медвед

Наша модель открылась, и в outliner мы видим, что модель состоит из самого объекта (меша) и костей (рига), помещенных в одну группу. Эта группа (Enemy_Bear) создается самим Unreal Engine в момент экспорта в FBX. Забегая вперед, скажу, что у очень многих начинающих разработчиков это вызывает проблему при импорте обратно в UE4, так как он воспринимает группу как кость, и ее просто обязательно надо удалять.

Статистика в правом верхнем углу подсказывает, что эта модель уже low poly (vertex 3306), однако совсем не полигональная.

Начинаем разбираться за счет чего в данной модели было достигнуто сглаживание. Первым делом включаем отображение soften/harden edges на нашей модели (display - polygons - hard edges (color)). Выделяем модель и видим, что сглаживание объекта происходит за счет смягчения ребер (мягкие ребра - синие, жесткие - фиолетовые).

Мягкие ребра - синие, жесткие - фиолетовые
Мягкие ребра - синие, жесткие - фиолетовые

При этом видно, что в модели имеются жесткие ребра “невпопад”, что вызывает артефакты отображения.

Видно артефакты из-за того, что некоторые жесткие ребра не сгладились
Видно артефакты из-за того, что некоторые жесткие ребра не сгладились

Начинаем “облегчать” нашу модель. Первым делом исправляем жесткость ребер - делаем их все жесткими. Выделяем объект, переходим в режим редактирования ребер (ПКМ - edges), далее выбираем все ребра, переходим в контекстное меню (shift + ПКМ) и выбираем пункт soften/harden - harden.

Одна кнопка - и моделька превращается в полигональную
Одна кнопка - и моделька превращается в полигональную

Наша модель уже стала похожа на полигональный low poly. Теперь необходимо её разукрасить. Экспортируем модель (выделяем объект, file - export selection через option box, выбираем fbx). Отправляемся красить модель в Substance painter, либо в Blender (мы сделали и так и так). Так как модель состоит из разных мешей объединенных через combine, покраска модели занимает не более 20 минут. Развертку можно автоматически создать в сабстансе, она получается довольно неплохая для однотонных покрасок. Не обращайте внимание на шейдер, в UE4 в итоге все будет немножко иначе выглядеть.

Медведь в Substance Painter за 20 минут
Медведь в Substance Painter за 20 минут
Медведь в Blender за час
Медведь в Blender за час

Модель выглядит как надо. Теперь нам необходимо забрать отсюда модель в формате fbx (здесь находится нужная нам uv развертка) и текстуру base color (file - export texture - base color).

Продолжаем продолжать, риггинг и развесовка

Возвращаемся в Maya. Необходимо сделать подмену модели на новую, которая с текстурой. Импортируем модель, полученную после текстурирования, удаляем старый меш, перетаскиваем в группу новый. По умолчанию текстуры в Maya не подтягиваются, их необходимо подключать отдельно, где-то смеется один Blender.

Теперь нам необходимо соединить меш медведя с его ригом (для дальнейшей работы с анимациями, которые уже были приложены к медведю в UE4). Переходим в режим работы rigging, включаем отображение костей поверх объекта.

Наш риг
Наш риг

Перед тем как соединить медведя с костями, ОБЯЗАТЕЛЬНО вытаскиваем всё из группы (при экспорте в fbx UE4 объединяет риг и меш в группу (Enemy_Bear), а при импорте он считает группу костью, что полностью ломает всю логику работы). Немного подредактируем риг: раскрываем root кость, в ней лежат все кости нашего мишки в кости body, вытаскиваем body из root, сам root удаляем, затем body и сам меш объединяем в группу, которую и называем root (этот танец с бубном даст нужную иерархию).

Медведя немного развернуло (на изначальной группе стоял rotate, это фишка UE4), но это поправимо, - разблокируем редактирование трансформаций и применяем медведь rotate по Х на -90.

У нас получилась правильная иерархия root-body  и так далее до когтей на лапах
У нас получилась правильная иерархия root-body  и так далее до когтей на лапах

Пришло время соединять меш с костями. Выделяем body и Enemy_Bear1 - skin - bind skin (настройки по умолчанию). Кости рига стали разноцветными, значит все прошло хорошо и теперь при повороте костей за ними двигается и сам медведь.

Потягушки
Потягушки

Проблемы готовых моделей на финише

Снова экспортируем нашего мишку, но уже просто выделяя группу root (file - export selection через option box, формат fbx). Импортируем модель в UE4, и видим как нашего медведя начало пучить, будто он бахнув пельменiв, хвост свернулся калачиком, а левое полужопие стало как у Ники Минаж. Важный момент, что это происходит ТОЛЬКО во время некоторых анимаций.

Бахнув пельменiв
Бахнув пельменiв
THICC
THICC

Начинаем проверять причины такого поведения модели. Первое, что приходит в голову - это некорректное соединение рига и меша. Выделяем модель, skin - unbind skin, начинаем менять конфигурации bind skin (открываем через option box), меняем bind method на Geodesic voxel (до этого перебрали все возможные методики из документации Maya), снова соединяем риг с мешем, экспортируем модельку, импортируем в UE4 и видим что теперь медведя вовсе разорвало по швам, как и наши жёпы, поскольку к этому моменту с учетом самых первых попыток импорта мы перебрали уже более 50 итераций, прочитав более 20 статей в интернетах о проблемах таких же, как наша.

Оооооо либераху порвало
Оооооо либераху порвало

Такое поведение полностью повергло в шок и закралось подозрение, что артефакты - это не единственный сюрприз, оставленный в изначальной модели. Выделяем модель, переходим в режим выделения вершин (ПКМ - vertex), переходим в контекстное меню (shift + ПКМ - merge vertex - merge vertex), так мы смерджили все вершины и их количество уменьшилось с 3306 до 2552 (как оказалось медведь буквально был дырявый). Снова импортируем в UE4. Проигрываем анимации, видим, что пузо почти не надувается (в пределах допустимого), но теперь у мишки при ходьбе висит курдюк и позвоночник все так же перекошен.

Пузеня отвисла
Пузеня отвисла

Возвращаемся в Maya и начинаем пробовать разные комбинации соединения рига с мешем (ведь частично это решило проблему). Спустя несколько часов и перебранных комбинаций ничего толкового не вышло, и мы решили попробовать дефолтный метод closest distance, вместо geodesic voxel, и увеличить количество max influences, результат стал получше, но раздувание все еще недопустимо большое.

5 influences
5 influences
15 influences
15 influences

Развесовка

Ничего не остается как проверить силу влияния костей на отдельные части тела мишки. Выделяем объект, skin - paint skin weight (через option box). И там нас ждал сюрприз, - распределение весов костей лап имеет очень сильное влияние на его пузо и при их отведении, естественно, пузо отвисает. Чиним ошибку при помощи ручного рисования весов, а именно проходимся кистью с value 0 по всем верхним костям лап медведя и убираем влияние. Так же необходимо поправить заднюю часть медведя, там мы, наоборот добавляем влияния кости левой ноги на спину медведя (в месте, где идет перекос) и симметрично немного добавляем веса на правую ногу и хвостик.

Было
Было
Стало
Стало

Снова импортиурем модель в UE4 и, вуаля, - наш медведь корректно стал вести себя на анимациях (пузико не отвисает, хвост почти идеально (можно еще поработать над весами).

Пузо ОК
Пузо ОК
Жёпа ОК
Жёпа ОК

В конце еще сделали отдельный материал на глаза, чтобы сделать их светящимися с помощью emissive color.

Медведь готов
Медведь готов

Послесловие

В большинстве своем, Game ready модельки уже сведены к лоуполи, поэтому наша методика сработает.
В случае же, когда лоупольностью не пахнет, можно использовать метод Quad draw, и просто обвести модельку сделав ретопологию.

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

3333
21 комментарий

*процесс лоупоулирования активирован*

11
Ответить

Лоуполизирую всё что вижу

6
Ответить

Деполигонизация.

2
Ответить

Еще один способ сделать все быстрее, это воспользоваться встроенным генератором LODов UE4. Анимации при этом работают корректно)

1
Ответить

Генерация LOD'ов в UE4 это упрощение геометрии объекта, даже на скрине видно что морда медведя стала похожа на грызуна
Этот инструмент создан именно что для LOD'ов, для того чтобы не нагружать систему отрисовкой сложной геометрии, когда для камеры она в любом случае не видна практически

Рестайлинг это все же другое, мы не упрощали геометрию, а сделали её жёсткой. А самое главное, сделали свои текстуры. Так как каждый проект имеет свою стилистику, то готовые модельки очень редко в неё попадают

3
Ответить

Что на счёт текстуры под лоу по?

Ответить

Комментарий недоступен

1
Ответить