Сканировать людей можно для разных целей: от создания цифрового двойника для спецэффектов в кино до создания цифрового блогера или ассистента для соцсетей. Чаще всего удобно или даже нужно отсканировать уже существующего человека, чтобы внешность 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.
Вот что получается после прогона на нем картинок сверху:
Приблизим и уберем текстуру объекта:
Результаты поразительные! Фон убирается с точностью до волосков. Теперь мы уж точно ожидаем, что 3D реконструкция должна улучшиться. Что по факту получается?
На картинке ниже мы сделали 2 модели: одну без убирания фона (слева), другую — с ним. Разница на лицо (буквально).
2. Image enhancement
Глаз опытного фотографа заметит, что наши сырые фотографии явно нуждаются в улучшении. Тут и резкости недостаточно, и свет слишком яркий, есть и дисторсия камер и так далее. Гипотеза в том, что улучшение этих вещей должно помочь собрать более качественные 3D модели.
Мы решили попробовать продукты известной в мире фотографии компании DxO, а именно DxO PureRaw (тоже не реклама). Этот софт умеет делать все выше перечисленное, а еще убирать шум с фотографий с помощью разработанной inhouse нейронной сети DeepPRIME AI. Вот что получается после его применения:
Главный вопрос: как это сказывается на итоговой модели?
Видим, что улучшение исходных фотографий существенно улучшает и итоговую модель.
3. Mesh denoising
Предыдущие приемы касались улучшения входных изображений для 3D реконструкции. Вопрос теперь в том, можем ли мы как-то улучшить выходы: т.е. меш или текстуру. Обычно, на выходе меш получается очень шумным, особенно если эта часть видна малым числом камер (например, нижняя часть руки).
Мы уже писали подробную статью про разные подходы к убиранию шума с меша: от обычных фильтров до графовых нейронных сетей — так что перейдем сразу к результатам на людях.
Если приглядеться к этой девушке, то можно легко заметить, что после уменьшения шума итоговый рендеринг становится гораздо приятнее, при этом детализация не пропадает. Можем также посмотреть и на нижнюю часть руки:
Заключение
Область 3D реконструкции человека очень широкая и интересная, можно применить огромный спектр методов к восстановлению модели по фотографиям. Здесь мы покрыли лишь часть из них, но уже с их помощью видны существенные улучшения результатов.
В других статьях мы расскажем, как можно восстанавливать текстуры, как вычислять реалистичные нормали кожи, как создавать виртуальные камеры между настоящими и много других интересных вещей.
DjPhoeniX
@efim_twin, отличные результаты. Долгое время пытался добиться такого с разными технологиями, и Kinect, и iPhone с LIDAR, и всё время упирался в подвижность объектов. Коммерческий софт не спасал. Так и понял, что нужен риг из нескольких камер, желательно RGBD. На вскидку, сколько у вас камер в вашей студии?)
efim_twin Автор
Спасибо! У нас 120 камер на полноростовом сканере.
В сторону RGBD мы тоже думали, но пока не экспериментировали. Если попробуете -- будет круто узнать про ваш опыт!