CityGaussian: renderizado en tiempo real y de alta calidad de escenas a gran escala con Gaussianas
(dekuliutesla.github.io)- CityGaussian (CityGS) es un método de ECCV 2024 que extiende 3D Gaussian Splatting (3DGS) a escenas a escala urbana, con el objetivo de lograr tanto eficiencia de entrenamiento como calidad de exploración en tiempo real
- Resuelve la limitación de que las escenas a gran escala son difíciles de manejar de una sola vez mediante una combinación de entrenamiento de divide y vencerás y una estrategia de nivel de detalle (LoD)
- Aprovecha información previa global de la escena y selección adaptativa de datos de entrenamiento para alinear con mayor eficiencia los resultados entrenados por bloque y fusionarlos de forma fluida
- Comprime los Gaussian primitives fusionados para crear varios niveles de detalle y, durante el renderizado, selecciona y agrega el nivel de detalle adecuado por bloque
- Sin LoD, representar MatrixCity con 25 millones de Gaussianas solo alcanza 18 FPS en una A100, pero CityGS con LoD logra renderizado en tiempo real con un promedio de 36 FPS
Estructura de entrenamiento y renderizado para 3DGS a gran escala
- 3D Gaussian Splatting (3DGS) ha mostrado fortalezas en reconstrucción de escenas 3D en tiempo real y síntesis de nuevas vistas, pero el entrenamiento de escenas a gran escala y el renderizado en tiempo real en múltiples escalas siguen siendo costosos
- CityGaussian aborda este problema en dos etapas
- Entrenamiento de divide y vencerás: divide la escena a gran escala en bloques para entrenarla de forma eficiente
- Estrategia LoD: usa solo el nivel de detalle necesario según la escala de observación para acelerar el renderizado
- La información previa global de la escena y la selección adaptativa de datos de entrenamiento mejoran la eficiencia del entrenamiento y ayudan a fusionar de manera más natural los fragmentos de escena separados
- Los Gaussian primitives fusionados pasan por un proceso de compresión para formar múltiples niveles de detalle
- En la etapa de renderizado, se usan estrategias de selección y agregación de nivel de detalle por bloque para permitir una generación de imagen rápida incluso en múltiples escalas
Rendimiento y materiales públicos
- Sin aplicar LoD, la escena MatrixCity se representa con 25 millones de Gaussianas y se mide en 18 FPS sobre una A100
- Se considera que esta velocidad dificulta ofrecer una experiencia de desplazamiento fluida
- CityGS con LoD permite renderizado en tiempo real incluso en escalas muy distintas, con un promedio de 36 FPS en una A100
- En experimentos con escenas a gran escala, CityGS muestra calidad de renderizado de nivel de punta y soporta renderizado consistente en tiempo real en escenas grandes de distintas escalas
- Materiales públicos
1 comentarios
Opiniones en Hacker News
Por el nombre del dataset del video, Matrix city, es muy probable que se haya extraído de la demo de Matrix de Unreal Engine 5 publicada hace unos años
Los puntos de vista son muy parecidos, así que se ve fotorrealista, pero no parece venir de fotos reales
Buscando un poco más, efectivamente era eso: https://city-super.github.io/matrixcity/
Curiosamente, eso haría que el artículo original esté reconstruyendo de nuevo algo que ya era una reconstrucción de objetos reales
El mapa de MatrixCity es distinto, pero se parece en cierta medida al mapa de Matrix Awakens. También se puede comprobar en este análisis de diseño [3], escrito por el líder técnico del proyecto Matrix Awakens
Y, si se profundiza más, en la sección MatrixPlugin del codebase en GitHub [4] se indica explícitamente que usaron el proyecto city-sample
[1] https://www.unrealengine.com/marketplace/en-US/product/city-...
[2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
[3] https://quentinmarmier.artstation.com/projects/xYeKNO
[4] https://github.com/city-super/MatrixCity
Eso hace que entrenar NeRF o Gaussian Splatting sea un poco más fácil, porque no hay error de optimización de la pose de cámara
Es la misma razón por la que los primeros papers de NeRF usaban la famosa excavadora Lego amarilla renderizada con Blender
Para una escena como Matrix city, no parece necesario pasar mucho tiempo entrenando solo para reproducir los datos
El fin de semana estuve uniendo meshes de tiles 3D de Google Maps con Gaussian Splats y, aunque no es exactamente lo mismo, el efecto fue bastante parecido y útil
Ejemplo 1 con código enlazado: https://twitter.com/kfarr/status/1773934700878561396
Ejemplo 2: https://twitter.com/3dstreetapp/status/1775203540442697782
En el primer enlace aparece un error en las herramientas de desarrollador
Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>)...Voy a revisar aframe-loader-3dtiles-component
“La velocidad promedio es de 36 FPS (probado en A100)” suena a que es en tiempo real si tienes una GPU de US$8k
Cuando un paper de gráficos dice que alcanzó velocidad en tiempo real, siempre hay que volver a verificar si realmente es tiempo real o si significa “640x480 a 20 fps en el hardware más caro que se puede comprar”
Si bajas el estándar lo suficiente, cualquier cosa puede ser en tiempo real
Puede llegar a servir para casos como producción virtual, pero no parece ser para móviles
https://www.techpowerup.com/forums/attachments/all-cards-png...
Si quieres algo que corra incluso en una laptop de hace 10 años, y hasta sin GPU, mira https://github.com/pierotofy/OpenSplat. Lo hice yo
Así que no parece un problema insuperable
¿Alguien puede convencerme de que el 3D Gaussian Splatting no es un callejón sin salida?
El renderizado es demasiado lento por un factor de un solo dígito, y los datos también son demasiado grandes por un factor de un solo dígito. Se siente como volver a ver el enfrentamiento entre rasterización y ray tracing.
La rasterización siempre será más rápida que el ray tracing, y si el ray tracing se vuelve 10 veces más rápido, la rasterización también se volverá 10 veces más rápida.
Generar geometría y materiales tradicionales a partir de una nube de puntos gaussianos podría ser interesante. Pero la fotogrametría ya existe desde hace bastante tiempo.
Intentar renderizar en tiempo real una ciudad enorme con splats no se siente como “la dirección correcta”.
Es genial, divertido e interesante, pero no estoy seguro de que vaya a ser realmente útil. No soy experto, así que lo pregunto en serio.
La mayor parte de la investigación actual no se centra en el rendimiento, y todavía ni siquiera hay consenso sobre un formato unificado, incluida la compresión.
Las posibilidades de optimización son muy claras, y también es fácil ajustarlo para distintos dispositivos. Es parecido al LOD de nubes de puntos o al culling de mallas.
El rendimiento de los splats puede ser una ventaja competitiva temporal de los visores, pero así como la descompresión de video u otros estándares 3D se difundieron como open source, es muy probable que en unos años ver splats en alta calidad y a alto framerate sea un requisito básico en la mayoría de los dispositivos.
La siguiente pregunta es para qué se va a usar esto.
Más de 100 fps en el navegador: https://current-exhibition.com/laboratorio31/
900 fps: https://m-niemeyer.github.io/radsplat/
Los motores tradicionales tienen 30 años de investigación y desarrollo acumulados, así que tomará tiempo que las herramientas y la optimización se pongan al día.
Dicho eso, si uno mira de dónde vienen los papers, hay mucho de Apple y Meta, y parece una tecnología destinada a impulsar la era del metaverso/cómputo espacial que ambas empresas están empujando.
La capacidad de llevar contenido de muy bajo costo de producción, como videos de iPhone, a entornos 3D desplazará mucha investigación y desarrollo de los métodos tradicionales.
También es muy difícil capturar detalles finos como estructuras delgadas o cabello. 3DGS es fuerte en esas áreas.
También hay investigación en curso para mejorar sus debilidades actuales, incluidos métodos de extracción de mallas que puedan usarse en pipelines gráficos tradicionales.
La fotogrametría solo funciona bien cuando los datos de superficie son limpios, pero los Gaussian splats son fuertes con datos semivolumétricos como pelaje, vegetación, partículas y superficies rugosas.
También encajan bien con superficies brillantes y reflectantes, volúmenes con fuertes propiedades de superficies subdivididas y materiales con gran dependencia del punto de vista.
Si el caso de uso es algo equivalente a una foto 3D completa, es bastante genial y un uso suficientemente justificado.
Si es para motores de juegos 3D, creo que es difícil manipular dinámicamente las primitivas básicas de la forma que requiere un motor de juegos. Los intentos seguirán, pero desde esta perspectiva los gaussianos parecen más un formato de renderizado final que una representación intermedia útil.
Para usarlos de forma práctica en un motor, habría que inventar algo que cubra ese espacio intermedio, y todavía quedan muchas preguntas.
No sé qué otros usos tendrá, pero el mundo no está compuesto solo por juegos 3D y efectos visuales.
Hay tantas cosas que llevan el nombre de Gauss, y siguen apareciendo nuevas como Gaussian splatting, que resulta curioso ver de nuevo cuánto influyó Gauss en tantos campos.
No lo inventó directamente, pero sí contribuyó mucho a esas matemáticas.
https://en.wikipedia.org/wiki/Monte_Carlo_(disambiguation)
Solo en la sección “Science and Technology” hay 8 entradas.
Me interesa ver con qué licencia se publicará.
Quiero ver un juego open source que use esto.
Hay muchos casos en la historia que parecían prometedores como alternativa a las mallas de triángulos, hasta que se descubrió que no había una forma eficiente de animarlos y desaparecieron.
Los objetos dentro de la nube de puntos no tienen metadatos intrínsecos como “silla, mesa, persona”, por lo que cualquier interacción es muy difícil.
No es imposible, pero por ahora no es práctico.
Además, tampoco está tan optimizado para renderizado en tiempo real. Aunque se hayan podado muchos puntos, usar una malla de baja resolución es mucho más eficiente.
Esto no se ve mucho mejor que algo como Cities: Skylines.
No hay zoom in ni zoom out, y siempre muestra solo un encuadre muy limitado. ¿Me estoy perdiendo algo?
El paper hace referencia repetidas veces a MatrixCity, y https://city-super.github.io/matrixcity/, que encontró otra persona arriba, también afirma que son datos completamente sintéticos.
Según entiendo, fueron extraídos de Unreal Engine.
Estoy aprendiendo con pygame y me da curiosidad cómo se agrega desenfoque de movimiento a un juego
Por ejemplo, al hacer Mario con pygame, quisiera que Mario se viera borroso cuando salta
Podría crear una versión borrosa de Mario promediando 9 píxeles, pero no sé si eso es lo que suelen hacer en otros juegos
Muchos juegos también se ven muy nítidos sin desenfoque de movimiento, así que me pregunto si realmente se usa
En el cine es un elemento bastante importante, y también me viene a la mente que para obtener un desenfoque de movimiento cinematográfico hay que filmar a 25 fps
Es decir, se calcula la velocidad de cada objeto, se renderiza como color y luego se usa en una etapa de posprocesamiento para definir la intensidad y la dirección del efecto de desenfoque
Puede que se necesite movimiento relativo a la cámara. En el caso de Mario quizá no, pero en un FPS querrías que los bordes de la pantalla se desenfoquen cuando la cámara avanza
Material relacionado: https://city-super.github.io/octree-gs/
Es un enfoque bastante avanzado para renderizar escenas más grandes con 3D Gaussians, así que quiero probarlo pronto cuando publiquen el código