Sobre el proyecto
Este repositorio es un visor basado en Unity para 3D Gaussian Splatting, que implementa la parte de visualización en tiempo real del artículo de SIGGRAPH 2023 "3D Gaussian Splatting for Real-Time Radiance Field Rendering" de Kerbl, Kopanas, Leimkühler y Drettakis. Consume archivos de modelos gaussianos ya entrenados en lugar de realizar el entrenamiento en sí, y se basa explícitamente en el artículo original, no en las muchas variantes posteriores de investigación sobre gaussian splatting.
Estado y soporte de plataformas
El autor indica que, a diciembre de 2023, no se planea un desarrollo significativo adicional. Las plataformas conocidas que funcionan son aquellas que usan las API gráficas D3D12, Metal o Vulkan: Windows (D3D12 o Vulkan), Mac (Metal) y Linux (Vulkan). DX11 no funciona. OpenGL y OpenGL ES no son compatibles, WebGPU aún no es viable y el soporte móvil es inconsistente, con algunos dispositivos iOS y Android reportados como no funcionales. Algunos dispositivos VR funcionan según informes (HTC Vive, Varjo Aero, Quest 3, Quest Pro), mientras que otros, como Apple Vision Pro, pueden no funcionar.
Flujo de trabajo de uso
Abra la carpeta projects/GaussianExample como un proyecto de Unity (desarrollado con Unity 2022.3) y cargue la escena GSTestScene. Los activos GaussianSplat se crean mediante el menú Tools -> Gaussian Splats -> Create GaussianSplatAsset. La entrada puede ser un archivo PLY del artículo 3DGS original (típicamente point_cloud/iteration_*/point_cloud.ply) o el formato SPZ de Scaniverse. Un cameras.json opcional puede colocarse junto al archivo o en carpetas superiores. El diálogo ofrece opciones de compresión y una carpeta de salida; incluso el ajuste de calidad "muy baja" se describe como razonablemente utilizable, con una captura de menos de 8MB en total. El activo resultante consta de varios archivos de datos. No se incluyen modelos de splat en el repositorio debido a su tamaño; el repositorio del artículo original enlaza a un archivo zip de 14GB con modelos preentrenados.
Renderizado y controles
Un script GaussianSplatRenderer en un objeto de juego toma el activo creado en su campo Asset. El script expone controles para depurar y visualizar los datos, además de un control deslizante para mover la cámara del juego a una de las ubicaciones de cámara del activo. El renderizado tiene en cuenta la matriz de transformación del objeto de juego; los modelos oficiales aparecen rotados aproximadamente -160 grados alrededor de X y reflejados alrededor de Z, por lo que la escena de ejemplo aplica dicha transformación. Documentación adicional cubre la integración del pipeline de renderizado y la edición de splats.
Notas de rendimiento
Para la escena "bicycle" del artículo con 6.1M de splats a 1200x797 y calidad de activo Media (activo de 282MB), el autor reporta en Windows con una NVIDIA RTX 3080 Ti: el visor SBIR oficial a 7.4ms (135FPS) usando 4.8GB de VRAM, y Unity en DX12 o Vulkan a 6.8ms (147FPS), dividido en 4.5ms de renderizado, 1.1ms de ordenamiento y 0.8ms de cálculo de vista de splats, usando 1.3GB de VRAM. En Mac con un Apple M1 Max, Unity en Metal se reporta a 21.5ms (46FPS). Más allá del activo cargado, se necesitan aproximadamente 48 bytes de memoria de GPU por splat para el ordenamiento y el almacenamiento en caché de datos dependientes de la vista.
Licencia
El código del autor tiene licencia MIT. Los componentes de terceros incluyen zanders3/json (MIT), el código de ordenamiento en GPU "DeviceRadixSort" contribuido por Thomas Smith y correcciones de VR contribuidas por @ninjamode basadas en Unity-VR-Gaussian-Splatting. El README advierte que la licencia de la implementación del artículo original restringe su software de entrenamiento a uso educativo, académico y no comercial, y que el uso comercial requiere una licencia de INRIA; los usuarios deben considerar por separado cómo se produjeron sus archivos PLY.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.