Об этом проекте
Этот репозиторий представляет собой просмотрщик 3D Gaussian Splatting на базе Unity, реализующий часть визуализации в реальном времени из статьи SIGGRAPH 2023 «3D Gaussian Splatting for Real-Time Radiance Field Rendering» (Кербл, Копанас, Ляймкюлер и Дреттакис). Он потребляет уже обученные файлы моделей гауссовых сплаттингов, а не выполняет обучение самостоятельно, и явно основан на оригинальной статье, а не на многочисленных более поздних исследовательских вариантах гауссова сплаттинга.
Статус и поддержка платформ
Автор заявляет, что по состоянию на декабрь 2023 года дальнейшее значительное развитие не планируется. Заведомо рабочими платформами являются те, которые используют графические API D3D12, Metal или Vulkan: Windows (D3D12 или Vulkan), Mac (Metal) и Linux (Vulkan). DX11 не работает. OpenGL и OpenGL ES не поддерживаются, WebGPU пока нежизнеспособен, а поддержка мобильных устройств нестабильна: сообщается о неработоспособности некоторых устройств iOS и Android. Некоторые VR-устройства, как сообщается, работают (HTC Vive, Varjo Aero, Quest 3, Quest Pro), в то время как другие, такие как Apple Vision Pro, могут не работать.
Рабочий процесс использования
Откройте папку projects/GaussianExample как проект Unity (разработан с Unity 2022.3) и загрузите сцену GSTestScene. Ассеты GaussianSplat создаются через меню Tools -> Gaussian Splats -> Create GaussianSplatAsset. Входными данными может быть файл PLY из оригинальной статьи 3DGS (обычно point_cloud/iteration_*/point_cloud.ply) или формат SPZ от Scaniverse. Необязательный файл cameras.json можно разместить рядом или в родительских папках. Диалог предлагает параметры сжатия и выходную папку; даже пресет качества «very low» описывается как вполне пригодный, при этом одна запись занимает менее 8 МБ. Результирующий ассет состоит из нескольких файлов данных. В репозиторий не включены модели сплаттингов из-за их размера; в оригинальном репозитории статьи есть ссылка на ZIP-архив предобученных моделей объемом 14 ГБ.
Рендеринг и управление
Скрипт GaussianSplatRenderer на игровом объекте принимает созданный ассет в поле Asset. Скрипт предоставляет элементы управления для отладки и визуализации данных, а также ползунок для перемещения игровой камеры к одной из позиций камер ассета. Рендеринг учитывает матрицу трансформации игрового объекта; официальные модели выглядят повернутыми примерно на -160 градусов вокруг X и зеркально отраженными вокруг Z, поэтому пример сцены применяет такую трансформацию. Дополнительная документация охватывает интеграцию с конвейером рендеринга и редактирование сплаттингов.
Примечания по производительности
Для сцены «bicycle» из статьи с 6,1 млн сплаттингов при разрешении 1200x797 и качестве ассета Medium (ассет 282 МБ) автор сообщает на Windows с NVIDIA RTX 3080 Ti: официальный просмотрщик SBIR — 7,4 мс (135 FPS) с использованием 4,8 ГБ видеопамяти, а Unity на DX12 или Vulkan — 6,8 мс (147 FPS), разделенных на 4,5 мс рендеринг, 1,1 мс сортировка и 0,8 мс расчет вида сплаттингов, с использованием 1,3 ГБ видеопамяти. На Mac с Apple M1 Max Unity на Metal сообщается как 21,5 мс (46 FPS). Помимо загруженного ассета, в настоящее время требуется примерно 48 байт памяти GPU на сплаттинг для сортировки и кэширования данных, зависящих от вида.
Лицензирование
Код автора лицензирован под MIT. Сторонние компоненты включают zanders3/json (MIT), код сортировки GPU «DeviceRadixSort», предоставленный Томасом Смитом, и исправления VR, предоставленные @ninjamode на основе Unity-VR-Gaussian-Splatting. В README отмечается, что лицензия оригинальной реализации статьи ограничивает ее обучающее программное обеспечение образовательным, академическим и некоммерческим использованием, а для коммерческого использования требуется лицензия от INRIA; пользователи должны отдельно учитывать, как были созданы их файлы PLY.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.