Введение в 3D-сглаживание по Гауссу

Введение в 3D-сглаживание по Гауссу' (Introduction to 3D Gaussian Smoothing)

3D Гауссово сглаживание – это техника растеризации, описанная в статье “3D Гауссово сглаживание для рендеринга радиационного поля в реальном времени”, которая позволяет в реальном времени визуализировать фотореалистичные сцены, созданные на основе небольших выборок изображений. В данной статье рассматривается, как это работает и что это означает для будущего графики.

Посмотрите пример сцены Гауссова сглаживания в удаленном пространстве Gaussian Viewer здесь или встроенный ниже.

Что такое 3D Гауссово сглаживание?

3D Гауссово сглаживание – это в основном техника растеризации. Это означает:

  1. Иметь данные, описывающие сцену.
  2. Отобразить данные на экране.

Это аналогично растеризации треугольников в компьютерной графике, которая используется для отрисовки множества треугольников на экране.

Однако, вместо треугольников используются гауссианы. Вот одна из них с растеризацией, с границей для большей наглядности.

Она описывается следующими параметрами:

  • Позиция: где она находится (XYZ)
  • Ковариация: как она растянута/масштабирована (матрица 3×3)
  • Цвет: какой цвет (RGB)
  • Альфа: прозрачность (α)

На практике одновременно отрисовывается несколько гауссианов.

Вот три гауссиана. А что насчет семи миллионов гауссианов?

Вот как это выглядит, когда каждый гауссиан полностью непрозрачен:

Это очень краткий обзор того, что такое 3D Гауссово сглаживание. Теперь давайте рассмотрим полную процедуру, описанную в статье.

Как это работает

1. Восстановление структуры движения

Первый шаг – использовать метод восстановления структуры движения (SfM) для оценки облака точек по набору изображений. Это метод оценки трехмерного облака точек по набору двухмерных изображений. Это можно сделать с помощью библиотеки COLMAP.

2. Преобразование в гауссианы

Затем каждая точка преобразуется в гауссиан. Этого уже достаточно для растеризации. Однако из данных SfM можно вывести только позицию и цвет. Чтобы получить представление, которое дает высококачественные результаты, нам нужно его обучить.

3. Обучение

Процедура обучения использует стохастический градиентный спуск, аналогичный нейронной сети, но без слоев. Шаги обучения следующие:

  1. Растеризовать гауссианы в изображение с помощью дифференцируемой гауссовой растеризации (подробнее об этом позже)
  2. Рассчитать потерю на основе разницы между растеризованным изображением и исходным изображением
  3. Изменить параметры гауссианов в соответствии с потерей
  4. Применить автоматическое уплотнение и обрезку

Шаги 1-3 концептуально довольно просты. Шаг 4 включает следующее:

  • Если градиент для заданного гауссиана слишком велик (т.е. он слишком неправильный), разделить/клонировать его
    • Если гауссиан маленький, склонировать его
    • Если гауссиан большой, разделить его
  • Если альфа гауссиана становится слишком маленькой, удалить его

Эта процедура помогает гауссовым функциям лучше соответствовать мелким деталям, одновременно обрезая ненужные гауссовы функции.

4. Дифференцируемая гауссова растеризация

Как уже упоминалось ранее, 3D гауссова растеризация является подходом к растеризации, который отображает данные на экран. Однако, некоторые важные элементы также заключаются в следующем:

  1. Быстро
  2. Дифференцируемо

Исходная реализация растеризатора можно найти здесь. Растеризация включает в себя следующее:

  1. Проекция каждой гауссовой функции в 2D с точки зрения камеры.
  2. Сортировка гауссовых функций по глубине.
  3. Для каждого пикселя итерация по каждой гауссовой функции с переднего плана к заднему, смешивая их вместе.

Дополнительные оптимизации описаны в статье.

Также важно, чтобы растеризатор был дифференцируемым, чтобы его можно было обучать с помощью стохастического градиентного спуска. Однако это относится только к обучению – обученные гауссовы функции также могут быть визуализированы с помощью недифференцируемого подхода.

Кому это важно?

Почему 3D гауссова растеризация привлекает так много внимания? Очевидный ответ в том, что результаты говорят сами за себя – это высококачественные сцены в реальном времени. Однако, возможно, есть и другие аспекты истории.

Существует много неизвестных факторов относительно того, что еще можно сделать с гауссовой растеризацией. Можно ли их анимировать? Предстоящая статья Dynamic 3D Gaussians: tracking by Persistent Dynamic View Synthesis предлагает, что это возможно. Есть и множество других неизвестных. Могут ли они отражаться? Можно ли их моделировать без обучения на эталонных изображениях?

Наконец, растет интерес к исследованиям в области Embodied AI. Это область исследования в области AI, где современная производительность все еще на несколько порядков ниже человеческой производительности, и главной сложностью является представление трехмерного пространства. Учитывая, что 3D гауссова растеризация дает очень плотное представление трехмерного пространства, какие могут быть последствия для исследований в области Embodied AI?

Эти вопросы привлекают внимание к методу. Остается увидеть, каков будет реальный эффект.

Будущее графики

Что это означает для будущего графики? Давайте разделим это на плюсы/минусы:

Плюсы

  1. Высококачественные фотореалистичные сцены
  2. Быстрая растеризация в режиме реального времени
  3. Относительно быстрое обучение

Минусы

  1. Высокое использование VRAM (4 ГБ для просмотра, 12 ГБ для обучения)
  2. Большой размер диска (1 ГБ+ для сцены)
  3. Несовместимость с существующими графическими конвейерами
  4. Статичность (пока что)

Пока что оригинальная реализация CUDA не была адаптирована для производственных графических конвейеров, таких как Vulkan, DirectX, WebGPU и т. д., поэтому остается увидеть, каков будет реальный эффект.

Уже были сделаны следующие адаптации:

  1. Удаленный просмотрщик
  2. Просмотрщик WebGPU
  3. Просмотрщик WebGL
  4. Просмотрщик Unity
  5. Оптимизированный просмотрщик WebGL

Они либо основаны на удаленном потоковом воспроизведении (1), либо на традиционном подходе, основанном на четырехугольниках (2-5). Хотя подход, основанный на четырехугольниках, совместим с десятилетиями графических технологий, он может привести к более низкому качеству/производительности. Однако, просмотрщик №5 демонстрирует, что приемы оптимизации могут привести к высокому качеству/производительности, несмотря на подход, основанный на четырехугольниках.

Так будет ли 3D гауссова растеризация полностью реализована в производственной среде? Ответ, вероятно, положительный. Основным узким местом является сортировка миллионов гауссовых функций, которая эффективно выполняется в оригинальной реализации с использованием сортировки радиксового устройства CUB, высокооптимизированной сортировки, доступной только в CUDA. Однако, с достаточными усилиями, безусловно, можно достичь такого уровня производительности в других графических конвейерах.

Если у вас есть вопросы или вы хотите принять участие, присоединяйтесь к Hugging Face Discord!