Я не фотограф, меня никогда не тянуло снимать. Но недавно я поиграл с гауссовыми сплатами и теперь у меня огонёк под жёпой - хочется делать, рассказывать и показывать. За последними двумя я сегодня и пришёл!
Так вот, "гауссовые сплаты" (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 чтобы снять красивый пролёт камеры)
Такие дела
Всем дочитавшим в подарок - Автомобиль!
Кажется, по-научному это называется фотограмметрия
Кхм… «Scaniverse» на телефоне оказывается от тех же, кто делал Pokémon GO. Подхватили свою тему по привязке объектов к реальной местности.
меня гауссианы интересуют исключительно с точки зрения того чтобы потом это смотреть/использовать в виаре и тут пока печаль - ужасно бесят эти макаронины.
которые мазки.
при ближайшем рассмотрении там почти все из них состоит. Даже старый способ фотограмметрии выглядел как будто лучше (хотя модели и весили капец сколько).
В общем, жду радикального улучшения этой технологии.
Интересно, как оно в VR?
А я вот жду, когда все таки эти ребята свой код опубликуют
http://mega-sam.github.io
Судя по демо у них генерация 3д сцены с одного видео =)
Жутковато! Но красиво
блин, где тока компуктер на винде найти) без него можно обойтись? а то выглядит вкусненько