Gaussian Splatting
El splatting gaussiano reconstruye escenas 3D fotorrealistas a partir de fotografías como millones de gaussianas 3D que se renderizan en tiempo real. Incluye el entrenamiento, NeRF y la captura.
El splatting gaussiano, también llamado splatting gaussiano 3D (3DGS), es una técnica para reconstruir una escena 3D fotorrealista a partir de fotos normales y generar nuevas vistas en tiempo real. Representa la escena mediante millones de gaussianas 3D, elipsoides difusos que tienen una posición, una forma, una opacidad y un color que depende del punto de vista; crea una imagen proyectándolos («splatting») sobre la pantalla y mezclándolos. Presentado en SIGGRAPH 2023 en Splatting gaussiano 3D para la representación de campos de radiancia en tiempo real, igualó la calidad de imagen de los mejores campos de radiancia neuronal (NeRF) y, al mismo tiempo, generó 30 fotogramas por segundo o más a 1080p, algo que ningún método anterior había logrado en escenas grandes y sin límites. Es un método de síntesis de nuevas vistas y reconstrucción 3D.
Cómo funciona Gaussian Splatting#
Cada gaussiana almacena 59 números que se pueden aprender: una posición 3D, una escala 3D y un cuaternión de rotación de 4 números que, en conjunto, definen su covarianza (forma y orientación), una opacidad y 48 coeficientes de armónicos esféricos, 16 por canal de color, que permiten que el color cambie según la dirección de visión para capturar reflejos y brillos. El entrenamiento parte de la nube de puntos dispersa que genera la estructura a partir del movimiento (SfM) mientras se calibran las cámaras, y coloca una gaussiana en cada punto. En cada iteración, se genera una vista de entrenamiento, se compara con la foto real mediante una combinación ponderada de pérdidas L1 y D-SSIM y se actualiza cada gaussiana mediante descenso de gradiente a través del renderizador diferenciable. Cada 100 iteraciones, el control adaptativo de densidad clona las gaussianas pequeñas en las zonas insuficientemente reconstruidas, divide las gaussianas grandes que abarcan demasiado detalle y elimina las casi transparentes; así, cada escena del artículo crece hasta alcanzar entre 1 y 5 millones de gaussianas.
Para dibujar un fotograma, el renderizador proyecta cada gaussiana 3D como una elipse 2D sobre el plano de imagen, divide la pantalla en teselas de 16×16 píxeles, ordena por profundidad las gaussianas que se superponen a cada tesela mediante una GPU de ordenación radix y las mezcla con alfa, de delante hacia atrás, en cada píxel. Como la escena es una lista explícita de primitivas, el renderizado funciona como el rasterizador de un motor de videojuegos y no evalúa una red neuronal por píxel.
Splatting gaussiano frente a NeRF y mallas#
Un NeRF almacena una escena de forma implícita en los pesos de una red neuronal y la renderiza consultando esa red en numerosos puntos a lo largo de cada rayo de cámara. El splatting gaussiano almacena la escena de forma explícita, así que el renderizado se reduce a ordenar y mezclar. Con el mismo hardware del artículo original, Mip-NeRF360 necesitó de media 48 horas de entrenamiento y unos 10 segundos por fotograma renderizado; los splats gaussianos completamente entrenados igualaron o superaron ligeramente su calidad tras 35-45 minutos de entrenamiento y se renderizaron en tiempo real. La representación explícita requiere memoria: con 59 números por gaussiana, una escena con 3 millones de gaussianas contiene unos 700 MB de valores de coma flotante de 32 bits, y el uso máximo de memoria de la GPU durante el entrenamiento de escenas grandes podía superar los 20 GB en la implementación original. Los splats tampoco tienen una superficie definida, por lo que las aplicaciones que necesitan geometría de colisión o ediciones al estilo CAD siguen convirtiéndolos en mallas mediante métodos posteriores; las escenas en movimiento requieren extensiones como el splatting gaussiano 4D.
Captura de datos para el splatting gaussiano#
Una captura es un conjunto de fotos o fotogramas de vídeo superpuestos tomados mientras se recorre una escena estática. Cualquier elemento que se mueva durante la captura, como un transeúnte o un coche, aparece en algunos fotogramas y no en otros, y el proceso de optimización intenta explicarlo mediante artefactos semitransparentes conocidos como flotantes. Por eso, los flujos de entrenamiento aceptan máscaras que excluyen los objetos en movimiento; el formato de datos de Nerfstudio utiliza máscaras en blanco y negro en las que el negro marca los píxeles que se deben ignorar. Los modelos de segmentación de instancias de YOLO26 generan estas máscaras automáticamente al segmentar a todas las personas de cada fotograma.
import cv2
from ultralytics import YOLO
# Carga un modelo de segmentación de instancias YOLO26
model = YOLO("yolo26n-seg.pt")
# Segmenta solo a las personas (clase 0 de COCO), una fuente habitual de flotantes en una captura
results = model("https://ultralytics.com/images/bus.jpg", classes=[0], retina_masks=True)
result = results[0]
# El blanco marca la escena estática que se debe utilizar para el entrenamiento; el negro marca a las personas que se deben ignorar
people = result.masks.data.sum(dim=0) > 0
keep_mask = (~people).cpu().numpy().astype("uint8") * 255
cv2.imwrite("bus_mask.png", keep_mask)El bus_mask.png guardado tiene la resolución completa de la foto porque retina_masks=True devuelve máscaras con el tamaño original de la imagen, y todas las personas del fotograma aparecen en negro.
Aplicaciones#
- Inmobiliaria y visitas virtuales: Una captura de una casa, un museo o un sitio patrimonial hecha con un teléfono o un dron se convierte en una escena que los visitantes pueden explorar libremente desde un navegador o unas gafas de RV, con los reflejos en suelos y ventanas preservados.
- Efectos visuales y producción virtual: Los equipos de cine y videojuegos capturan ubicaciones reales como splats y los utilizan como fondos fotorrealistas y referencias para los decorados.
- Gemelos digitales y cartografía: Las plataformas geoespaciales transmiten grandes reconstrucciones de ciudades, obras y redes de infraestructura mediante splats, junto con mosaicos 3D tradicionales.
- Simulación de conducción y robótica: Las reconstrucciones de trayectos reales permiten a los equipos de vehículos autónomos volver a renderizar escenas grabadas desde nuevas posiciones de cámara para probar modelos de percepción.
Las bibliotecas de código abierto, como gsplat, ofrecen rasterizadores CUDA para entrenar splats, y Khronos Group ha ratificado KHR_gaussian_splatting, una extensión de glTF 2.0 para almacenar splats gaussianos, desarrollada con aportaciones de Cesium, Esri, Niantic Spatial, NVIDIA, Huawei y Autodesk.










