Tsplat lleva el Gaussian Splatting a entornos solo con CPU

Fuentes: Terminal meets 3D: tsplat brings Gaussian Splatting to CPU-only environments
Tsplat lleva el Gaussian Splatting a entornos solo con CPU
Imagen generada con IA

Terminal meets 3D: tsplat lleva el Gaussian Splatting a entornos solo CPU

1. Introducción
El Gaussian Splatting (GS) es una técnica de representación volumétrica que modela escenas tridimensionales mediante cientos de miles de elipsoides semitransparentes (splats). Hasta ahora su visualización requería potentes GPUs y servidores gráficos. La herramienta tsplat, escrita en Rust, rompe esa barrera al permitir renderizar estas escenas directamente en la terminal, usando únicamente la CPU, incluso sobre conexiones SSH. Esto democratiza el acceso a la tecnología, permitiendo explorar modelos GS en entornos sin aceleración gráfica, como máquinas virtuales o servidores remotos.

2. Explicación principal
tsplat implementa en Rust el pipeline de rasterización directa del GS original (INRIA 3DGS). Cada splat se define por posición, escala, rotación (cuaterniones), color (decodificado de armónicos esféricos hasta banda 3) y opacidad. Para generar una imagen 2D desde una cámara, se siguen estos pasos:

  • Proyección de splats: Se construye la matriz de covarianza 3D a partir de escalas y rotación (M = R·S, cov3d = M·Mᵀ). Se traslada a espacio de vista usando la matriz de vista (W) y se proyecta a 2D mediante la jacobiana de la proyección perspectiva, añadiendo un pequeño valor (eps2d=0.3) en la diagonal para garantizar que la covarianza 2D sea definida positiva e invertible.
  • Cálculo de bounding boxes: Se determina la caja 2D que cubre cada splat (usando la desviación estándar, por ejemplo 3σ).
  • Ordenamiento por profundidad: Se ordenan los splats por distancia a la cámara (de atrás hacia adelante) para composición alfabética.
  • Tile binning: Se dividen los splats en tiles de la imagen (16×16 píxeles) para procesamiento paralelo.
  • Composición alfa: Para cada píxel, se mezcla el color de los splats que lo cubren usando α-blending, evaluando la Gaussiana 2D.

Los splats se renderizan mediante bloques Unicode (half blocks) o protocolos gráficos como Sixel si la terminal lo soporta. De forma predeterminada, se limita a 200 000 splats, ajustable con --max-splats o sin límite con --no-cap.

3. Casos de uso y aplicaciones
- Desarrolladores e investigadores: depurar o inspeccionar modelos GS sin necesidad de GPU, directamente desde una terminal SSH.
- Docencia: mostrar el concepto de splatting en entornos mínimos, como máquinas virtuales ligeras.
- Visualización remota: renderizar escenas en servidores headless y verlas en un terminal local.
- Benchmarking: incluye benchmarks para medir rendimiento (bench_forward) variando número de hilos y splats.

4. Consideraciones
- Rendimiento: Al ser solo CPU, el renderizado interactivo es limitado en escenas muy densas; está pensado más para inspección que para visualización en tiempo real a 60 fps.
- Calidad visual: La representación por half blocks es pixelada (“minecrafty”); la calidad mejora con protocolos como Sixel, pero depende de la terminal.
- Formato: Acepta archivos .ply en el formato INRIA 3DGS; no soporta directamente otros formatos, aunque puede ser extendido.
- Alternativas: Existen visores con GPU como el propio visor INRIA o implementaciones en WebGL. tsplat es la opción más ligera para entornos sin aceleración.
- Requiere Rust: Es necesario tener el compilador Rust y herramientas de cargo para compilarlo; no hay binarios precompilados aún.

En resumen, tsplat es una implementación minimalista y portátil que lleva el Gaussian Splatting a un nuevo dominio: la terminal. Su código abierto y diseño modular permiten entender internamente el pipeline sin la complejidad de una GPU.