Как создать реалистичную 3D модель человека для видео игры?
Зачем вообще кому-то создавать 3D модель человека по фотографии? На самом деле такие модели очень актуальны в видео играх, в кино и даже в приложениях для смартфонов. Автоматические решения зачастую не могут подстроиться под реалистичного героя, чаще всего таким моделям нужна ручная донастройка некоторых опций, таких как выбор цвета волос, кожи, одежды, чтобы персонаж мог выглядеть мультяшно.
Мы вместе с разработчиками из игровой студии Skill Gaming решили подробно рассмотреть все существующие методы и на их основе создать систему, которая по одной фотографии человека может автоматически генерировать 3Д аватар при помощи текстурированной полигональной сетки, но обязательно содержащей скелет и анимацию.
Какие подходы к работе мы использовали, и они нам не подошли?
Изначально мы начали рассматривать генерацию трехмерных моделей при помощи специальной технологии NERF, она позволяет обработать сцену с совершенно разных ракурсов при помощи набора исходных фотографий и используя для этого видео, текстуру зданий и фотограмметрии. NERF — это профессиональный подход, но нам он не подошел, так как необходимо было использовать узкоспециализированные инструменты. Также мы проанализировали ICON, он является настоящим прародителем той модели, на которой было решено остановиться. Эта модель довольно плохо прорабатывает лица героев, руки и делает слишком много склеек в итоговом макете-сетке. Из всех моделей к решению нашей задачи больше всего приблизился нейросетевой фреймворк ECON. Его мы и решили использовать.
Что из себя представляет ECON?
ECON представляет собой систему для цифрового моделирования человека с использованием цветного изображения, разработанную группой аспирантов под руководством научного руководителя. Процесс начинается с получения RGB-изображения и применения модели SMPL-X для создания сетчатой модели человеческого тела без учета волос, одежды и других внешних деталей. Эта модель адаптируется под индивидуальные параметры роста, размера тела и позы человека с помощью нейросети. Далее, создаются две карты нормалей для одежды (передняя и задняя), которые вместе с картами глубины обрабатываются специальным оптимизатором для формирования передней и задней поверхностей тела. Собранная модель дополняется руками из SMPL-X. Проблема некорректного моделирования согнутых ног решается добавлением скелета и изменением позы. Для экспорта в формат GLTF разработан специальный Python-модуль для автоматической привязки скелета к модели и создания текстур. Финальная проверка модели проводится в Blender и MeshLab. В ECON была проведена оптимизация кода, включая сборку мусора и очистку кэша видеокарты, что позволило эффективно работать на видеокарте с 6 Гб памяти, несмотря на первоначальные рекомендации в 12 Гб.
Каким образом работает система?
Сначала необходимо разработать скелет, чтобы анимировать сетку нужно переместить на необходимое расстояние ее вершины для создания ощущения анатомического движения. Поэтому зачастую скелет для анимации похож на настоящего человека. Чаще всего художники создают скелет при помощи программного обеспечения для 3Д моделирования. Каждый человек может спокойно управлять движением сетки с большим количеством вершин и небольшим количеством костей. Чем больше используется костей, тем точнее можно смоделировать движение. Часто используется такой метод работы, как скиннинг — это процесс привязки скелета к сетке, чтобы при его движение передвигалась и сама модель героя. Под этим процессом часто подразумевают алгоритм работы Linear Blend Skinning. Каждая кость скелета отвечает определенному изменению положения вершин сетки. Каждая вершина обладает набором коэффициентов, которые определяют, как сильно каждая кость влияет на вершину. Например, вершина, которая находится в районе руки, обладает большим весом для кости руки, чем для головы. Поэтому новое положение вершины можно определить при помощи линейной комбинации вершины и веса модели. Во время осуществления скиннинга в каждой вершине задаются определенные веса для каждой кости.
После того как каждая вершина сетки будет сопоставлена с определенными костями - модель может быть анимирована при помощи изменения положения и вращения костей:
- Для начала вся геометрия переводится в специальную систему координат определенной кости или сустава.
- Каждая вершина трансформируется специальным образом.
- Конечный результат рассчитывается с учетом весов.
В начальной фазе работы с ECON происходит восстановление параметров для модели SMPL-X, на основе которой затем формируется окончательная сетка. Эта сетка служит основой для детализации одежды, волос, обуви и аксессуаров. Из этого следует возможность использования скелета и скиннинга напрямую из SMPL-X. С помощью специфического набора параметров создается детализированная модель человеческого тела без внешних атрибутов, содержащая 7000 вершин и 23 кости, отвечающие за движение конечностей и пальцев.
Для интеграции скелета из SMPL-X в ECON используется алгоритм, который позволяет копировать скелет и данные о скиннинге из исходной модели. Этот процесс начинается с загрузки файла в формате GLTF, где сетки SMPL-X и ECON выравниваются по центру координат. Для каждой вершины сетки ECON определяется ближайшая вершина в сетке SMPL-X с использованием структуры данных KDTree, которая эффективно решает задачи поиска ближайших точек за счет пространственного разбиения.
В каждую вершину из сетки ECON будут скопированы все ближайшие к нему вершины сетки SMPL-X. Для каждой определенной кости пересчитывается матрица InversedBindMatrix. Она преобразует всю геометрию в систему координат кости и применяет ее в качестве скиннинга. После создания скелета в полигональной сетке ECON при помощи переноса из SMPL-X-модели можно анимировать трехмерного героя.
Работа с анимацией
Теперь после скиннинга задана определенная сила воздействия нескольких костей на сетку и при их перемещении начинает двигаться сама модель. Создавать анимацию вручную достаточно сложно. Чтобы движения выглядели органично, необходимо постоянно корректировать расположение костей в скелетной анимации и их перемещение в ключевых кадрах. Для осуществления анимации на данном этапе используется ретаргет с дополнением для Blender — Rokoko, в котором задаются исходные и целевые кости для двух скелетов. Ретаргет — это перенаправление уже готовых анимаций на объект с таким же скелетом, но с другой совершенно сеткой или на объект, скелет которого сильно отличается от оригинала иерархией костей, но обладает с ним сходством в строении. Анимированные скелеты можно взять из определенной базы файлов, там движение модели записаны датчиками движения людей. Поэтому у каждого разработчика есть ограниченный набор анимации, которые хорошо передают движение персонажей. На этом этапе вам очень важно понять, как будет работать система, как будет выглядеть модель, когда все это соединится вместе.
Работаем с текстурой
ECON не умеет разрабатывать текстуры, поэтому можно получить только раскрашенные вершины спереди, из которых потом в дальнейшем можно раскрасить полигон. Вопрос: в чем заключается проблема также раскрасить и сзади? Звучит все максимально просто, но в итоге мы увидим довольно мыльную картинку, так как изначально изображение человека переносится не со всеми пикселями, их недостаток будет компенсирован интерполяцией – треугольники раскрашены по цветным вершинам. Также во время постобработке меша, при ремешинге понижается расширение модели, что также значительно влияет на качество текстур.
Что в таком случае делать? Необходимо перестроиться на правило трехмерного мира, где для каждой модели создается так называемая UV-карта или ещё её называют разверткой: каждой вершине сетки присваивается двумерная координата - U, V. Вместе с полигонами получается развернутая на плоскости модель, в которой каждый треугольник раскрашивает соответствующие области. Таким образом можно сформировать интересующую развертку и дальше использовать нейросеть для генерации всех необходимых фрагментов. Но развертка должна быть инвариантна относительно вершин под каждую часть тела. Например, какая-то область левой ягодицы должна находиться в одном месте в развертки. Необходимо это для того, чтобы нейросети было проще обучиться так как ей не нужно теперь каждый раз формировать геометрию развертки.
Из классических решений развертки сетки лучше всего подошла модель Texformer. Она выполнена на основе визуальных трансформеров, по фото формируется uv-карта, используемая для SMPL-X-модели. Таким образом мы с конкретной развертки получаем полностью раскрашенную картинку, но мы не можем просто взять ее и применить из разного разрешения трехмерных моделей. Поэтому мы получаем следующую задачу, которая заключается в построении уже стандартизованной развертки – это наиболее острый вопрос.
Как можно сделать UV-карту? Вроде бы задача максимально простая, но у нее есть внутри множество нюансов. Основные из них заключаются в трехмерной сетке, в которой есть абстрактное множество вершин в пространстве и составленные из них полигоны. Мы не понимаем за какую часть тела отвечает конкретная вершина, поэтому ECON можно отнести к определенному типу моделей, результат которых плохо поддается обобщению, так как на выходе получаются совершенно разные сетки.
Рассматривая альтернативные подходы, мы нашли неплохое решение - TEXTure, основная его идея заключается в итеративном формировании текстуры при помощи разных точек обзора, важно помнить про текстовое описание и саму сетку. Такое решение можно назвать универсальным, так как текстура делается под имеющуюся уже сетку. Во время перемещения камеры на другое место рендерятся картинки с определенного ракурса карты глубины, которые служат некоторой подсказкой для диффузных моделей. При помощи таких наборов изображений может быть построена итоговая текстура.
Здесь есть два самых больших недостатка - первый заключается в том, что prompt является текстом, а не простым изображением. Даже в том случае, если мы идеально захватим изображение, то не получим никакой гарантии в том, что одежда, лицо будут полностью соотноситься с оригинальной картинкой. Второй принцип работы TEXTure говорит о том, что наилучший результат может быть достигнут при помощи формы, которая равномерно распределена по объему описывающей сферы. Но человек получает продолговатую форму и поэтому качество модели оставляет желать лучшего
Как работать с системой?
Работа начинается с того, что в систему загружается фронтальная фотография человека в полный рост. На этой фотографии он должен стоять прямо - руки разведены в сторону. При правильной фотографии будут минимизированы склейки сетки, одежда станет максимально видна и понятна для генерации.
Мы исследовали огромное количество методов создания полигональной сетки. За основу взяли ECON, который был доработан нашими специалистами и оптимизирован под потребности проекта, ещё нам удалось улучшить его производительность. Одним из самых важных этапов можно назвать разработку метода генерации скелета для анимации. Эта задача была успешно решена при помощи модели SMPL-X. Она позволила создавать вполне живые естественные движения - все компоненты были интегрированы в единую систему, которая обеспечила совместную работу полигональной сетки, текстуры и скелета.
Популярное
Не скорлупа, а просто космос: для покраски яиц в фиолетовый цвет химоза не пригодится — понадобится лишь один отход
2 апреляУходя из дома, всегда заливаю подсолнечное масло в раковину - результатом довольна как слон
2 апреляЖизни трех человек унес пожар в Котельниче, возбуждено уголовное дело
31 мартаУченые назвали самый полезный фрукт - не яблоко, не банан и в два раза полезнее цитрусов
30 мартаПенсионное удостоверение придётся сдать: пенсионерам до 70 лет приготовили неприятный сюрприз
24 мартаУходя из дома, закидываю чайный пакетик в унитаз - волшебный совет знакомой горничной
3 апреляТеперь готовлю творожную запеканку без манки всегда – получается как суфле, тает во рту
24 мартаСвекла и луковая шелуха в полном пролете: красим пасхальные яйца новым способом — скорлупки будут ярче гранатовых зерен
5 апреляНе еду в отель, если вижу, что там они: с кем отказываются отдыхать русские туристы
5 апреляПочему нельзя мыть посуду в гостях: запомните раз и навсегда
30 мартаЗачем нужно солить воду в стиралке: запомните раз и навсегда
29 мартаХуже чем водка: ученые забраковали популярный среди россиян напиток – пьем его ежедневно
29 марта4 ложки в таз — и даже самые заношенные носки станут белее снега: простой и полезный лайфхак
23 мартаУказ утвержден. Пенсионеры, у которых пенсия меньше 32 577 рублей, получат приятную денежную выплату
7 апреляСчетчики будут под запретом: с 28 марта действуют новые правила для собственников жилья
23 мартаЧетверг и пятница станут выходными: россиян ждет трехдневная рабочая неделя
1 апреляКрошу 1 таблетку в воду для полива — любая рассада прёт щёткой: вытянутые сеянцы в прошлом — даже без фитоламп
28 марта7 многолетников для ленивого цветника, который цветёт без остановки: посадили и забыли - только глаза радуются до самых заморозков
3 апреляЭтот дивный многолетник создаст в саду ковёр из цветов: он неприхотлив и устойчив к морозам — украсит любой участок
2 апреляВзбиваем картофель с яйцом — и воздушная вкуснятина к чаю готова: лучше любых пирожков, домашних за уши не оттащить
1 апреля