PlayCanvas выпустила новую версию редактора SuperSplat

PlayCanvas выпустила новую версию редактора SuperSplat, полностью переработанную вокруг WebGPU. SuperSplat — бесплатный проект с открытым исходным кодом для осмотра, очистки, преобразования, градинга, оптимизации и публикации сцен, представленных в виде 3D Gaussian Splat. Инструмент располагается между этапами захвата/реконструкции и этапом интерактивного просмотра или веб‑доставки: он принимает Gaussian‑splat‑активы и камеры (COLMAP или INRIA), затем позволяет редактировать данные сплатов или собирать самодостаточные пакеты просмотра.

Архитектура версии 3 подверглась глубокому рефакторингу: рендерер и внутренняя модель данных переписаны с нуля под WebGPU. Это не простое перенесение на новую графическую оболочку — путь WebGL2 и CPU‑сортировщик удалены. Для каждого гауссиана в сцене проекция, отсечение по фрустуму, уплотнение, сортировка по глубине и отправка на отрисовку теперь выполняются на GPU каждый кадр. PlayCanvas описывает реализацию как compute‑проектор, питающий GPU‑radix‑сортировку и indirect drawing.

Перенос сортировки на GPU снимает с CPU тяжёлую задачу определения того, какие из миллионов полупрозрачных примитивов важны для текущей камеры и в каком порядке их нужно композитить. Это критично для 3D Gaussian Splatting, где порядок отрисовки влияет на итоговое смешивание, поскольку примитивы имеют проективные отпечатки, прозрачность и цвет, зависящий от обзора.

Модель хранения редактора тоже изменилась. Статические данные сплатов размещаются в чанк‑ориентированном GPU‑хранилище. Небольшой список экземпляров на один гауссиан хранит изменяемое состояние, необходимое для интерактивного редактирования: выделение, блокировки, трансформации и индексы цветов. В предыдущих версиях полные плавающие копии сцены держались в JavaScript‑памяти; в 3‑й версии этого больше нет. Разделение важно: неизменяемые или редко меняющиеся атрибуты не нужно дублировать ради возможности выбрать или трансформировать единичный сплат. Таким образом многомиллионная сцена может в основном оставаться в GPU‑ориентированном хранилище, тогда как компактное редактируемое состояние выполняет «административную» работу.

На GPU также перенесены вычисления гистограмм, выборов по диапазону, подбора цвета, расчёта границ и проходы пересечений для выделения. Переписанная на WebGPU логика выходит за рамки растеризации: GPU используется как универсальный процессор сцен, а не только как устройство для вывода пикселей.

Экспорт данных тоже изменён: PLY, сжатые PLY, SOG, SPZ, .ssproj и пакеты публикации стримятся чанками через слой splat‑transform PlayCanvas вместо того, чтобы материализовать весь вывод в JavaScript перед началом записи. Для больших захватов это устраняет ещё один источник временного раздувания памяти: исходный актив по‑прежнему занимает ресурсы, и при экспорте требуется рабочая память, но редактору не нужна монолитная JavaScript‑репрезентация результата до начала записи байтов.

Документация SuperSplat чётко разделяет форматы для чтения и для записи. SuperSplat импортирует .ply, ., .splat, .ksplat, .spz, .lcc, .lcc2, упакованные .sog, распакованные SOG через и Streamed SOG через lod‑. При этом PLY не является универсальным контейнером для произвольных облаков точек: редактор ожидает PLY, содержащий атрибуты Gaussian‑splat (позиция, масштаб, вращение, прозрачность, цвет). Обычный mesh или point‑cloud PLY без требуемых атрибутов не превратится в сплат только по имени файла.

Информация о камере обрабатывается отдельно: COLMAP и INRIA camera‑pose JSON могут импортироваться для создания keyframe‑ов таймлайна, но они не загружают геометрию сплатов. Редактор также может создавать автономные HTML‑ и ZIP‑пакеты визуализатора: HTML встраивает сжатые данные сплатов в самодостаточный просмотрщик, ZIP содержит приложение‑просмотрщик и отдельный сжатый PLY. Это элементы доставки, а не форматы для двустороннего редактирования.

При экспорте большинство опций позволяют выбирать, сколько сферических гармоник включать. SPZ‑экспорт поддерживает SPZ4 по умолчанию и SPZ3 в устаревшем gzip‑контейнере для совместимости. Важный нюанс: SOG‑экспорт и экспорт автономных HTML/ZIP пакетов используют GPU‑базирующееся сжатие SOG и потому требуют WebGPU; документация отмечает, что эти операции провалятся при отсутствии WebGPU. Для самого SuperSplat 3 это академично, потому что редактор уже работает только на WebGPU, но это важно при сопоставлении инструментов и документации с более старыми WebGL2‑ориентированными рабочими процессами.

Поддержка формата и способность каждого браузера кодировать формат — разные вещи, и в продакшн‑пайплайнах уже накопилось достаточно проблем, когда эти вещи путали. Сортировка миллионов полупрозрачных сплатов непроста при интерактивном движении камеры, поэтому SuperSplat 3 ввёл режим Stochastic Alpha для тяжелых сцен. В нём сплаты рендерятся без полной сортировки по глубине: их обрабатывают как непрозрачные примитивы с depth‑test и стохастическим покрытием на фрагменте. Это жертвует точной отсортированной композитностью во время взаимодействия в обмен на отзывчивость интерфейса, избегая дорогостоящей сортировки при орбитировании или правке плотных сцен. Когда движение прекращается, редактор возвращается к полностью сортированному смешиванию.

Существуют четыре режима работы: Disabled, Enabled, Movement и Auto; по умолчанию Auto. В Auto сначала остаётся обычный отсортированный рендер, мониторится среднее время GPU‑кадра, и если путь со сортировкой оказывается слишком дорог, SuperSplat переключается на стохастический рендер во время движения и возвращается к отсортированному, когда вид стабилизируется или становится дешевле. Интерактивное представление «кольцами» поддерживается и в стохастические кадры, так что оптимизация взаимодействия не требует отказа от этого редакторского представления.

Селектирование было глубоко переработано. Новый Sphere Brush (Shift+B) позволяет рисовать выделение по видимой геометрии, представленной сплатами. Каждая точка штриха глубинно пикается до позиции в пространстве; полученные мировые позиции образуют 3D‑траекторию, относительно которой на GPU тестируются гауссианы. Радиус кисти масштабируется в физический размер на подобранной поверхности, а не остаётся экранной окружностью. Разрывы глубины разделяют штрих: если курсор пересекает пустоту между поверхностями, траектория не мостит пространство и не продолжает собирать сплаты на более отдалённых объектах. Это даёт инструменту лучшее представление «объекта под кистью» в сценах с передним планом, листвой, перилами, дверными проёмами или пробелами в реконструкции.

Размер кисти разделён с 2D‑кистью и меняется скобками или Alt + колесо мыши. Модель выбора тоже изменилась: прежний переключатель «поверхность или сквозь» заменён двумя независимыми контролями. Selection Depth ограничивает выбор сплатами видимой поверхности. Selection Footprint меняет геометрический тест от центров гауссианов к полным проективным отпечаткам Gaussian; это GPU‑проход пересечения и применяется и к 2D, и к 3D инструментам. Разделение двух контролей избавляет от смешения вопросов о проникновении выбора и о том, считается ли сплат выбранным по центру или по частичному перекрытию отпечатка.

Нулевые alpha‑сплаты теперь тоже можно выбирать — невидимые данные остаются данными и иногда требуют удаления. Выделение, которое всё ещё вычисляется, теперь изолировано от последующего движения камеры или репейнта, чтобы асинхронная операция не портилась при изменении вида до завершения GPU‑работы.

Цветовые регуляторы перемещены из плавающего окна в Scene Manager и работают с активными данными сплатов. Контролы включают Tint, Temperature, Saturation, Brightness, Black Point, White Point и Transparency. Если есть активное выделение — правки применяются к нему и могут быть «запечены» Apply; без выделения правки действуют на весь набор сплатов. Это локальная правка цвета, предназначенная для очистки, визуализации и веб‑презентации, а не замена полноценного грейдинга в финальном ПО.

Вьюпорт получил переработанную сетку. Плоскости XZ, XY и YZ можно включать независимо; выбор сохраняется и в настройках, и в документе. Плотность сетки адаптируется под вид: для больших сцен появляются линии масштаба в сотни и тысячи метров, а в близких видах не генерируется сетка мельче доступных пикселей. Более грубые уровни рисуются заметнее, аналитическое сглаживание линий снижает артефакты горизонта, оси остаются чище в направлении точки схода. Убран шум дезеринга, появляющийся при пересечении линий сетки и сплатов.

Импорт поз камеры из JSON и COLMAP теперь пакетируется: сплайн и таймлайн перестраиваются один раз после импорта, а не при поступлении каждой позы. При отсутствии информации о поле зрения импорт сохраняет текущее FOV. Загрузка проектов изменена так, чтобы редактор достигал финального состояния до начала отрисовки, а не показывал кратковременно частично собранные состояния. Исправлена загрузка .ssproj проектов по URL. Первая загрузка версии 3 отменяет сервис‑воркеры старых версий; пользователям, которые всё ещё видят предыдущую сборку, рекомендуется сделать жёсткую перезагрузку.

SuperSplat 3 требует WebGPU для запуска. Поддерживаемые окружения — актуальные Chrome и Edge, Safari 26 и новее, а также Firefox при включенном WebGPU; также должна быть доступна аппаратная акселерация. При невыполнении требований редактор показывает стартовое сообщение вместо попытки работы с fallback‑рендерером: в 3.0 нет пути WebGL2. Старый сервис‑воркер и офлайн‑кеш удалены — PlayCanvas отмечает, что прежний кеш не покрывал полностью чанки с content‑hash и вносил риск устаревания. Предпочтения пользователя переносятся из 2.x, хотя некоторые контролы сменили расположение. Stochastic Alpha по умолчанию стоит в Auto.

SuperSplat можно установить как PWA; манифест регистрирует обработчики файлов .ply, .splat, .sog, .spz, .ksplat и .ssproj, что позволяет системе передавать такие файлы установленному приложению. Это не означает, что каждая ассоциированная подсистема имеет парную поддержку импорта/экспорта: ассоциация файлов и способность формата — разные вопросы. Хостед‑редактор может загружать ресурсы по URL через параметр load; при удалённых ресурсах хост должен разрешать доступ через CORS. Мультифайловые форматы сохраняют требования к относительным файлам, так что публикация одного метафайла при сокрытии чанков остаётся быстрым способом получить понятное сообщение об ошибке.

SuperSplat умеет распознавать последовательности PLY как кадры анимации и открывать их в Timeline; каждый кадр загружается как полная сцена сплатов, так что последовательности быстро становятся ресурсоёмкими. Поддержка последовательностей не превращает набор полных сцен в лёгкий временной кодек.

Технические детали релиза: версия 3 базируется на PlayCanvas Engine 2.22.0 и splat‑transform 3.3.3. Репозиторий SuperSplat распространяется под лицензией MIT; редактор доступен как open source и может запускаться локально для разработки. Документированная локальная среда разработки требует версии, указанной в руководстве, с последующей установкой npm‑зависимостей и билд‑скриптами; это требование не путать с требованиями к использованию хостед‑редактора — для редактирования в браузере пользователю не нужен.

Версия 3 одновременно меняет три слоя: рендер и процессинг переходят на WebGPU compute, GPU‑сортировку и чанк‑хранилище; инструменты редактирования используют эти возможности через 3D‑поверхностно‑осознанное выделение, асинхронные GPU‑пересечения, ускоренный выбор точек и селективную коррекцию цвета; деплойменты изменяются тем, что WebGPU становится обязательным, а файлы проектов, сохранённые в 3.0, не всегда открываются в 2.x генерации. Главная практическая выгода не в одной заметной кнопке, а в том, что крупные Gaussian‑splat‑наборы данных меньше времени проводят в виде дубликатов в JavaScript, а больше операций выполняются там, где хранятся основные данные.

Из‑за характера изменений апгрейд следует рассматривать как инфраструктурное: перед внедрением в производственный пайплайн студии и команды должны тестировать SuperSplat 3 на репрезентативных захватах, целевых браузерах, целевых GPU и требуемых путях экспорта. Только такое тестирование подтвердит совместимость с существующими процессами и требованиями.