MeshGPT: generación de mallas triangulares con un Transformer solo decodificador
(nihalsid.github.io)- MeshGPT genera mallas triangulares como secuencias de tokens, con el objetivo de producir mallas con aristas definidas y una triangulación compacta, similares a modelos creados por humanos
- A diferencia de los resultados densos de iso-surfacing, muestrea un vocabulario geométrico aprendido para crear directamente una estructura de malla más compacta
- Un codificador-decodificador basado en convoluciones de grafos y cuantización vectorial aprende primero un vocabulario de embeddings que contiene geometría local y topología
- El Transformer solo decodificador predice el siguiente índice a partir de los embeddings previos y, tras el entrenamiento, genera nuevas mallas muestreando secuencias desde el vocabulario
- En diversas categorías mostró un aumento del 9% en shape coverage y una mejora de 30 puntos en la puntuación FID; también puede usarse para completar mallas parciales y generar assets 3D para escenas
Cómo MeshGPT genera mallas
- MeshGPT considera una malla triangular como una secuencia de triángulos, genera tokens desde un vocabulario geométrico aprendido y luego los decodifica en caras triangulares
- Los resultados apuntan a mallas clean, coherent y compact; las sharp edges y la alta fidelidad son características clave
- En comparación con baselines existentes, genera mallas más compactas sin perder detalles geométricos definidos
- Los baselines a veces pierden detalles, producen mallas con triangulación excesiva o entregan formas demasiado simples
- En comparaciones cuantitativas con diversas categorías, muestra mejores resultados que los métodos más recientes de generación de mallas
- Aumento del 9% en shape coverage
- Mejora de 30 puntos en la puntuación FID
Pipeline de entrenamiento y usos
- Primero aprende un vocabulario de embeddings geométricos para mallas triangulares a partir de una gran colección de shapes
- Usa una red codificador-decodificador
- Incluye cuantización vectorial en el cuello de botella
- Mediante convoluciones de grafos, hace que los embeddings contengan información de geometría local y topología de la malla
- El vocabulario aprendido se organiza como secuencias, y el decodificador puede reconstruirlas de nuevo como triángulos
- El Transformer se encarga de la predicción de secuencias de tokens del vocabulario aprendido
- Recibe como entrada los embeddings anteriores y predice el índice del siguiente embedding
- Una vez entrenado, genera mallas muestreando directamente secuencias desde el vocabulario
- Dada una malla parcial, puede inferir varios resultados posibles de shape completion
- También puede mostrar ejemplos de completion mientras el usuario edita un partial input mesh
- Puede usarse para la generación de assets 3D para escenas, y hay un ejemplo de una habitación poblada con assets creados con MeshGPT
Materiales y trabajos relacionados
- Materiales relacionados
- Trabajos relacionados mencionados junto con este proyecto
- PolyGen: An Autoregressive Generative Model of 3D Meshes: genera mallas usando un Transformer para generación de puntos y un Transformer para generación de faces basado en pointer network
- BSP-Net: red que genera compact mesh mediante binary space partitioning
- AtlasNet: A Papier-Mâché Approach to Learning 3D Surface Generation: representa una 3D shape como un conjunto de parametric surface elements
- Mesh Diffusion: usa un 3D diffusion model para generar 3D mesh parametrizadas con deformable marching tetrahedra
1 comentarios
Opiniones en Hacker News
Creo que así se ve una idea realmente revolucionaria. El paper tiene muchísimos detalles, y ya sabemos que los transformers pueden escalar.
Me parece que muchas empresas van a usar esta idea para entrenar un pipeline general de generación de assets 3D. La idea de “primero usar convoluciones sobre grafos para aprender un vocabulario de embeddings cuantizados latentes, y hacer que esos embeddings conozcan la geometría local de la malla y la información topológica. Luego ordenar esos embeddings y hacer que el decodificador los reconstruya como triángulos para reconstruir la malla de forma efectiva” se ve, en retrospectiva, demasiado hermosa y obvia.
También es genial la parte de “como enfoque práctico para representar una malla M para generación autorregresiva, definimos los tokens a generar como una secuencia de triángulos”.
Lo que realmente me atrae en este campo es https://yiconghong.me/LRM/, un gran modelo de reconstrucción 3D que crea una malla 3D a partir de una sola imagen y fue entrenado con millones de modelos 3D diversos.
Las ResNet convolucionales también parecen escalar en visión y lenguaje: (cv) https://arxiv.org/abs/2301.00808, (cv) https://arxiv.org/abs/2110.00476, (nlp) https://github.com/HazyResearch/safari
Los perceptrones multicapa también parecen escalar: (cv) https://arxiv.org/abs/2105.01601, (cv) https://arxiv.org/abs/2105.03404
Claro que tampoco hay una razón fuerte para abandonar la atención, pero creo que casi nadie ha intentado lanzar al problema un perceptrón multicapa o un modelo convolucional de escala de mil millones de parámetros. Cada año se invierte un esfuerzo enorme en atención, transformers y su escalado, al punto de que salen miles de papers, y es difícil ver ese nivel en otras arquitecturas.
Una de las razones por las que el paper The ResNet Strikes Back es bueno es porque nos recuerda que no hay que dejarse arrastrar por el hype, y que los avances se combinan entre sí. Desde la época de las ResNet originales aprendimos muchas técnicas de entrenamiento, y si se las aplicas a ResNet el rendimiento mejora mucho y la brecha se reduce bastante. Al menos así es en el área de visión en la que investigo, y en un entorno donde hay que publicar papers para sobrevivir, con revisiones guiadas por modas, es fácil que la investigación se concentre en una sola dirección.
Como ingeniero de machine learning que también usa un poco Blender y hace desarrollo de juegos como hobby, me parece bastante impresionante, pero viendo solo los ejemplos limitados de muebles, todavía no está en un nivel práctico.
Un modelador con experiencia podría hacer una malla así en menos de 5 minutos, y la generación todavía tiene que sembrarse con polígonos.
Creo que el siguiente paso sería que un LLM controle la generación de la semilla y sumar un modelo de imagen a la parte autorregresiva de la estructura. Entonces quizás sí veamos verdaderos assets para juegos móviles.
En muchos casos, aunque tarde más que un experto y la calidad sea peor, si la alternativa realista es no tener nada, una herramienta así es mejor.
Sería genial poder pagar solo 1 o 2 dólares por modelo y tenerlo personalizado para mi juego, listo para insertar.
La clave es darles herramientas a los no expertos y, al mismo tiempo, liberar a los modeladores con experiencia de tareas como hacer 10.000 variaciones de sillas para el próximo juego AAA, para que puedan enfocarse en cosas más interesantes. Ellos pueden crear personajes únicos o nuevos modelos futuristas que no existen en los datos de entrenamiento y que requieren verdadera imaginación y expertise.
Los sistemas procedurales como Blender Geometry Nodes ya pueden generar infinitas variaciones de modelos así. Aun así, el ritmo de avance es sorprendente.
Creo que cuanta más experiencia tengas en un caso de uso específico, más utilidad podrás sacarle a un modelo de machine learning.
Lamentablemente, muchas veces esas mismas personas son las que más se resisten a adoptarlos, sin siquiera practicar lo suficiente como para llegar a un nivel donde les resulten útiles de verdad. Probablemente parte del problema sea que esperan que esto sea una varita mágica. En realidad, no es más que una nueva herramienta como PhotoShop, Blender, Microsoft Word o PowerPoint.
La mayoría abre esas apps, hace clics sin mucho sentido por un rato, y pronto se va para no volver. Con la “IA” pasa lo mismo.
La profesión que elegí, producción 3D/cine, últimamente se siente como estar en una trinchera de combate. Es interesante y también da miedo.
Otra gran ventaja es la posibilidad de composición. Si el modelo puede generar una taza y una mesa, en cierto modo sabe generar una taza sobre una mesa.
Imagínate poder crear en un abrir y cerrar de ojos engranajes y piezas mecánicas complejas adecuadas para tu proyecto, y colocarlas con precisión en la posición y rotación que quieras. Es muy parecido a cómo funciona GitHub Copilot.
Por ahora estamos a salvo, pero hay que aprender a aprovechar la tecnología nueva.
¿Cuál es la entrada? ¿Convierte una consulta de texto como “chair” en una malla?
Por lo que veo, parece que la forma principal de entrada y salida no es una simple función adicional, sino completar mallas.
Parece que la entrada en sí es una malla 3D. Así que el modelo parece hacer “completado de formas”. Por ejemplo, generar una silla viendo solo algunas patas. O, cuando la forma de entrada está más completa, quizá genere “variaciones”.
Aun así, parece un buen punto de partida. Podrías tomar como entrada la salida de otros modelos de texto-a-malla, aunque sea de baja calidad, y usar este modelo para obtener resultados más nítidos y coherentes.
Se siente como si todos los problemas difíciles que quedaban y que no habían avanzado mucho desde los 90 estuvieran esperando su turno para resolverse de alguna manera con transformers. Es una época realmente impresionante.
El próximo avance será una UX para crear escenas 3D en VR frente a modelos como estos. Si hay datos de entrenamiento para un entorno, será posible generar entornos 3D prácticamente persistentes y arbitrarios.
Para generar texturas se pueden usar modelos de difusión.
Mark tenía razón, solo se movió demasiado pronto.
Ah, ¿ese Mark? jajaja, entiendo.
¿No sería mejor darle el crédito a alguien como Lecun? Definitivamente, que Mark apostara todo al metaverso no fue porque somehow predijera que el deep learning iba a despegar. Ni siquiera quienes entrenaron los primeros modelos tenían certeza de qué tan bien iban a funcionar.
Aunque esto sea “solo” autocompletado de mallas, para artistas 3D es enormemente útil. Ahora hay una desconexión entre la forma en que se esculpe un personaje y la forma en que se anima. Normalmente hace falta un paso muy tardado de retopologizar el modelo.
Una retopología basada en transformers que reciba una malla burda y devuelva una topología limpia ahorraría muchísimo tiempo.
Otra aplicación sería meter en MeshGPT la salida de Gaussian splatting o de modelos de difusión. Podrías obtener desde texto assets utilizables con topología limpia.
Creo que aquí no se percibe bien que estamos avanzando poco a poco hacia automatizar la propia automatización. Y los programadores que podrán ganarse la vida con eso serán una fracción muy pequeña de quienes hoy pueden ganársela.
Me gusta este campo. El paper incluye un sitio web atractivo, ejemplos y videos.
Es mucho más fresco que el estilo de papers centrados en un abstract denso, introducción y resultados.
Se ve realmente genial. Parece que ayudaría muchísimo a desarrolladores indie de juegos a generar grandes pools de assets.
En su lugar, las grandes empresas harán juegos de “crea tu propio juego”.
Los juegos indie de hoy ya se sienten bastante derivados. A mediano plazo, creo que las grandes empresas usarán esta tecnología y matarán a los juegos indie.
Vaya, está mejorando muchísimo. Todavía falta camino por esos bordes raros, pero a estas alturas se siente menos como un problema algorítmico o complejo y más como mejoras iterativas.
Mi pipeline se aceleraría muchísimo si ya no tuviera que meter todas las mallas en una biblioteca de generación procedural con montones de pequeños modificadores de malla conectados a drivers. En vez de eso, meto todas las mallas en una carpeta, entreno la red y luego le pido otras cosas del mismo estilo. Se ve que no tendría que hacer retopología ni otros trabajos manuales, salvo que quiera intervenir de forma más creativa.
Claro, hasta llegar completamente a ese nivel, la generación procedural sigue siendo mejor, pero me entusiasma mucho que esto se esté completando tan rápido. Ojalá para el showcase de Unreal del próximo año estén hablando de una nueva función de Asset Generator.