O conteúdo deste site foi traduzido usando inteligência artificial (IA) ou tecnologia de tradução automática e pode conter erros.

Skip to content

CubePart: Um gerador 3D com vocabulário aberto e controle de partes

Criação de recursos funcionais prontos para uso em jogos

SEO image for CubePart: An Open-Vocabulary Part-Controllable 3D Generator

Modelos generativos 3D modernos podem gerar objetos 3D bonitos e complexos a partir de prompts de texto, mas, para um desenvolvedor de jogos, um modelo 3D monolítico não é útil. Um carro, por exemplo, precisa ser dirigível. As rodas precisam girar separadamente, as portas precisam abrir e os faróis precisam acender. 

Atualmente, os artistas 3D precisam dividir manualmente os modelos gerados e nomear as partes — um processo que não é escalável. Nossa inovação é o CubePart: a primeira estrutura de IA generativa que permite a geração de malhas 3D com vocabulário aberto e partes controláveis. O CubePart gera um conjunto montado de malhas distintas, funcionais e rotuladas com precisão que atendem às necessidades de programação do desenvolvedor prontas para uso.

O CubePart expande o conceito de esquemas fixos que introduzimos com a 4D Generation para capacitar um criador a definir a lista de partes nas quais um objeto deve ser dividido. O conjunto de malhas geradas pelo CubePart é inserido diretamente no motor de jogo e pode ser controlado por scripts de animação, física e jogabilidade sem a necessidade de limpeza manual. Publicamos nossa pesquisa sobre o CubePart no arXiv e atualizamos nosso repositório de código aberto Cube para oferecer suporte à geração com controle de partes. Ainda este ano, apresentaremos nossas descobertas na SIGGRAPH

Esquema: o contrato de API para ativos 3D interativos

No Roblox, o comportamento interativo é implementado em scripts que operam em partes — filhos específicos e nomeados de um ativo. Mesmo ativos semelhantes podem exigir partes completamente diferentes, dependendo do jogo ou da situação. Uma taxonomia fixa limitaria a criatividade e a funcionalidade, por isso o CubePart oferece duas entradas: 

  1. Um prompt de texto global que descreve a aparência do objeto: por exemplo, “um carro de corrida com tema de água-viva”.
  2. Uma lista específica e aberta de partes necessárias, chamada de esquema: por exemplo, “roda dianteira esquerda”, “roda dianteira direita”, “roda traseira esquerda”, “roda traseira direita”, “arma”, “faróis”, “tubo de escape”, “carroceria”. 

O esquema é o contrato de API entre o recurso e o código de jogabilidade, e o CubePart permite que um criador gere recursos que estejam em conformidade com o contrato. Esse controle de vocabulário aberto permite que o CubePart capture a diversidade de recursos e experiências do Roblox.

Geração em duas etapas 

O CubePart é uma arquitetura de difusão em duas etapas construída sobre uma representação de forma latente do VecSet

Nas ilustrações abaixo, o usuário inseriu dois prompts. 

  1. O prompt de texto global: “Um caminhão de reboque caracterizado por traços caricaturais.” 
  2. O esquema: “cabine”, “chassi”, “rodas”, “luz de teto”, “conjunto de reboque”.

A Etapa 1 é responsável por definir a forma básica do objeto (um caminhão de reboque caracterizado por traços caricaturais). Esta etapa gera um único latente para todo o objeto usando uma arquitetura MMDiT com o codificador de texto Qwen-VL, treinado em aproximadamente 4,7 milhões de pares de malha-texto. Esta é a etapa que consome muitos dados: mapear linguagem de vocabulário aberto para geometria 3D é a parte difícil da geração 3D e requer um corpus grande e diversificado para funcionar bem. Além disso, ajustamos a Etapa 1 para que seja sensível ao esquema. 

A Etapa 2 utiliza o latente da Etapa 1 e produz um latente de parte para cada entrada do esquema, a fim de reconstruir o objeto com suas partes. Para o nosso exemplo de caminhão de reboque em estilo cartoon, a Etapa 2 gera um latente de parte separado para a cabine, o chassi, as rodas, a luz de teto e o conjunto de reboque, para reconstruir o caminhão de reboque final com partes distintas e funcionais. Dados 3D rotulados por partes são muito mais escassos do que dados de malha de texto. Com a Fase 1 absorvendo o complexo mapeamento de texto para forma a partir de um corpus maior, a Fase 2 precisa apenas aprender onde ficam os limites das partes em um objeto que o modelo já compreende. Vemos a ablação no artigo como evidência direta disso: remover o pré-treinamento da Fase 1 degrada de forma mensurável a generalização de vocabulário aberto da Fase 2. Em resumo, a Fase 1 é o que permite que a Fase 2 generalize. 
Outra inovação fundamental em nossa arquitetura é a forma como as partes se comunicam. Nossa solução consiste em inserir blocos de atenção entre partes dedicados, em vez de modificar os existentes, com projeções de saída inicializadas a zero para que comecem como operações nulas e aprendam a comunicação entre partes sem perturbar o caminho pré-treinado. O princípio será familiar aos leitores do ControlNet, aplicado aqui à decomposição de partes em 3D. Para o nosso exemplo do caminhão de reboque, os blocos de atenção entre partes garantem que a cabine e o conjunto de reboque sejam perfeitamente integrados e posicionados corretamente em relação ao chassi e às rodas.

Nosso conjunto de dados e pipeline VLM 

Para treinar o CubePart, criamos um conjunto de dados com mais de 460.000 ativos — mais de 11 vezes maior do que os conjuntos de dados públicos anteriores¹ — e 2,02 milhões de peças. Em vez da rotulagem manual, construímos um pipeline automatizado usando modelos de visão-linguagem (VLMs).

O pipeline renderiza milhares de modelos 3D a partir de vários ângulos usando uma abordagem emparelhada: uma imagem texturizada (para contexto semântico) e uma imagem com partes coloridas (para rastreamento preciso de limites). Ambas são marcadas com marcadores numerados idênticos, dando ao VLM um identificador endereçável por texto para raciocinar no espaço 3D e agrupar e nomear cada parte.

Ao contrário de conjuntos de dados publicados anteriormente, nos quais todas as rodas de um veículo são simplesmente rotuladas como “roda”, nosso conjunto de dados ensina à IA a diferenciação espacial (por exemplo, distinguir uma “roda dianteira esquerda” de uma “roda traseira direita”). Essa precisão de correspondência é exatamente o que os motores de jogos procuram.

O que o CubePart possibilita e o que vem a seguir

O CubePart permite que os criadores gerem ativos que correspondam ao seu código de jogabilidade e tenham compatibilidade direta com fluxos de trabalho existentes de animação, física e script. O CubePart também pode decompor malhas de artistas existentes em um novo esquema, o que é útil para atualizar ativos legados, não apenas para gerar novos.

Ainda há muito a ser feito. O CubePart lida com a decomposição de corpos rígidos, mas também estamos trabalhando em pesos de vértices com skin para a deformação orgânica de personagens. A atenção entre partes reduz drasticamente a sobreposição, mas não a elimina. O raciocínio espacial — “dianteira esquerda” versus “traseira direita” — ainda tem espaço significativo para melhorias.

Vemos a geração orientada por esquemas como o passo que torna o 3D generativo útil em uma plataforma onde todos os ativos participam de uma simulação. Em breve, essa tecnologia estará disponível para os criadores do Roblox diretamente dentro do Roblox Studio.

1Em comparação com o PartVerseXL