Gaussian Splatting: волшебный способ сделать 3D-слепок реального мира из фоток

 Публичный пост
22 января 2025  1486

Я не фотограф, меня никогда не тянуло снимать. Но недавно я поиграл с гауссовыми сплатами и теперь у меня огонёк под жёпой - хочется делать, рассказывать и показывать. За последними двумя я сегодня и пришёл!

Так вот, "гауссовые сплаты" (Gaussian Splatting), это какой-то волшебный способ сделать из серии фоток или одного видео фотореалистичный "слепок" реального мира.

"Мудрёно звучит, Миш!" - согласен, и поэтому я откладывал вкатываться в это больше года. Но оказалось что вкатиться очень просто, а на выходе получается очень красиво!

Кусочек Московского метро на память
Кусочек Московского метро на память

Чо такое вообще

Пару лет назад головистые ребята опубликовали разрывную статью, в которой они придумали как из серии фоток или одного видео сделать 3d-сцену, которую можно смотреть со всех сторон в реальном времени!

Тестим на гире (пожалуйста не говори никому что я так живу)

Если кратко, то на вход мы закидываем фотки с разных ракурсов, а на выходе получаем облако из "мазков краски" повторяющие со всех ракурсов исходные фотографии.

"А выглядит как настоящая!"
"А выглядит как настоящая!"

В итоге на выходе получается очень реалистичный 3D-объект того что мы отсняли, а "края" из-за меньшего количества данных получаются неточными, как будто "широкими мазками". Поэтому мне результат очень напоминает картины.

Дверь дома тёмной ночью

Где посмотреть покрутить потыкать

Картинки и видео это прикольно, но мне кажется прочувствовать в чём фишка проще именно повертев что-нибудь самому.

Вот тут есть отличный сайт где можно быстро поиграться с компа или телефона(!) с загруженными кем-то модельками (обязательно гляньте "Hilltop small church", красота же!)

UPD: С телефона можно посмотреть классную соц. платформу scaniverse где люди сканируют сплаты через приложку и шарят на общей карте мира

Также с парой приседаний я сделал публично доступной ужатую версию одного из своих сплатов. На случай если у вас Firefox или у меня накрылся сервер - вот картинка:

Стрит арт под мостом
Стрит арт под мостом

В чём понт

Ну камон, это же кусочек реального мира перетащить в компьютер! Магия!

Стенка со стрит артом
Стенка со стрит артом

Например, можно увидеть что-то с ракурса который недоступен в реальности. Мост я фоткал с земли, а скрин - с высоты. А стенку с артом так вообще не сфоткать, потому-что в реальности перед ней деревья, а половину ещё и забор перекрывает:

Стенка в реальности
Стенка в реальности

То есть любые лишние объекты можно удалить в программе, а на выходе получить чистый фотореалистичный кадр с любого ракурса.

Как варить

Да очень просто, как оказалось. Нам потребуются:

  • Камера (например в телефоне)
  • Компьютер с Windows и видеокартой

1. Выбираем что будем фоткать
Это должна быть стационарная вещь, как в ранних фотках из 19 века. Это потому-что нам нужны фотки с разных ракурсов, и если наша вещь изменит форму или уйдёт из кадра - ничего не получится.

2. Снимаем видео или фотографируем с разных ракурсов
Гуру рекомендуют обойти вещь по кругу три раза, снимая каждый круг с разной высоты. Мы хотим чтобы каждый интересующий нас элемент был виден с разных ракурсов.

Ещё рекомендуют заранее настроить выдержку и фокус, чтобы эти параметры не изменялись во время записи. Но вообще не заморачивайтесь, скорее всего и так выйдет классно. Я первый "сплат" снимал как видео, с дрожащими руками и одним "обходом", и всё равно вышло прикольно.

Красивая "Руна", с которой началась идея залезть в сплаты
Красивая "Руна", с которой началась идея залезть в сплаты

3. Закидываем фотки/видео в PostShot с дефолтными настройками
Наш аналог философского камня для сплатов - программа PostShot. Самый кайф в том, что нам вообще ничего знать не надо про то как она работает: открыл, закинул видео, согласился с дефолтом - готово!

Под капотом программа выберет лучшие кадры для обучения из видео, по всем кадрам составит облако точек и поймёт с какого ракурса какой кадр был сделан, а затем запустит на GPU тот самый гига-алгоритм из научной работы которую я упоминал в начале поста.

Результатом труда программы станет .psht-файл который там же можно покрутить и поскриншотить . В этом же вашем PostShot можно сделать красивый пролет камеры и снять короткие видяшки как в этом посте.

4. (Опционально) Чистим от артефактов и обрезаем лишнее в SuperSplat
Практически всегда у вас будет в получившемся "облаке" куча лишних вещей. Это и рандомные объекты которые попали в кадр но вам не интересны, так и "висюны" - маленькие пятна которые машина не смогла определить где рисовать, и оставила висеть в воздухе.

Сплат до очистки - слева дом, спереди деревья
Сплат до очистки - слева дом, спереди деревья

Удобнее всего чистить это дело таким образом:

  • В PostShot сохраняем наш сплат в .ply
  • Заходим в браузере в SuperSplat
  • Выделяем кисточкой интересную нам часть, и используем комбинацию invert (I) + delete (del) чтобы оставить только её
  • Дальше чистим уже по мелочи кисточкой + delete

После этого можно сохранить уже "почищеный" файл в .ply и дальше делать с ним что хотим (например загрузить в PostShot чтобы снять красивый пролёт камеры)

Такие дела

Всем дочитавшим в подарок - Автомобиль!

Ничего для вас не жалко!
Ничего для вас не жалко!

17 комментариев 👇
Egor Suvorov Программист/преподаватель C++ 23 января в 01:09

Кажется, по-научному это называется фотограмметрия

  Развернуть 1 комментарий

@yeputons, Все так 👍

В посте для этого не нашлось места, тк основная идея поста была "смотрите как легко и весело"

Всякие научные вставки, особенности работы и сравнение с другими методами фотограмметрии оказались за бортом

  Развернуть 1 комментарий

@festinuz, Gaussian Splatting и фотограмметрия всё таки разные вещи. Фотограмметрия, обычно, вытаскивает из кадров под разным углом положение точки в пространстве и получается облако цветных точек которое можно потом обтянуть полигонами. При этом теряется огромное кол-во информации о текстуре, например отражения т.к. они углозависимы. Gaussian Splatting это другой вид рендера, когда объёмная информация не преобразуется в примитивы, в нашем случае обучается нейронка которая предсказывает какие-то гаусианы, которые посыпаются поверх ещё какой-то магией, для понимания нужно читать статью. Для интересующихся именно применением могу посоветовать видео где бывалые киношники балуются с этой технологией:

PS между Gaussian Splatting и NeRF тоже есть разница (вроде в методах генерации сплатов), но для этого тоже нужно читать статьи. Gaussian Splatting часть семейства новых методов нейронного рендеринга, как и NeRF

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@yeputons, насколько я знаю, фотограмметрия это составление именно меша по фото. Но возможно это два разных вида фотограмметрии.

  Развернуть 1 комментарий

@N3K0K33P3R, фотограмметрия - это про измерения по фотографиям если максимально обобщенно. Практически буквальный перевод с греческого. А наизмерять по фотографиям можно кучу всего. Так что сабж - это одно из приложений.

  Развернуть 1 комментарий
Sergey Grebnev Руковожу понемногу 24 января в 09:23

Кхм… «Scaniverse» на телефоне оказывается от тех же, кто делал Pokémon GO. Подхватили свою тему по привязке объектов к реальной местности.

  Развернуть 1 комментарий
Olga Kai админ в Метаверсошной 10 февраля в 17:17

меня гауссианы интересуют исключительно с точки зрения того чтобы потом это смотреть/использовать в виаре и тут пока печаль - ужасно бесят эти макаронины.
которые мазки.
при ближайшем рассмотрении там почти все из них состоит. Даже старый способ фотограмметрии выглядел как будто лучше (хотя модели и весили капец сколько).
В общем, жду радикального улучшения этой технологии.

  Развернуть 1 комментарий
Yuri Voevodin Жонглирую данными как Data Engineer 22 января в 20:24

Интересно, как оно в VR?

  Развернуть 1 комментарий

@Trondayk, поддержка (в виде плагинов к Unity/Unreal/Godot) есть, тоже очень хочется посмотреть, но руки пока не дошли

Может кто-то уже сделал готовый VR-viewer чтобы было plug-and-play, но я не гуглил.

Канеш endgame в виде "своровал место из реального мира и показываю другим не выходя из дома" звучит офигенно!

  Развернуть 1 комментарий

@festinuz, есть plug-and-play вариант - https://scaniverse.com
Можно отсканить c телефона и открыть в Quest (насчет других шлемов не уверен)
Можно посмотреть на пошаренные сканы других людей

  Развернуть 1 комментарий

@duckpotat, Заценил, классная тема!

Качество там хуже, но то что это 1) чисто с телефона и 2) соц. платформа - офигенные решения

Хороший вариант чтобы кому-то показать и продать идею

  Развернуть 1 комментарий

Очень залипательно, добавил в пост

  Развернуть 1 комментарий

А я вот жду, когда все таки эти ребята свой код опубликуют
http://mega-sam.github.io
Судя по демо у них генерация 3д сцены с одного видео =)

  Развернуть 1 комментарий

Жутковато! Но красиво

  Развернуть 1 комментарий

блин, где тока компуктер на винде найти) без него можно обойтись? а то выглядит вкусненько

  Развернуть 1 комментарий

@kissed, Можно попробовать Scaniverse - качество там поскромнее, зато все происходит прямо на телефоне

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб