MeshGPT: geração de malhas triangulares com um transformador somente decodificador
(nihalsid.github.io)- O MeshGPT gera malhas triangulares como sequências de tokens, com o objetivo de criar malhas com arestas nítidas e triangulação concisa, como em modelos feitos por humanos
- Ao contrário de resultados densos de iso-surfacing, ele amostra um vocabulário geométrico aprendido para produzir diretamente uma estrutura de malha mais compacta
- Um codificador-decodificador baseado em convolução em grafos e quantização vetorial aprende primeiro um vocabulário de embeddings que captura geometria local e topologia
- O transformador somente decodificador prevê o próximo índice com base nos embeddings anteriores e, após o treinamento, amostra sequências do vocabulário para gerar novas malhas
- Em várias categorias, apresentou aumento de 9% em shape coverage e melhora de 30 pontos na pontuação FID, além de poder ser usado em conclusão parcial de malhas e geração de ativos 3D para cenas
Como o MeshGPT gera malhas
- O MeshGPT trata malhas triangulares como uma sequência de triângulos, gera tokens a partir de um vocabulário geométrico aprendido e depois os decodifica em faces triangulares
- O resultado busca uma malha clean, coherent e compact, com sharp edges e alta fidelidade como características principais
- Em comparação com baselines existentes, ele gera malhas mais concisas enquanto preserva detalhes geométricos nítidos
- Os baselines podem perder detalhes, criar malhas com triangulação excessiva ou produzir formas excessivamente simples
- Em comparações quantitativas com várias categorias, mostrou resultados melhores do que métodos recentes de geração de malhas
- shape coverage aumentou 9%
- Pontuação FID melhorou em 30 pontos
Pipeline de treinamento e usos
- Primeiro, aprende um vocabulário de embeddings geométricos para malhas triangulares a partir de uma grande coleção de formas
- Usa uma rede codificador-decodificador
- Inclui quantização vetorial no gargalo
- Usa convolução em grafos para que os embeddings capturem informações de geometria local e topologia da malha
- O vocabulário aprendido é composto como uma sequência, e o decodificador pode reconstruí-lo de volta em triângulos
- O transformador é responsável pela predição de sequência de tokens do vocabulário aprendido
- Recebe embeddings anteriores como entrada e prevê o índice do próximo embedding
- Após o treinamento, gera malhas amostrando diretamente sequências do vocabulário
- Quando uma malha parcial é fornecida, ele pode inferir vários resultados possíveis de shape completion
- Também pode mostrar exemplos de conclusão enquanto o usuário edita uma malha de entrada parcial
- Também pode ser usado para geração de ativos 3D para cenas, e há um exemplo de um cômodo preenchido com ativos criados pelo MeshGPT
Materiais e trabalhos relacionados
- Materiais relacionados
- Trabalhos relacionados mencionados junto
- PolyGen: An Autoregressive Generative Model of 3D Meshes: gera malhas com um transformador para geração de pontos e um transformador para geração de faces usando pointer network
- BSP-Net: uma rede que gera malhas compactas com binary space partitioning
- AtlasNet: A Papier-Mâché Approach to Learning 3D Surface Generation: representa formas 3D como um conjunto de elementos de superfície paramétricos
- Mesh Diffusion: usa um modelo de difusão 3D para geração de malhas 3D parametrizadas com deformable marching tetrahedra
1 comentários
Opiniões no Hacker News
Acho que uma ideia realmente revolucionária se parece com isto. O artigo tem muitos detalhes, e já sabemos que transformers são escaláveis
Acho que muitas empresas vão usar esta ideia para treinar pipelines genéricos de geração de assets 3D. Em retrospecto, a ideia de “primeiro usar convoluções de grafos para aprender um vocabulário de embeddings quantizados latentes, fazendo com que esses embeddings capturem informações locais de geometria e topologia da malha; depois ordenar esses embeddings e fazer o decodificador reconstruí-los em triângulos para reconstruir a malha de forma eficaz” parece bonita e óbvia demais
Também acho muito legal a parte: “como uma abordagem prática para representar uma malha M para geração autorregressiva, definimos os tokens a serem gerados como uma sequência de triângulos”
O que realmente me atrai nessa área é https://yiconghong.me/LRM/, um grande modelo de reconstrução 3D que cria uma malha 3D a partir de uma única imagem e foi treinado com milhões de modelos 3D diversos
ResNets convolucionais também parecem escalar em visão e linguagem: (cv) https://arxiv.org/abs/2301.00808, (cv) https://arxiv.org/abs/2110.00476, (nlp) https://github.com/HazyResearch/safari
Perceptrons multicamadas também parecem escalar: (cv) https://arxiv.org/abs/2105.01601, (cv) https://arxiv.org/abs/2105.03404
Claro que também não há um motivo forte para abandonar atenção, mas acho que quase ninguém tentou jogar modelos de perceptron multicamadas ou convolucionais na escala de 1 bilhão de parâmetros no problema. Atenção, transformers e seu escalonamento receberam um esforço enorme, com milhares de artigos por ano, e é difícil ver esse nível em outras arquiteturas
Uma das coisas boas do artigo The ResNet Strikes Back é que ele nos lembra de não nos deixarmos levar pelo hype e de que os avanços se combinam. Desde a época das ResNets originais, aprendemos muitas técnicas de treinamento; quando aplicamos isso às ResNets, o desempenho fica muito melhor e a diferença diminui bastante. Pelo menos é assim na área de visão que pesquiso, e, em um ambiente em que é preciso publicar artigos para sobreviver e com revisões guiadas por modas, a pesquisa tende facilmente a se concentrar em uma única direção
Como engenheiro de machine learning que mexe um pouco com Blender e desenvolvimento de jogos por hobby, achei bem impressionante, mas, olhando só os exemplos limitados de móveis, ainda não parece estar em um nível prático
Um modelador experiente conseguiria fazer uma malha dessas em menos de 5 minutos, e a geração ainda precisa ser semeada com polígonos
Acho que o próximo passo será fazer um LLM controlar a geração da semente e adicionar um modelo de imagem à parte autorregressiva da estrutura. Aí talvez vejamos assets para jogos mobile de verdade
Em muitos casos, mesmo que leve mais tempo do que um especialista e a qualidade seja pior, se a alternativa realista for não ter nada, uma ferramenta dessas é melhor
Seria ótimo pagar só 1 ou 2 dólares por modelo e poder colocá-lo diretamente no meu jogo, personalizado para ele
O ponto central é dar ferramentas a não especialistas e, ao mesmo tempo, libertar modeladores experientes de tarefas como criar 10 mil variações de cadeiras necessárias para futuros jogos AAA, para que possam se concentrar em trabalhos mais interessantes. Eles podem criar personagens únicos ou novos modelos futuristas que não existem nos dados de treinamento e que exigem imaginação e competência de verdade
Sistemas procedurais como o Blender Geometry Nodes também já conseguem gerar variações infinitas desse tipo de modelo. Ainda assim, a velocidade do avanço é surpreendente
Acredito que, quanto mais experiência você tiver em um caso de uso específico, mais utilidade conseguirá extrair de um modelo de machine learning
Infelizmente, muitas vezes são exatamente essas pessoas que mais resistem à adoção, sem nem praticar até chegar a um nível em que a ferramenta seja realmente útil. Talvez parte do problema seja esperarem que isto seja uma varinha mágica. Na verdade, é apenas uma nova ferramenta como PhotoShop, Blender, Microsoft Word ou PowerPoint
A maioria das pessoas abre esses apps, clica um pouco sem muito propósito e logo vai embora, sem voltar. Com “IA” é a mesma coisa
A profissão que escolhi, 3D/produção cinematográfica, hoje em dia parece estar numa trincheira de combate. É empolgante e assustador ao mesmo tempo.
Outra grande vantagem é a possibilidade de composição. Se o modelo consegue gerar uma xícara e uma mesa, então ele também sabe gerar uma xícara em cima da mesa.
Imagine poder criar engrenagens complexas e peças mecânicas sob medida para um projeto num piscar de olhos, e posicioná-las exatamente onde quiser, com a rotação desejada. É muito parecido com o modo como o GitHub Copilot funciona.
Por enquanto estamos seguros, mas precisamos aprender a aproveitar as novas tecnologias.
Qual é a entrada? Ela transforma uma consulta em texto como “chair” em uma malha?
Pelo que vi, parece que o principal modo de entrada e saída é completar malhas, não um simples recurso adicional.
A própria entrada parece ser uma malha 3D. Então parece que o modelo faz “completar formas”. Por exemplo, gera uma cadeira a partir de apenas algumas pernas. Ou, quando a forma de entrada é mais completa, talvez ele gere uma “variação”.
Ainda assim, parece um bom ponto de partida. A qualidade é baixa, mas talvez dê para colocar como entrada a saída de outro modelo que gere texto-para-malha e usar este modelo para obter um resultado mais nítido e consistente.
Parece que todos os problemas difíceis restantes que não tinham avançado muito desde os anos 90 estão esperando sua vez de serem resolvidos de alguma forma por transformers. Que época incrível.
O próximo avanço será uma UX para criar cenas 3D em VR diante de modelos como este. Em um ambiente com dados de treinamento, será possível gerar ambientes 3D arbitrários e praticamente permanentes.
Modelos de difusão podem ser usados para gerar texturas.
Mark estava certo; ele só se mexeu cedo demais.
Ah, esse Mark? hahaha, entendi.
Não seria melhor dar o crédito a alguém como o Lecun? Certamente o fato de Mark ter apostado tudo no metaverso não foi porque ele, de alguma forma, previu que deep learning iria decolar. Nem mesmo as pessoas que treinaram os primeiros modelos tinham certeza de quão bem isso funcionaria.
Mesmo que isto seja “apenas” autocompletar malhas, é incrivelmente útil para artistas 3D. Hoje existe uma ruptura entre a forma de esculpir personagens e a forma de animá-los. Em geral, é necessária uma etapa demorada de retopologia do modelo.
Uma retopologia baseada em transformer que receba uma malha bruta e entregue uma topologia limpa economizaria muito tempo.
Outra aplicação é colocar a saída de Gaussian splatting ou de modelos de difusão no MeshGPT. Dá para obter diretamente, a partir de texto, assets utilizáveis com topologia limpa.
Parece que aqui as pessoas não percebem bem que estamos caminhando aos poucos para automatizar a própria automação. E os programadores que conseguirão ganhar a vida com isso serão uma fração muito pequena dos que conseguem ganhar a vida hoje.
Gosto desta área. O artigo inclui um site bonito, exemplos e vídeos.
É muito mais refrescante do que o estilo de artigo com resumo denso, introdução e resultados.
Parece muito legal. Acho que ajudaria muito desenvolvedores indie de jogos a gerar um grande pool de assets.
Em vez disso, grandes empresas vão criar jogos de “crie seu próprio jogo”.
Hoje em dia os jogos indie já parecem bastante derivativos. No médio prazo, acho que as grandes empresas vão usar essa tecnologia e matar os jogos indie.
Uau, isso está melhorando muito. Ainda há um caminho a percorrer por causa de arestas estranhas, mas neste ponto parece mais uma questão de melhorias iterativas do que um problema algorítmico ou complexo.
Meu pipeline ficaria muito mais rápido se eu não precisasse passar todas as malhas por uma biblioteca de geração procedural cheia de pequenos modificadores de malha conectados a drivers. Em vez disso, eu poderia colocar todas as malhas numa pasta, treinar a rede e depois pedir outras coisas no mesmo estilo. Dá para ver que não seria preciso fazer retopo nem outros trabalhos manuais, a menos que eu quisesse intervir de forma mais criativa.
Claro que, até chegar totalmente a esse nível, a geração procedural ainda é melhor, mas é muito empolgante ver isso amadurecendo tão rápido. Espero que, por volta da showcase da Unreal do ano que vem, eles estejam falando de um novo recurso de Asset Generator.