Автор: Глеб Бобровских Редактура: Давид Свитов

Введение

Gaussian Splatting — новый метод из области компьютерной графики для решения задачи novel-view synthesis (синтез изображений сцены с новых точек обзора). Он **показывает впечатляющие результаты как в качестве синтеза, так и в скорости обучения и отрисовки новых изображений в высоком разрешении. Результаты авторов привлекли внимание не только в научном сообществе, но и за его пределами: метод с подобными свойствами способен значительно ускорить и удешевить различные технологии в графике и приблизить распространение их приложений. Поэтому будет интересно разобраться, как появилась идея создания Gaussian Splatting и как он работает.

Предложенный алгоритм рождается из идеи соединить преимущества двух представлений сцены — явного (например, облако точек) и неявного (нейронного). Явное представление содержит геометрию сцены непосредственно в виде набора компонент, что повышает эффективность при проведении операций с данными, но требования к памяти стремительно растут при повышении детализации. Неявное представление, в свою очередь, инкапсулирует геометрию в нейронную сеть, которая позволяет увеличивать детализацию и реалистичность сцены, не требуя больших ресурсов памяти, но с возросшей вычислительная нагрузкой. И вот Gaussian splatting обьединяет в себе и эффективное использование памяти при создании детализированных и фотореалистичных рендеров и простоту необходимых вычислений.

Давайте рассмотрим, из каких ключевых компонент состоит Gaussian Splatting, для чего нужна и как работает каждая из них.

Подробнее о методе

Метод 3D Gaussians Splatting (далее — 3D GS) можно разделить на три основные составляющие:

Теперь разберем детально каждую компоненту.

3D Gaussians

Новое представление сцены строится из атомарных элементов — 3D гауссиан. Они ****задаются положением центра в пространстве, иначе говоря, средним $\mu = (x, y, z)^{\top}$ , матрицей ковариации $\Sigma$, а также цветом $c = (R, G, B)$ и степенью насыщенности $\sigma \in \mathbb{R}^{[0, 1]}$. Все параметры обучаемы и могут быть оптимизированы при помощи алгоритма обратного распространения ошибок. 3D гауссиан (совокупность этих элементов) задает radiance field — представление распределения света в пространстве сцены, которое можно описать отображением:

$$ L_{\text{3DGS}}: \mathbb{R}^{5} \rightarrow \mathbb{R}^{+}, \quad L_{\text{3DGS}}(x, y, z, \theta, \phi) = \sum_i G(x, y, z, \mathbf{\mu}_i, \mathbf{\Sigma}_i) \cdot c_i(\theta, \phi), $$

где $G(\hat{x}) = e^{-\frac{1}{2}(\hat{x})^{\top}\Sigma^{-1}(\hat{x})}$.

Важно отметить: при построении представления мы не использовали нейронные компоненты, что отличает этот подход от семейства NeRF.

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

Чтобы лучше понять, как выглядит новое представление сцены, представим несколько примеров ниже — от простого (с небольшим количеством компонент) к сложному (приближенному к реальности):

Рисунок 1. Одна гауссиана

Рисунок 1. Одна гауссиана

Рисунок 2. Три гауссианы

Рисунок 2. Три гауссианы

Рисунок 3. Семь миллионов гауссиан (полностью непрозрачные). Лучше смотреть с зумом

Рисунок 3. Семь миллионов гауссиан (полностью непрозрачные). Лучше смотреть с зумом

Почему мы используем именно гауссианы? Они обладают несколькими интересными для графики свойствами. Каждая гауссиана теоретически способна охватывать бесконечно большую часть пространства и может быть посчитана для любой точки. При этом каждая взятая точка представляет ограниченную область в пространстве, описываемую ковариацией и близкую к среднему. Кроме этого, гауссиана описывает анизотропную область — эллипсоид, повернутый и растянутый вдоль любого направления, что прекрасно подгоняется под геометрию любой сложности.