Стилизуем готовые модели под полигональный 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 в итоге все будет немножко иначе выглядеть.
Модель выглядит как надо. Теперь нам необходимо забрать отсюда модель в формате 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.
Пришло время соединять меш с костями. Выделяем body и Enemy_Bear1 - skin - bind skin (настройки п�� умолчанию). Кости рига стали разноцветными, значит все прошло хорошо и теперь при повороте костей за ними двигается и сам медведь.
Проблемы готовых моделей на финише
Снова экспортируем нашего мишку, но уже просто выделяя группу root (file - export selection через option box, формат fbx). Импортируем модель в UE4, и видим как нашего медведя начало пучить, будто он бахнув пельменiв, хвост свернулся калачиком, а левое полужопие стало как у Ники Минаж. Важный момент, что это происходит ТОЛЬКО во время некоторых анимаций.
Начинаем проверять причины такого поведения модели. Первое, что приходит в голову - это некорректное соединение рига и меша. Выделяем модель, 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, результат стал получше, но раздувание все еще недопустимо большое.
Развесовка
Ничего не остается как проверить силу влияния костей на отдельные части тела мишки. Выделяем объект, skin - paint skin weight (через option box). И там нас ждал сюрприз, - распределение весов костей лап имеет очень сильное влияние на его пузо и при их отведении, естественно, пузо отвисает. Чиним ошибку при помощи ручного рисования весов, а именно проходимся кистью с value 0 по всем верхним костям лап медведя и убираем влияние. Так же необходимо поправить заднюю часть медведя, там мы, наоборот добавляем влияния кости левой ноги на спину медведя (в месте, где идет перекос) и симметрично немного добавляем веса на правую ногу и хвостик.
Снова импортиурем модель в UE4 и, вуаля, - наш медведь корректно стал вести себя на анимациях (пузико не отвисает, хвост почти идеально (можно еще поработать над весами).
В конце еще сделали отдельный материал на глаза, чтобы сделать их светящимися с помощью emissive color.
Послесловие
В большинстве своем, Game ready модельки уже сведены к лоуполи, поэтому наша методика сработает.
В случае же, когда лоупольностью не пахнет, можно использовать метод Quad draw, и просто обвести модельку сделав ретопологию.
Возможно наш метод покажется кому-то диковатым, но если бы не проблемы с экспортом-импортом в UE4, мы получили бы готовую стилизованную модельку из нестилизованного пака за полтора часа, что является отличным способом экономии для студий, у которых бюджет ограничен или вовсе отсутствует