Всплеск внимания к технике сплэтинга связан с представленной в августе этого года статьей 3D Gaussian Splatting for Real-Time Radiance Field Rendering [Трёхмерный гауссов сплэтинг для рендера radiance field в реальном времени]. До этого, в июле, эта научная работа исследователей Университета Лазурного берега, Института информатики Общества Макса Планка и французского Национального института исследований в информатике и автоматике вошла в пятёрку лучших работ SIGGRAPH 2023.
В следующие два месяца новостные сайты, блоги и тематические форумы начали рекомендовать гауссов сплэтинг как будущее компьютерной графики. Новая техника позволит быстро отсканировать существующую сцену и после короткого обучения отрендерить её с высокой точностью, обещают восторженные голоса.
Сейчас исследователи бьются над поиском практического применения технологии и сканированием движения. В оригинальной работе речь идёт о воссоздании в первую очередь статичных сцен.
Эпоха до Gaussian splatting
В 1996 году стэнфордские исследователи показали четвёртую самую цитируемую научную работу в сфере компьютерной графики (DOI: 10.1145/383259.383309). Это была одна из первых статей по синтезу новых изображений на основе плотно сэмплированных световых полей [light field].
Под отрисовкой компьютерной графики обычно понимают получение двумерного изображения по 3D-моделям или массивам точек. Грубо говоря, на входе будут обтянутые текстурами треугольники видеоигры или объёмный массив точек томографии чьего-то черепа. Для рендера light field на входе поступают несколько уже существующих изображений сцены. На основе этого алгоритм создаёт новый рендер.
Light Field Rendering, 1996 год
Направление развивалось. В 2001 году стал возможен неструктурированный захват (DOI: 10.1145/383259.383309), в 2006 появляется техника structure from motion (DOI: 10.1145/1141911.1141964), позднее, в 2007, — multi-view stereo или MVS (DOI: 10.1109/ICCV.2007.4408933). В этих и прочих работах оттачивались алгоритмы получения трёхмерного рельефа по нескольким двумерным изображениям. К примеру, алгоритм мог составить представление о форме Венеры Милосской по 129 фотографиям c Flickr.
Multi-View Stereo for Community Photo Collections, 2007 год
На основе этого развились такие методы синтеза новых изображений по существующим, которые повторно проецируют и смешивают входные изображения с учётом трёхмерной геометрии. Иногда случаются изъяны, когда MVS не имеет достаточно данных о какой-то области или просто ошибается и создаёт несуществующую геометрию. В последние годы ошибки пытаются править нейросетями и довольно успешно (DOI: 10.1111/cgf.14339).
Point-Based Neural Rendering with Per-View Optimization начинает работу с MVS, но затем прибегает к нейронному рендеру. 2021 год
А вот трёхмерный гауссов сплэтинг — технология отрисовки семейства radiance field, совсем другого направления. Чаще всего его сравнивают с Neural Radiance Field (NeRF). В общем-то, оригинальная научная статья часто прибегает к этому сравнению — разумеется, с целью показать преимущество над предшественниками.
Гауссианы в пространстве
В 2017 году предложено объёмное представление сцены с оценкой глубины (DOI: 10.1145/3130800.3130855). Впоследствии к методу добавляют техники глубинного обучения (DOI: 10.1109/ICCV.2019.01008, DOI: 10.1109/CVPR.2019.00254).
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis, 2020 год
В 2020 году миру представляют NeRF (DOI: 10.1007/978-3-030-58452-8_24). При высоком качестве результатов у NeRF был крупный недостаток: нужно долгое обучение, и сама картинка рисуется небыстро (за минуты). Последователи сфокусировались на скорости работы.
В отличие от NeRF гауссов сплэтинг работает в реальном времени. Для представления сцены он использует массив точек. Идея рисовать сцену на основе точек не новая: её предлагали ещё в 1998 году (DOI: 10.1007/978-3-7091-6453-2_17). Как правило, прерывистость между точками предлагается заполнять представлениями покрупнее. Каждая точка рисуется в виде «следа от снежного шарика», сплэта — фигуры в виде круглого или эллиптического диска, эллипсоида или сёрфелей.
Сцена для Gaussian splatting — это массив точек. Каждая из них обладает четырьмя параметрами:
- Три координаты положения в пространстве.
- Для многомерного нормального (гауссовского) распределения нужна ковариационная матрица размерности 3×3, которая показывает, насколько вытянут или сплюснут эллипсоид.
- Альфа-канал (прозрачность).
- Цвет: три значения RGB.
Если упрощать, то для вывода на экран точки представляются в виде эллипсоидов. Учитывается их положение (глубина) и прозрачность.
Демонстрация, где каждая гауссиана полностью непрозрачная. Дилан Эберт
Для каждого пикселя гауссианы сортируются от самой дальней до самой ближней и отрисовываются, смешиваясь воедино. Результат — фотореалистичная сцена, которая при разрешении 1080p рендерится в реальном времени (100 кадров в секунду и выше).
Финальный рендер той же сцены. Дилан Эберт
3D Gaussian Splatting for Real-Time Radiance Field Rendering, видеоролик для SIGGRAPH 2023
Подготовка относительно быстрая — занимает менее 1 часа — и состоит из трёх этапов:
- Трёхмерное облако точек получается из набора фотографий или кадров видео с помощью упомянутого выше метода structure from motion, в частности, библиотеки COLMAP.
Точки сцены. Дилан Эберт - Каждая из точек представляется в виде гауссианы.
- Шаг оптимизации состоит из обучения методом стохастического градиентного спуска. Рендерится картинка на основе гауссиан. Она сравнивается с исходными данными. Происходит коррекция. Процесс повторяется тысячи раз.
В процессе исправления ошибок гауссиану клонируют (если она мелкая) или разбивают на две (если гауссиана слишком большая).
Выбор между клонированием или разбитием на две точки. Новые гауссианы появляются как в местах, где других мало (under-reconstruction), так и в пространстве, которое покрывает одна крупная гауссиана (over-reconstruction)
Если в альфа-канале получилось слишком низкое значение, то гауссиану удаляют.
Суммарно итераций этого процесса нужны тысячи. В исследовании сравниваются изображения как на 7 тысяч (≈6 минут обучения), так и 30 тысяч итераций (30–50 минут). После 30 тысяч итераций сцена представляется в виде 200–500 тыс. гауссиан.
Для оптимизации процесса обучения сначала его ведут на изображениях меньше изначальных в четыре раза по каждой из сторон. После 250 итераций даётся картинка в два раза меньше, после 500 — оригинал.
Для растеризации написали кастомный движок для CUDA. Исследователи предупреждают, что использовали дорогую карту для рабочих станций Nvidia RTX A6000, но также замечают, что производительность в реальном времени может быть достигнута на куда более слабых видеоускорителях.
Хотя по сравнению с другими подходами места нужно меньше, объёмы данных на всех стадиях значительны. Во время тренировки память загружалась до 20 ГиБ на неоптимизированной модели. (У A6000 48 ГиБ памяти.) Для рендеринга желательно умещать всю сцену на сотни мегабайт в память видеоускорителя плюс иметь дополнительно 30–500 МиБ на растеризатор.
Технически код реализован на Python на фреймворке PyTorch. Код проектов выложен в репозитории github.com/graphdeco-inria/gaussian-splatting. Интерактивный просмотр сцен реализован на тулките SIBR.
Кроме кода и научного доклада в высоком качестве (111 МиБ) и низком (25 МиБ) исследователи выложили 650 МиБ сцен и 7 ГиБ примеров сгенерированных картинок.
Пример работы гауссова сплэтинга, 30 тысяч итераций обучения. Заметно, что достигнута прозрачность стекла грузовика и его свойство отражать окружение
Эталонная фотография реального объекта
В этом архиве на 7 ГиБ лежат также примеры тех же сцен, но сгенерированных другими методами.
Сравнение девяти сцен из научной статьи. Слева направо: оригинальные фотографии, гауссов сплэтинг, mip-NeRF 360, Instant NGP, Plenoxels. Цветом и стрелочками выделены неочевидные различия
Достичь уровня Instant NGP (DOI: 10.1145/3528223.3530127) и Plenoxels (DOI: 10.1109/CVPR52688.2022.00542) гауссов сплэтинг может всего за 5—10 минут обучения, то есть за небольшое число итераций — 7 тысяч. Оба метода при этом выдают в секунду число кадров меньше 10, в то время как у Gaussian splatting это значение выше сотни.
Слева направо: сравнение индекса структурного сходства (SSIM, structure similarity) и пикового отношения сигнала к шуму (peak signal-to-noise ratio, PSNR) для различных алгоритмов. График авторов гауссова сплэтинга, поэтому под «ours» понимается он
Доведение интераций обучения до 30 тысяч позволяет выйти на уровень лучших существующих на данный момент продуктов, того, что на сленге называется SOTA, state of the art. И здесь гауссов сплэтинг работает на уровне или даже превосходит текущего «короля» — mip-NeRF 360 (DOI: 10.1109/CVPR52688.2022.00539).
Пример того же грузовика, но в исполнении mip-NeRF 360
Стоит учитывать, что для mip-NeRF 360 пришлось развернуть отдельный кластер на 4 ускорителя Nvidia A100 для обучения. Процесс обучения занял полсуток (или 48 часов, если бы ускоритель был один). Ни о какой работе в реальном времени речи не идёт — для генерации одной картинки Mip-NeRF360 требуется несколько секунд.
Слева направо: частота кадров и время тренировки для различных алгоритмов. График авторов гауссова сплэтинга, поэтому под «ours» понимается он
Все подобные методы плохо воссоздают те регионы, которые слабо представлены на снимках. Авторы гауссова сплэтинга также признают наличие в алгоритме артефактов, вызванных крупными гауссианами, неправильным порядком глубины или порядком смешения. Возможно, помог бы антиалиасинг, но эта рекомендация в научной статье исследуется слабо.
Дальнейшее развитие
Гауссов сплэтинг несовместим с существующими пайплайнами рендеринга и требует большого объёма видеопамяти и места для хранения сцены. Даже если эти проблемы решатся, внезапного перехода видеоигр на гауссов сплэтинг ожидать не сто́ит.
У супостата в шутере должен быть хитбокс, у боевой арены — границы для обработки столкновений, а ещё нужны погода, освещение и интерактивность окружения. Гауссов сплэтинг в его изначальном виде даёт лишь статичную сценку, которую даже на 3D-принтере не распечатать — только нарисовать на мониторе.
Впрочем, сообщество энтузиастов, исследователи и компании немедленно бросились адаптировать технологию для своих нужд, попутно пытаясь добавить недостающее. Мир познакомился с технологией всего пару месяцев назад, но поток последователей уже бьёт ключом. Любые усилия вызывают пристальное внимание.
На видео дорисованы трёхмерные траектории случайно выбранных 3 % гауссиан за 15 кадров (полсекунды). Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis
С этим столкнулся, например, автор работы Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis (arXiv:2308.09713). В период после публикации научной статьи, но до релиза кода пустой репозиторий github.com/JonathonLuiten/Dynamic3DGaussians набрал 450 звёзд и много просьб открыть исходники.
Сравнение эталона движения (красная линия) и предсказанного (синяя). Ошибка составляет в среднем 1,5 см. Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis
Это ожидаемо. Как следует из названия [«динамические трёхмерные гауссианы: отслеживание методом устойчивого динамического синтеза»], в гауссов сплэтинг добавили запись движения. Регистрируются все шесть степеней свободы каждого элемента сцены.
В качестве входных данных взят датасет Panoptic, известный по научной статье Panoptic Studio: A Massively Multiview System for Social Interaction Capture (DOI: 10.1109/TPAMI.2017.2782743). Эта работа 2017 года касается захвата движений людей в социальных взаимодействиях. Из всего обширного датасета выбрали несколько зрелищных активностей: люди играют с мячом, замахиваются битой и участвуют в контактных видах спорта.
Демонстрация облака цветных точек. Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis
Данные с 31 камер разбили на две части: видео с 27 камер взяли для обучения, 4 — для тестирования. 150 кадров при частоте 30 кадров в секунду с каждой камеры в разрешении HD отмасштабировали до 640×360, попутно устранив искажения линз.
Нескольких участников (некоторые повторяются) вставили в сцену Garden, которая впервые появляется в виде датасета в работе mip-NeRF 360. Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis
Авторы позволили гауссианам двигаться при условии, что они сохраняют изначальный цвет, размер и прозрачность. В этой работе используется новая реализация гауссова сплэтинга с оптимизациями для CUDA. В результате обучение для каждой из 150 временных точек (то есть по кадру с каждой с 27 камер) занимает всего 2 часа на одной RTX 3090, а частота кадров рендера огромна — 850 в секунду.
Более стильный жонглёр. Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis
Четырёхмерное отслеживание точек допускает четырёхмерное редактирование видео. Динамические объёкты без проблем удаляются из сцены или переносятся в другую. На объект можно закрепить что угодно: другой объект или саму камеру. Так, к примеру, можно сделать вид от первого лица или надеть на человека шапку.
Если отредактировать любое из изображений в простом графическом редакторе (Photoshop или Paint), эти изменения гауссины могут распространить на всю длинную сцену.
Изображение на рубашке дорисовано. Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis
Вообще, над представлением видео в точках-гауссианах работают сразу несколько команд по всему миру. Например, в Китае в Хуачжунском университете науки и технологии над этим трудятся исследователи Huawei. Результаты они показали в 4D Gaussian Splatting for Real-Time Dynamic Scene Rendering (arXiv:2310.08528).
Эта работа отличается неплохим качеством видео и упором на чуть ли не бюджетные видеокарты. Заявлено, что на RTX 3080 достигается частота 50 кадров в секунду, RTX 3090 — 70 при разрешении 800×800.
Сравнение идёт с прошлогодней работой TiNeuVox: Time-Aware Neural Voxels (DOI: 10.1145/3550469.3555383), а пример основан на датасете из HyperNeRF (arXiv:2106.13228). 4D Gaussian Splatting for Real-Time Dynamic Scene Rendering
Для работы использовались как датасеты с одной камерой, так с двумя (Nerfies) и 15—20 (DyNeRF). Брались в том числе синтетические данные (датасет из DNeRF).
Чтобы достичь правильные позиции и деформации формы, гауссианы здесь предлагается соединять в воксели с помощью метода HexPlane (arXiv:2301.09632). Гауссианы собираются в группы, для последних проводится анализ: как они во времени меняют позицию, поворот и размер.
Общая схема пайплайна модели. 4D Gaussian Splatting for Real-Time Dynamic Scene Rendering
Уже две работы представили системы для генерации контента с помощью гауссова сплэтинга. DreamGaussian: Generative Gaussian Splatting for Efficient 3D Content Creation (arXiv:2309.16653) и Gsgen: Text-to-3D using Gaussian Splatting — это методы автоматического создания 3D-ассетов по текстовым описаниям.
Gsgen
Подобные системы пытаются исправить недостатки существующих систем генерации 3D-моделей с помощью гауссова сплэтинга. К примеру, с его помощью DreamGaussian генерирует модель, извлекает полигональную сетку и корректирует текстуру.
Генерация направления «текст в изображение в 3D-модель». DreamGaussian
Не сто́ит думать, что гауссов сплэтинг — это что-то далёкое, ресурсоёмкое и требующее глубоких технических знаний. В сети появляются простые гайды, которые разжёвывают всё по шагам. Но вообще-то для знакомства с техникой необязательно даже что-то качать: гауссов сплэтинг работает прямо в браузере.
Так, ресурс Polycam предлагает создать сцену в браузере — нужно всего лишь выгрузить на сайт от 20 до 200 изображений в формате JPEG или PNG. Желательно следовать практикам съёмки для фотограмметрии: снимать со всех возможных углов, но так, чтобы два снимка перекрывали друг друга хотя бы на 50 %, не стесняться подходить поближе и снимать крупный план.
На странице poly.cam/gaussian-splatting уже собраны десятки сцен от пользователей. Чаще всего загружают разнообразные интересные объекты: живописные виды, дорогие автомобили и женщин в нижнем белье. Просмотр работает прямо в браузере. Также примеры работы гауссова сплэтинга в браузере выложили на gsplat.net.
Для гауссова сплэтинга усиленно пишется софт. Просмотрщики реализованы на WebGPU, WebGL, в том числе с хорошими оптимизациями, плагины для импорта — для Blender и Unity. Для Unreal плагин тоже есть, но сто́ит он $99,99.
Для гауссова сплэтинга на входе нужны только изображения. Это значит, что возможно очутиться на сцене кинофильма, если тот представлен с достаточного числа углов, а движений объектов мало или нет вовсе.
Фрагменты видеоролика 3D Gaussian Splatting from Hollywood Films! с видами отеля «Оверлук» и Хогвартса, сгенерированными гауссовым сплэтингом
Наконец, кто-то просто экспериментирует с гауссовым сплэтингом. Микроблогер
@ajayns_
выложил анимацию под названием Gaussian unsplatting. В ней точки падают в порядке дальности от камеры, и сцена разваливается на части.@ajayns_
В другом варианте Burning Gaussian splatting сцена с помощью шейдеров рождается из пламени, а затем сгорает обратно.
@Ruben_Fro
Подобно тому, как диффузионные модели заменили генеративно-состязательные сети в вопросах генерации контента, гауссов сплэтинг может вытеснить метод NeRF из его и без того узкой ниши. Случится это или нет, ответят исследователи в ближайшие месяцы.
Комментарии (13)
arTk_ev
19.10.2023 14:08+2Сам рендер - обычный splat-рендер. Главная проблема - это прозрачка, нет эффективных методов отрисовки. Разве что использовать стохастику.
Хранить на каждую точку целую сферическую гармонику - слишком жирно. Да и запеченный свет редко где нужен, лучше PBR и свое освещение.
Но за point cloud точно будущее. Уже сейчас они выгодны как по памяти, так и по эффективному gpu-рендеру.
iShrimp
19.10.2023 14:08Да, интересно, но тема светового поля так и не раскрыта (как облако размытых точек в 3-мерном пространстве имитирует отражения? Для этого нужен 5-мерный массив данных)
arTk_ev
19.10.2023 14:08При отражении там костыль иногда работает. Если зеркало фотограметрироваить, то оно будет как портал, и будет 2 комнаты. https://www.youtube.com/shorts/PzfbZbrbt48
Ну и там вместо цвета, используется сферическая гармоника, чтобы цвет зависел от направления взгляда.
Zara6502
19.10.2023 14:08+1кроме очевидных вещей вроде осмотра достопримечательностей, например сделать фото Стоунхенджа, как и фото для музейных экспонатов, появляются интересности для например фото с Марса и Луны, фото с глубины, а еще фото с места преступления.
вообще указано что лучше делать много кадров с перекрытием в 50%, но мне вот подумалось (я просто так сам делаю часто), а почему бы просто не снимать видео, а потом видео скармливать как отдельные фреймы/фото, это проще чем запоминать с каким ракурсом и перекрытием ты сделал фото или не сделал.
niktor_mpt
19.10.2023 14:08+1Можно сравнить стоп-кадры из видео и набор фото с тем же разрешением. Разница видна невооружённым взглядом. Следствие алгоритмов сжатия и смазывания при движении.
Мы же про цифровую съёмку, не киноплёнку?
Zara6502
19.10.2023 14:08Стэдикам, 8К, 200 фпс например или быстрее.
Например на глубине, где время погружения имеет значение, снять видео на несколько камер проще и быстрее, чем барахтаться в поиске ракурса.
Это спор ради спора, мне кажется озвученная идея имеет свои преимущества, я же не говорил об этом как о панацее.
VPryadchenko
19.10.2023 14:08+1Так и делают, но нужно хорошее качество видео. Я вот предпринял несколько попыток сделать автопортрет из видео, снятого на мой довольно старенький бюджетный телефон - получилось откровенно говоря не очень.
Sakhar
19.10.2023 14:08Это реализовано в lumalabs.ai - можно из своих видео instantngp/splatting сделать и повертеть в браузере. Даже на телефоне не тормозит.
По работе очень много ресерча на тему делаем, стандартный пайплайн как раз предполагает видео + colmap для определения положения камеры. Но основная цель сейчас - 6dof видео. Но пока проблемы очень существенные есть:
1. Генерация 6dof видео нужна без сложных кастомных установок на 30+ камер. В основном работы сейчас все на одних и тех же датасетах так как получать их долго.
Стриминг - форматы для 6dof видео в основном послойные и немного ущербные для pointcloud видео . С нерфами вообще беда была, splatting удобнее, но все равно много надо изобретать
Jury_78
Это не похоже на 3d сканер? Или тут используют случайные фото?