Kris

Практическое руководство по 3D Gaussian Splatting (3DGS): принципы, ловушки и конвертация в меш

Gaussian Splatting3DGSОблако точекWebGLWebGPUКонвертация полигональной сетки

За последний год 3D Gaussian Splatting (3DGS) буквально захватил мир 3D-рендеринга. Куда ни глянь — в VK или Telegram — везде демонстрируют невероятно реалистичные сцены в реальном времени, и многие уже кричат: «Эта технология похоронит традиционное моделирование и NeRF!»

Но когда мы пытаемся применить её в реальных проектах, оказывается, что разрыв между ожиданием и реальностью (тот самый «эффект рекламы и реального товара») огромен. Сегодня разберёмся с фундаментальной логикой 3DGS и малоизвестными граблями на практике.

Техническое измерениеТрадиционная фотограмметрия3D Gaussian Splatting (3DGS)
МировоззрениеЖёсткие поверхности: треугольные полигоны + PBR-текстурыМягкий туман: миллионы полупрозрачных эллипсоидов, светящихся под разными углами
Скорость рендерингаОчень высокая (традиционный GPU-растеризатор справляется без проблем)Очень высокая (сортировка по глубине с помощью GPU + наложение)
Редактирование и физика моделиЧрезвычайно зрелое (коллизии, скелетная анимация)Почти невозможно редактировать (просто облако точек, коллизий не сделать)
Отражения и бликиТребуют сложных шейдеров, часто выглядят сухо и неестественноЧрезвычайно реалистичны: отражения на воде и стекле естественно меняются с углом обзора
Поддержка 3D-печатиВстроенная поддержка (уже закрытый меш, твёрдое тело)Невозможно печатать напрямую (требуется мучительное извлечение и преобразование)

Смотрим в корень: что такое 3DGS?

Простыми словами, 3DGS отбрасывает традиционное правило «точки соединяются в линии, линии – в полигоны». Вместо этого он использует множество «светящихся клубочков шерсти» (гауссовых ядер), которые можно растягивать, сжимать, делать прозрачными и менять цвет в зависимости от угла обзора. Из них буквально «слепляется» сцена.

Каждое гауссово ядро содержит: положение, поворот (кватернион), масштаб (ковариационная матрица), непрозрачность и цвет (сферические гармоники SH). Этот подход крайне хитер. Поскольку не нужно вычислять сложные преломления при трассировке лучей, достаточно отсортировать эти эллипсоиды по расстоянию и рисовать их слой за слоем от дальних к ближним. На обычной видеокарте можно получить бешеные 100+ FPS.

Суровая реальность Splat-файлов в вебе

Демо-видео выглядят круто, но когда дело доходит до размещения 3DGS на веб-странице для клиента, первое препятствие — размер файла и взрыв видеопамяти.

  • Стандартный PLY: сохраняет полную точность координат и старшие порядки сферических гармоник (Spherical Harmonics, SH). Если используются SH 3-го порядка, каждое ядро требует 45 чисел с плавающей точкой для цвета, меняющегося с углом обзора. Сцена размером 100 кв. м легко весит более 800 МБ.
  • Формат SPLAT: обрезает сложные цветовые вариации (понижает до SH 0-го порядка, т.е. однородный цвет). Размер сжимается до ~250 МБ. Жертвуется реалистичная игра света и тени в обмен на уменьшение объёма.
  • Форматы SPZ / KSPLAT: агрессивное квантование и сжатие, созданные специально для мобильных устройств. Могут сжиматься до ~30 МБ.

Наши граничные тесты: современные мобильные браузеры (например, Safari на iPhone) с трудом плавно рендерят от 300 000 до 800 000 гауссовых ядер. Если в вашей сцене больше 1 млн ядер или вы напрямую загружаете в веб сотни мегабайт PLY-файла без конвертации в SPZ, мобильные устройства, скорее всего, просто покажут белый экран или упадут.

Чтобы проверить возможности своего устройства, можете прямо сейчас загрузить локальный файл в наш Any3D Splat Viewer. Рендеринг полностью на стороне браузера с использованием WebGL или WebGPU, без нагрузки на сервер.

Самое больное: преобразование 3DGS в меш (сетку)

Многие пользователи, отсняв сцену, первым делом думают: «Круто! Надо сконвертировать в STL и напечатать!» или «Закинуть в Blender и добавить анимацию персонажа!».

Суровая правда: конвертация 3DGS в меш — это техническое болото.

Поскольку гауссовы ядра по сути — светящиеся полупрозрачные облачка, традиционные алгоритмы извлечения поверхностей (например, Poisson Reconstruction) сталкиваются с фатальной геометрической неоднозначностью при работе с не-твёрдыми телами:

  • Катастрофа со стеклом и водой: прозрачное стекло, которое в 3DGS выглядит невероятно реалистично, алгоритм воспринимает как некое парящее твёрдое тело. При конвертации в меш получаются дыры и рваные края, словно что-то погрызли.
  • Плавающие шумы (Floaters): гауссовы ядра, которые не до конца сошлись при обучении, создают хаотичные размытые точки в воздухе. При извлечении сетки на небе появляются десятки парящих «метеоритов».
  • Волосы и тонкие ветки: полностью проваливаются, превращаясь в грубую кашу.

Если в вашей сцене много отражающих материалов или тонких структур, сильно снизьте ожидания от результата сетки. Принудительная конвертация обычно даёт лишь «обезображенную грязь».

Часто задаваемые вопросы и практические стратегии

Стоит ли снимать видео на телефон или делать фотографии для обучения?

Подойдут оба варианта, но ключевое — перекрытие и траектория. Из практики: снимите плавное круговое видео на 4K 60fps, обходя объект, а затем извлекайте кадры каждые 10 кадров. Это даст лучший результат, чем 200 фотографий, сделанных дрожащими руками (размытие движения — смертельный враг 3DGS). Важно: обязательно снимайте по кругу, не стойте на месте и не вращайте камеру.

Как сделать физические коллизии при импорте в игровой движок?

Не надейтесь использовать гауссовы ядра для коллизий. Сейчас в Unreal Engine 5 и Unity принят такой подход: визуальную часть рисуют с помощью 3DGS, а снаружи помещают грубый невидимый бокс (Box) или низкополигональную модель, используя традиционный меш в качестве коллайдера.

Могу ли я использовать свою лидарную точку облака с этой технологией?

Обычное облако точек LiDAR содержит только координаты XYZ и однородный отражённый цвет, без информации о световом поле, зависящем от угла обзора. Такие данные не позволяют обучить параметры сферических гармоник. Вы можете просмотреть традиционное облако точек в нашем Any3D PLY Viewer, но для демонстрации «переливающегося» очарования 3DGS необходимо пройти полный цикл обучения на основе мультиракурсных изображений (с предварительной обработкой COLMAP).

Поддержите нас