← На главную

.splat4d сжимает динамические 3D-сцены до 58 раз и стримит через HTTP

04.07.2026 15:49 · hackernews

Разработчики представили формат .splat4d — он сжимает динамические 3D-сцены из гауссовых сплаттингов в 16–58 раз сильнее сырых .splat-файлов и в 14–20 раз эффективнее gzip. Кодирование идёт со скоростью ~640 МБ/с, а готовый файл можно стримить через обычный HTTP с поддержкой заголовка Range — никаких манифестов или видеоконтейнеров не нужно.

В основе формата лежит несколько трюков. Сначала сцена делится на статический и динамический фон: неподвижные сплаты сохраняются один раз, и вся 1,6‑ГБ последовательность ужимается до нескольких мегабайт. Динамические сплаты обновляются только когда реальное значение выходит за заданные границы — так называемые deadband‑треки убивают мерцание при квантизации и делают временные разности почти нулевыми. Дальше идут закрытые GOP по H.265: ключевые кадры через каждые N фреймов, а между ними P-кадры с точными целочисленными дельтами. Каждый чанк декодируется независимо, поэтому произвольный доступ работает без перемотки соседних кусков. Внутри чанка ключевые потоки лежат раньше дельт — на поиск достаточно запросить ~10% чанка, чтобы мгновенно показать ключевой кадр. Энтропийное кодирование использует порядок Мортона, зигзаг-дельта, байтовую перетасовку (как Blosc) и zstd — выход близок к энтропии нулевого порядка.

Структура файла простая: маленький заголовок с JSON (границы, шаги квантизации, таблица чанков с абсолютными байтовыми смещениями), затем статическая секция (маски и базовые значения — её загружаешь один раз и видишь всю сцену) и один чанк GOP на каждую секунду видео. Ошибки всех атрибутов каждого сплата — детерминированные, поточечные, в заданных пользователем пределах: положение ±2 мм, цвет ±4/255, непрозрачность ±4/255, вращение точное, масштаб ±2%. Математика основана на SZ/ZFP-квантизации с шагом 2×bound, после чего всё переходит в целые числа — дельты не дрейфуют, и декодеры на Rust и JavaScript восстанавливают бит-в-бит одинаковые значения.

В бенчмарках на восьми последовательностях из трёх пайплайнов захвата (CMU Panoptic dome, Neu3D/SpacetimeGaussians, Technicolor) .splat4d с параметрами по умолчанию превзошёл gzip-9 в 14–20 раз, а лучший универсальный lossless (zstd с большим окном) — в 2,5 раза. Для просмотра написан WebGPU-вьюер, порт рендерера antimatter15/splat — при локальном доступе первый кадр появляется за 141–157 мс, при перемотке в непрогретую область ключевой кадр за 145 мс, воспроизведение 60 FPS при 336 тысячах сплатов. Для создания файла достаточно установить pip install splats4d и запустить splat4d encode -i frames_dir -o out.splat4d — из серии .splat-кадров получается один компактный, стриминг-готовый файл.

Читать оригинал →