Руководство

Глава 8 — Форматы экспорта

Export-Format-Auswahl im Simple-Modus — sechs Format-Karten: PLY, SPZ, glTF, .splat, Orbit Video, Web Viewer
Выбор формата экспорта в простом режиме — шесть карточек форматов (PLY, SPZ, glTF, .splat, Orbit Video, Web Viewer). Экспертный режим показывает тот же выбор в виде более плотной сетки с большим числом целей.
Export-Abschnitt mit dem Format-Raster — neun Kacheln mit Größenangabe: PLY 2,2 MB (ausgewählt), cPLY 142 KB, SOG 89 KB, SPZ 216 KB, glTF 2,1 MB, .splat 279 KB, Video Zero KB, Wiggle Zero KB, Web 378 KB; darunter der Knopf „Export PLY (3DGS Standard)“ und „Upload to SuperSplat…“
Раздел экспорта с сеткой форматов — девять плиток с указанием размера: PLY 2,2 МБ (выбрано, обведено синим), cPLY 142 КБ, SOG 89 КБ, SPZ 216 КБ, glTF 2,1 МБ, .splat 279 КБ, Video Zero KB, Wiggle Zero KB и Web 378 КБ; под ними синяя кнопка «Export PLY (3DGS Standard)" и пункт „Upload to SuperSplat…"

Что видно на изображении: Размер под каждой карточкой формата рассчитывается динамически из текущего числа гауссиан и накладных расходов формата — не захардкожен. Из одной и той же сцены получаются 2,2 МБ PLY, 142 КБ cPLY, 89 КБ SOG, 216 КБ SPZ, 2,1 МБ glTF и 279 КБ .splat; Web получается больше, 378 КБ, потому что там вьюер встроен прямо в файл. Video и Wiggle показывают «Zero KB», потому что размер становится известен только после кодирования. Выбранная плитка обведена синим, а кнопка под ней принимает её название — здесь «Export PLY (3DGS Standard)". Под заголовком стоит строка «Leveling the floor turns the view at once; the chosen orientation and format apply when saving".

Завершённое обучение даёт облако гауссиан — набор из нескольких сотен тысяч до миллионов 3D-гауссовых распределений, которые вместе реконструируют сцену. Эта глава описывает десять способов записать это облако на диск. Шесть из них — чистые форматы 3D-данных (PLY, Compressed PLY, SPZ, SOG, glTF, .splat), один объединяет облако с готовым HTML-вьюером (Web Viewer), один рендерит MP4-файл из орбитального пролёта камеры (Orbit Video), а два экспортируют не содержимое гауссиан, а лишь результат SfM (позиции камер и грубое облако точек) для повторного использования в других пайплайнах обучения (transforms.json + рабочая область COLMAP).

Восемь из этих способов доступны в разделе экспорта как плитка — transforms.json и рабочая область COLMAP находятся только в меню. Кроме того, сетка содержит девятую плитку Wiggle, и под кнопкой экспорта стоит Upload to SuperSplat…, которая отправляет сцену не в файл, а напрямую в редактор SuperSplat в сети.

Какой формат подходит в каком случае, зависит от цели. Для архивирования полных данных без потери качества берётся PLY. Для веб-вьюеров на собственном сайте обычно достаточно .splat или встроенного веб-вьюера. Если файл должен быть минимальным, стоит выбрать SPZ или SOG. Для повторного использования результата SfM в Nerfstudio, Postshot или Brush подходящими путями являются transforms.json и рабочая область COLMAP.

Все функции экспорта находятся в меню «Export», а также в простом режиме на последнем шаге мастера. Большинство форматов полностью совместимы с песочницей и работают в версии из App Store. Только SOG требует внешний бинарник (cwebp), который в сборке App Store не обязательно присутствует — подробности см. E4.

E1 — PLY (.ply)

ГДЕ

Строка меню → Export → 3D Formats → Export PLY… (⌘E). Простой режим: шаг мастера Export → карточка формата «PLY». Размер: обычно 100 % (эталонное значение). Совместимо с: SuperSplat, PolyCam, всеми вьюерами 3DGS.

ТЕХНИЧЕСКИ

PLY — каноничный формат хранения для 3D Gaussian Splatting. RadianceKit записывает бинарный файл с порядком байт little-endian со стандартизированным свойств-макетом 3DGS: на каждую гауссиану трёхкомпонентная позиция, три всегда обнулённые нормали, три DC-SH-коэффициента (f_dc_0..2) для базового RGB-цвета, далее до 45 дополнительных SH-коэффициентов (f_rest_0..44) в транспонированном порядке channel-major, определённом статьёй Kerbl 2023 (сначала все коэффициенты канала R, потом все G, потом все B), затем логит-непрозрачность (сырые pre-sigmoid значения), три масштаба в log-пространстве и вращение в виде wxyz-кватерниона. Максимальный экспортируемый SH-градус ограничивается минимумом из желания пользователя и фактически выученного градуса; по умолчанию 3 (45 дополнительных коэффициентов). Перед записью размер полезной нагрузки вычисляется в 64-битном целом, чтобы отловить переполнение при экстремально больших облаках. Файл записывается атомарно, что при больших облаках временно занимает вдвое больше места на диске.

E2 — Compressed PLY (.ply)

ГДЕ

Строка меню → Export → 3D Formats → Export Compressed PLY…. Простой режим: карточка формата «Compressed PLY». Размер: около 10–20 % от PLY (5–10-кратное сжатие). Совместимо с: SuperSplat, движком PlayCanvas, веб-вьюерами.

ТЕХНИЧЕСКИ

Вариант формата PLY от PlayCanvas с чанковой квантизацией. Гауссианы группируются в чанки по 256 штук. На каждый чанк отдельно в заголовок записываются границы min/max для позиции, масштаба и цвета; отдельные гауссианы ссылаются на свои значения относительно этих границ и сжимаются до 32 бит каждая: позиция и масштаб с упаковкой 11-10-11 бит, вращение как кватернион «Smallest-Three» 2-10-10-10 бит, цвет как RGBA 8-8-8-8. Более высокие SH-коэффициенты квантизируются всего в 8 бит на компоненту (три байта на коэффициент и гауссиану). Сам формат по-прежнему остаётся ASCII-заголовочным PLY, и его в принципе можно валидировать инструментами для PLY, но свойства вершин объявлены как поля uint. SH-градус по умолчанию равен 0 (без дополнительных коэффициентов), чтобы максимизировать сжатие — более высокие SH-градусы можно выбрать явно.

E3 — SPZ (.spz)

ГДЕ

Строка меню → Export → 3D Formats → Export SPZ…. Простой режим: карточка формата «SPZ». Размер: около 10 % от PLY (на 90 % меньше). Совместимо с: Niantic Scaniverse, Niantic Spatial Fields, MetalSplatter.

ТЕХНИЧЕСКИ

Формат SPZ v2 от Niantic. Позиции упаковываются как 24-битное фиксированное число (это даёт разрешение около 0,25 мм), масштабы — как 8-битная квантизация в log-пространстве, вращения — как 8-битный Smallest-Three (в v2 сохраняются только xyz, w выводится в декодере из нормы кватерниона), непрозрачности — сигмоидированные 8-битные значения. DC-SH сохраняется по специфичной для SPZ формуле упаковки (dc_raw * 0.15 * 255 + 0.5 * 255), более высокие SH-полосы — по 5 бит (полоса 1) и 4 бита (полосы 2-3) на коэффициент. Весь упакованный бинарный блоб затем сжимается стандартным gzip (RFC 1952), что даёт контейнерный формат gzipped с магическими байтами 1f 8b. RadianceKit вызывает для этого системный gzip, потому что встроенный Apple zlib-API создаёт проприетарное фрейминг-обрамление Apple, несовместимое с ридерами SPZ в Spatial Fields или MetalSplatter. Системный gzip остаётся запускаемым и внутри песочницы macOS.

E4 — SOG (.sog)

ГДЕ

Строка меню → Export → 3D Formats → Export SOG…. Простой режим: карточка формата «SOG». Размер: около 5–6 % от PLY (15–20-кратное сжатие — самый компактный вариант). Совместимо с: движком PlayCanvas, редактором SuperSplat.

ТЕХНИЧЕСКИ

«Spatially Ordered Gaussians» — формат PlayCanvas, который хранит облако GPU-ready в нескольких lossless-изображениях WebP. Сначала все гауссианы сортируются пространственно по 3D-коду Мортона (30-битный Z-порядок, по 10 бит на ось), что даёт изображениям впоследствии лучшую cache-локальность в рендерере. Затем позиции квантизируются с симметричной логарифмической трансформацией (для лучшего динамического диапазона) до 16-битных значений и разделяются на два изображения RGBA (means_l.webp для нижних 8 бит, means_u.webp для верхних). Вращения кодируются как Smallest-Three с 3×8 бит плюс 2-битным режимом в одном изображении RGBA (режим попадает в альфа-канал как 252 + largest). Масштабы и DC-SH квантизируются с помощью кодовой книги на 256 записей каждый (распределённой по перцентилям по всем значениям), индексы попадают в scales.webp и sh0.webp. Пять изображений плюс meta.json с кодовыми книгами и границами упаковываются в ZIP-файл (собственный кодировщик, потому что песочница блокирует системный zip) и сохраняются с расширением .sog.

Внимание, песочница: SOG — единственный вариант формата, который требует внешний бинарник. Стадия кодирования WebP вызывает cwebp из /usr/local/bin/cwebp или /opt/homebrew/bin/cwebp. Если бинарник cwebp не найден, код откатывается на кодирование в сыром PNG — но: резервное копирование PNG не работает в SuperSplat. В версии из App Store доступность оценивается по варианту сборки; в версии для разработчиков cwebp должен быть установлен через Homebrew (brew install webp).

E5 — glTF (.glb)

ГДЕ

Строка меню → Export → 3D Formats → Export glTF…. Простой режим: карточка формата «glTF». Размер: сопоставим с PLY. Совместимо с: вьюерами glTF с расширением KHR_gaussian_splatting (черновой стандарт Khronos).

ТЕХНИЧЕСКИ

Записывает самодостаточный бинарный файл .glb (без отдельного приложенного bin-файла) согласно спецификации расширения KHR_gaussian_splatting. Позиции сохраняются как обычные вершинные данные glTF POSITION (float3), все остальные атрибуты (вращение как float4, масштаб как float3, непрозрачность как float, SH-коэффициенты как float3 × shCoeffCount) лежат в дополнительных вершинных атрибутах и указываются через расширение. Важно: glTF использует правостороннюю систему координат Y-up, а COLMAP/3DGS работает в Y-down/Z-forward. Поэтому экспортёр применяет поворот на 180 градусов вокруг оси X — позиции переписываются как (x, -y, -z), кватернионы приводятся к (w, x, -y, -z). Это даёт геометрически корректное, неотзеркаленное представление во вьюерах glTF. JSON- и бинарные чанки дополняются до выравнивания в 4 байта, как того требует стандарт GLB.

E6 — Splat (.splat)

ГДЕ

Строка меню → Export → 3D Formats → Export .splat…. Простой режим: карточка формата «.splat». Размер: ровно 32 байта на гауссиану. Совместимо с: gsplat.js, веб-вьюерами (референс antimatter15), большинством браузерных демо 3DGS.

ТЕХНИЧЕСКИ

Формат .splat от antimatter15 — 32 байта на гауссиану, без заголовка, без косвенной адресации. Расположение на запись: 3 × float32 позиция (мировые координаты), 3 × float32 масштаб (экспоненциально преобразованный из log-пространства внутреннего буфера), 4 × uint8 цвет RGBA (DC-SH-коэффициент, масштабированный с SH_C0 = 0.282... и обрезанный до [0,255]), 4 × uint8 кватернион (w,x,y,z, нормализованный и закодированный в байтовый диапазон как 128 + 128*q). Сохраняется только DC-SH — более высокие SH-полосы отбрасываются. Это делает формат крайне компактным, но стоит изменений цвета, зависящих от угла обзора, которые проявляются при отражениях или спекулярных бликах. Порядок записи в точности соответствует порядку индексов облака (без пространственной сортировки), веб-вьюеры вроде gsplat.js рендерят исходя из этого.

Web Viewer geöffnet im Firefox — Bjoerns Bouquet-Splat gerendert mit umgebenden Kamera-Marker-Sphären, Browser-Tab-Bar oben sichtbar, kein CDN-/Server-Setup nötig
Web-вьюер, открытый в Firefox — сплат «Bjoerns Bouquet», отрендеренный с окружающими сферами-маркерами камер, панель вкладок браузера видна сверху, без настройки CDN/сервера. Самостоятельный flowers-01.html, открытый прямо из Finder двойным щелчком в браузере по умолчанию — встроенная программа WebGL2 рендерит облако гауссиан сразу, без сети или сервера. Чёрные маркеры вокруг букета — это камеры обучения, которые можно опционально показать. Перетаскивание мышью вращает, прокрутка масштабирует.

E7 — Web Viewer (.html)

ГДЕ

Строка меню → Export → Media → Export Web Viewer…. Простой режим: карточка формата «Web Viewer». Размер: данные сплата в кодировке base64 (≈ 4/3 накладных расходов) + около 5 КБ оболочки HTML/JS. Совместимо с: любым современным браузером с WebGL2 (все десктопы, iOS 15+, Android 5+).

ТЕХНИЧЕСКИ

Объединяет облако гауссиан с полностью встроенным рендерером WebGL2 в единый файл .html. Нет никаких зависимостей от CDN, нет WASM, нет второго файла. Облако сначала кодируется внутренне как бинарник .splat (та же 32-байтная логика, что и в E6), затем встраивается в base64, затем декодируется atob в браузере. Встроенный рендерер выполняет собственную сортировку WebGL2, управление орбитой мышью и CPU-сортировку на каждый кадр; весь код JS (шейдеры, математика, цикл) виден в выходном HTML. Соглашение об осях на границе между хранением и рендерером в точности то же, что в E5: позиция (x, -y, -z), кватернион (w, x, -y, -z). По желанию можно показать наложение брендинга (переключатель бесплатного тарифа). Так как всё встроено, файл работает и прямо из протокола file:// — для тестирования не нужен локальный веб-сервер.

Einzelframe extrahiert aus flowers-01.mp4 — Bjoerns Bouquet im Profil-Render, weiße Plattform mit Kamera-Markern sichtbar, schwarzer Hintergrund — typischer Orbit-Kamerafahrt-Frame ca. 5s in den Video-Lauf
Отдельный кадр, извлечённый из flowers-01.mp4 — «Bjoerns Bouquet» в профильном рендере, белая платформа с видимыми маркерами камер, чёрный фон (фон вьюпорта по умолчанию, изменяемый в настройках). Камера облетает сцену по параметрической траектории (наклон и расстояние фиксированы, рыскание вращается), продолжительность обычно 6–10 секунд при 30 или 60 fps. Разрешение кадра масштабируется от 480p до 8K в зависимости от выбранной предустановки видео.

E8 — Orbit Video (.mp4/.mov)

ГДЕ

Строка меню → Viewport → Record Turntable Video ИЛИ Строка меню → Export → Media → Export Orbit Video…. Простой режим: карточка формата «Orbit Video» со слайдером длительности 3–30 с. Размер: зависит от длительности, разрешения, битрейта. Совместимо с: всеми платформами (H.264 и HEVC — стандарт Apple).

ТЕХНИЧЕСКИ

Рендерит облако гауссиан вдоль параметрического орбитального пролёта камеры и кодирует каждый кадр через AVAssetWriter в файл MP4 или MOV. Конфигурация орбиты управляет числом оборотов, расстоянием, наклоном, полем зрения, длительностью и коэффициентом ease-in/out. Экспорт Orbit Video проходит через СОБСТВЕННУЮ стадию рендеринга RadianceKit с полной оценкой SH — пиксель в пиксель совпадающую с вьюпортом внутри приложения (WYSIWYG). Для каждого кадра матрица подгонки мира (вычисляемая рендерером для поворота внутренних координат в Y-up-мир орбиты) умножается на камеру, после чего применяется отражение преобразования камеры (Y-up орбиты → Y-down COLMAP). Целевой буфер для оффскрин-рендеринга протягивается через IOSurface в CVPixelBuffer для кодировщика. Кодировщик поддерживает H.264 и HEVC, настраиваемый битрейт и разрешение от 480p до 8K. Перед первым кадром рендерер ждёт 200 мс, чтобы завершилась начальная сортировка сплатов. Этот экспорт ограничен производительностью GPU — при 8K и миллионах гауссиан время рендеринга на кадр составляет несколько секунд, то есть возможно общее время рендеринга 10–30 минут для видео длиной 6 с.

E9 — SfM Transforms (transforms.json)

ГДЕ

Строка меню → Export → Photogrammetry → Export SfM (transforms.json)…. Размер: обычно 1–10 КБ (только позы + внутренние параметры, без изображений, без гауссиан). Совместимо с: nerfstudio, Brush, gsplat, OpenSplat, Meshroom, всеми современными feed-forward-тренерами 3DGS.

ТЕХНИЧЕСКИ

Записывает формат transforms.json от nerfstudio со списком поз камер плюс общие внутренние параметры. Для каждой камеры матрица вида (внутри RadianceKit: world-to-camera в конвенции COLMAP) инвертируется, затем камеро-локальные базовые векторы Y и Z отражаются, чтобы преобразовать в конвенцию nerfstudio (стиль OpenGL, камера смотрит вдоль -Z, +Y сверху). Финальная матрица 4×4 попадает как вложенный массив double в row-major в поле transform_matrix каждого кадра. Внутренние параметры сохраняются на верхнем уровне (фокусные расстояния x/y, главная точка x/y, ширина/высота изображения, camera_model = "OPENCV", плюс коэффициенты дисторсии k1, k2, p1, p2) — за исключением случая, когда экспортёр обнаруживает несколько разных наборов внутренних параметров, тогда они записываются на каждый кадр. Пути к изображениям записываются как images/<filename> относительно JSON-файла; пользователь должен создать соседнюю папку images/ с фотографиями обучения.

E10 — COLMAP Workspace (sparse/0/)

ГДЕ

Строка меню → Export → Photogrammetry → Export SfM (COLMAP Workspace)…. Размер: три бинарных файла вместе обычно 4–8 МБ — points3D.bin доминирует (одна строка на 3D-точку разреженного облака), images.bin и cameras.bin каждый значительно меньше 100 КБ. Совместимо с: самим COLMAP, Nerfstudio, Postshot, Meshroom, всеми инструментами, ожидающими каталог sparse/ COLMAP.

ТЕХНИЧЕСКИ

Записывает стандартный макет COLMAP sparse/0/ с тремя бинарными файлами: cameras.bin, images.bin, points3D.bin. Референс формата — официальная документация COLMAP. cameras.bin содержит дедуплицированный список внутренних параметров (камеры с идентичными внутренними параметрами + размером изображения объединяются в одну запись); используемая модель камеры — OPENCV (модель 4), с fx/fy/cx/cy плюс четыре коэффициента дисторсии k1/k2/p1/p2. images.bin перечисляет для каждого изображения позу в виде кватерниона wxyz плюс перенос, за которым следует идентификатор камеры и имя файла; 2D-3D-соответствия не сохраняются. points3D.bin содержит облако точек SfM с позицией, цветом (RGB 0-255) и значениями по умолчанию для репроекции и длины трека. Всё записывается в little-endian. Повторный импорт в RadianceKit работает через меню File → «Import COLMAP/Metashape Workspace…» (см. Q3 в главе о бэкенде SfM).

Welches Format wann?

ZielFormat
Web-Viewer auf eigener SeiteE7 Web Viewer (.html)
Web-Viewer mit gsplat.jsE6 Splat (.splat)
Pipeline-Wiederverwendung in Postshot / NerfstudioE9 transforms.json + E10 COLMAP Workspace
SuperSplat-BearbeitungE1 PLY oder E2 Compressed PLY
Niantic Scaniverse / Spatial FieldsE3 SPZ
Maximale KompressionE4 SOG (cwebp erforderlich)
Marketing-/Social-VideoE8 Orbit Video
Szene im Netz weiterbearbeitenSchaltfläche „Upload to SuperSplat…" unter dem Format-Raster

Быстрое сравнение

ФорматРасширениеSandboxРазмер (1M Gauss)Лучшее применение
E1 PLY.plyда~250 MBАрхив, максимальная совместимость
E2 Compressed PLY.plyда~40 MBWeb + SuperSplat
E3 SPZ.spzда (запуск gzip)~40 MBNiantic + мобильные устройства
E4 SOG.sogусловно (cwebp)~20 MBМаксимальное сжатие
E5 glTF.glbда~250 MBКонвейер Khronos
E6 Splat.splatда~32 MBВеб-просмотрщик gsplat.js
E7 Web Viewer.htmlда~45 MBАвтономный файл браузера
E8 Orbit Video.mp4/.movдапеременныйСоцсети/маркетинг
E9 SfM Transforms.jsonда~5 KBПередача поз
E10 COLMAP WorkspaceКаталогда~4–8 MBПередача поз (бинарно)

Столбец «Размер» содержит приблизительные ориентировочные значения для 1 млн Gaussians со степенью SH 3. Реальные значения варьируются в зависимости от сжимаемости сцены; степень SH 0 уменьшает PLY/glTF в 4 раза.