Неочевидные лайфхаки 3D реконструкции людей
Сканировать людей можно для разных целей: от создания цифрового двойника для спецэффектов в кино до создания цифрового блогера или ассистента для соцсетей. Чаще всего удобно или даже нужно отсканировать уже существующего человека, чтобы внешность 3D модели была вполне определенная и фотореалистичная. В этой статье мы обсудим, какие есть неочевидные лайфхаки 3D реконструкции людей на основе фотограмметрии.
Очевидные лайфхаки
Начнем с того, что фотограмметрией, т.е. восстановлением 3D моделей сцен на основе множества фотографий, пользуются уже не первый десяток лет для разных целей, в основном для сканирования карт местности или больших архитектурных объектов. Мы в Twin3D применяем фотограмметрию для сканирования людей, но есть и другие объекты, например, волкособы или диджейский пульт. Так какие же есть очевидные лайфхаки 3D сканирования людей?
Чем больше фотографий — тем лучше. Самый очевидный лайфхак. По принципу фотограмметрии на изображения проводятся лучи из виртуальной камеры через пиксели — в итоге лучи пересекаются. Но надо найти точки, которые повторяются на разных фотографиях. Чем больше фотографий объекта, тем больше таких точек, а значит — и качество итоговой 3D модели.
Между соседними фотографиями должно быть пересечение хотя бы 30% (лучше 50%). Это прямо следует из предыдущего объяснения.
Если объект подвижный (а человек очень подвижный, даже когда пытается стоять смирно), то фотографировать нужно одновременно. Это самое сложное в реализации требование. Получается, что просто вращать камеру вокруг человека не самый лучший вариант (хотя кто-то пытается). Нужно поставить много камер, которые умеют одновременно фотографировать. Кстати, у нас именно такой риг из камер (картинка ниже).
Использовать платный софт. Есть много бесплатных и опенсорсных софтов для 3D реконструкции, типа COLMAP или Meshroom, но по крайней мере на людях их результаты не идут ни в какое сравнение с платным софтом. Из платных мы рекомендуем (это не реклама) Agisoft Metashape или RealityCapture. У первого преимущество в том, что есть удобный питоновский API, а у второго — что он хорошо адаптирован под сканирование людей. На картинке ниже видна катастрофическая разница между бесплатным и платным софтом. Кстати, у Agisoft есть свой список советов для реконструкции людей, посмотрите.
Неочевидные лайфхаки
Если пункты выше понятны любому, кто пытался собрать свои 3D модели и имеет опыт в фотографии, то дальше мы рассмотрим моменты, которые не лежат на поверхности и требуют некого бэкграуда в computer science и глубоком обучении. Помимо этого, их объединяет то, что не подразумевают какого-то ручного вмешательства 3D моделлера или фотографа.
Кстати до этого мы писали статью про автоматическую реконструкцию лица человека до уровня пор. Там совершенно другой сетап и другие подходы к реконструкции.
1. Background matting
Ниже — сырые фотографии с наших камер. Как видно, тут кропы тела человека на довольно сложном фоне. Не удивительно, что софт по 3D реконструкции с трудом справляется с тем, чтобы находить матчинг точек на разных фотографий: появляется шум и артефакты из-за этого сложного фона.
Сырые фотографии со сканераБыло бы идеально убрать фон. Но как это сделать? Конечно, есть множество статей по сегментации картинок, но они в основном ориентированы на определенный обучающий датасет, и там люди обычно целиком представлены (а не куском ноги). К тому же очень желательно, чтобы убирание фона было максимально точным (с точность до мм) и быстро считалось.
К счастью, есть статья «Real-Time High-Resolution Background Matting» (Shanchuan Lin et al., CVPR 2021), в которой есть всё это: очень точное убирание фона независимо от главного объекта и быстрая скорость вычислений. И главное — доступный код с лицензией MIT.
Вот что получается после прогона на нем картинок сверху:
Фотографии после background mattingПриблизим и уберем текстуру объекта:
Результат background matting — убирание фона с точностью до волосковРезультаты поразительные! Фон убирается с точностью до волосков. Теперь мы уж точно ожидаем, что 3D реконструкция должна улучшиться. Что по факту получается?
На картинке ниже мы сделали 2 модели: одну без убирания фона (слева), другую — с ним. Разница на лицо (буквально).
3D реконструкция до и после убирания фона2. Image enhancement
Глаз опытного фотографа заметит, что наши сырые фотографии явно нуждаются в улучшении. Тут и резкости недостаточно, и свет слишком яркий, есть и дисторсия камер и так далее. Гипотеза в том, что улучшение этих вещей должно помочь собрать более качественные 3D модели.
Мы решили попробовать продукты известной в мире фотографии компании DxO, а именно DxO PureRaw (тоже не реклама). Этот софт умеет делать все выше перечисленное, а еще убирать шум с фотографий с помощью разработанной inhouse нейронной сети DeepPRIME AI. Вот что получается после его применения:
Применение DxO PureRawГлавный вопрос: как это сказывается на итоговой модели?
Модели до и после улучшения фотографийВидим, что улучшение исходных фотографий существенно улучшает и итоговую модель.
3. Mesh denoising
Предыдущие приемы касались улучшения входных изображений для 3D реконструкции. Вопрос теперь в том, можем ли мы как-то улучшить выходы: т.е. меш или текстуру. Обычно, на выходе меш получается очень шумным, особенно если эта часть видна малым числом камер (например, нижняя часть руки).
Сырая модель рукиНа самом деле мы уже писали подробную статью про разные подходы к убиранию шума с меша: от обычных фильтров до графовых нейронных сетей — так что перейдем сразу к результатам на людях.
Применение убирания шума к модели девушкиЕсли приглядеться к этой девушке, то можно легко заметить, что после уменьшения шума итоговый рендеринг становится гораздо приятнее, при этом детализация не пропадает. Можем также посмотреть и на нижнюю часть руки:
Чищеная модель рукиЗаключение
Область 3D реконструкции человека очень широкая и интересная, можно применить огромный спектр методов к восстановлению модели по фотографиям. Здесь мы покрыли лишь часть из них, но уже с их помощью видны существенные улучшения результатов.
В других статьях мы расскажем, как можно восстанавливать текстуры, как вычислять реалистичные нормали кожи, как создавать виртуальные камеры между настоящими и много других интересных вещей.