I contenuti di questo sito sono stati tradotti mediante intelligenza artificiale (IA) o tecnologia di traduzione automatica e potrebbero contenere errori.

Skip to content

CubePart: un generatore 3D a vocabolario aperto e controllabile per parti

Creazione di risorse funzionali pronte per il gioco

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

I moderni modelli generativi 3D sono in grado di generare oggetti 3D belli e complessi a partire da prompt di testo, ma per uno sviluppatore di videogiochi un modello 3D monolitico non è utile. Un'auto, ad esempio, deve essere guidabile. Le ruote devono ruotare separatamente, le portiere devono aprirsi e i fari devono accendersi. 

Attualmente, gli artisti 3D devono smembrare manualmente i modelli generati e dare un nome alle parti: un processo che non è scalabile. La nostra innovazione è CubePart: il primo framework di IA generativa che consente la generazione di mesh 3D con vocabolario aperto e parti controllabili. CubePart produce un insieme assemblato di mesh distinte, funzionali e accuratamente etichettate che soddisfano immediatamente le esigenze di programmazione dello sviluppatore.

CubePart espande il concetto di schemi fissi che abbiamo introdotto con 4D Generation per consentire a un creatore di definire l'elenco delle parti in cui un oggetto dovrebbe essere suddiviso. L'insieme di mesh generate da CubePart viene inserito direttamente nel motore di gioco e può essere controllato da script di animazione, fisica e gameplay senza necessità di pulizia manuale. Abbiamo pubblicato la nostra ricerca su CubePart su arXiv e aggiornato il nostro repository open source Cube per supportare la generazione controllabile per parti. Entro la fine dell'anno presenteremo i nostri risultati al SIGGRAPH

Schema: il contratto API per le risorse 3D interattive

Su Roblox, il comportamento interattivo è implementato in script che operano su parti specifiche, ovvero figli con un nome proprio di una risorsa. Anche risorse simili possono richiedere parti completamente diverse a seconda del gioco o della situazione. Una tassonomia fissa limiterebbe la creatività e la funzionalità, quindi CubePart offre due input: 

  1. Un prompt di testo globale che descrive l'aspetto dell'oggetto: ad esempio, "un'auto da corsa a tema medusa".
  2. Un elenco specifico e aperto di parti richieste chiamato schema: ad esempio, "ruota anteriore sinistra", "ruota anteriore destra", "ruota posteriore sinistra", "ruota posteriore destra", "pistola", "fari", "tubo di scarico", "carrozzeria". 

Lo schema è il contratto API tra l'asset e il codice di gioco, e CubePart consente a un creatore di generare asset conformi al contratto. Questo controllo a vocabolario aperto permette a CubePart di catturare la diversità degli asset e delle esperienze di Roblox.

Generazione in due fasi 

CubePart è un'architettura di diffusione in due fasi basata su una rappresentazione latente delle forme VecSet

Nelle illustrazioni sottostanti, l'utente ha inserito due prompt. 

  1. Il prompt di testo globale: "Un carro attrezzi caratterizzato da tratti cartooneschi." 
  2. Lo schema: "cabina", "telaio", "ruote", "lampeggiante sul tetto", "gancio di traino".

La fase 1 è responsabile della definizione della forma di base dell'oggetto (un carro attrezzi caratterizzato da tratti cartooneschi). Questa fase genera un unico latente per l'intero oggetto utilizzando un'architettura MMDiT con l'encoder di testo Qwen-VL, addestrato su circa 4,7 milioni di coppie mesh-testo. Questa è la fase che richiede molti dati: mappare un linguaggio a vocabolario aperto sulla geometria 3D è la parte difficile del 3D generativo e richiede un corpus ampio e diversificato per funzionare bene. Inoltre, ottimizziamo la Fase 1 affinché sia sensibile allo schema. 

La Fase 2 prende il latente della Fase 1 e produce un latente di parte per ogni voce dello schema per ricostruire l'oggetto con le sue parti. Per il nostro esempio di carro attrezzi in stile cartone animato, la Fase 2 genera un latente di parte separato per la cabina, il telaio, le ruote, la luce sul tetto e il gruppo di traino per ricostruire il carro attrezzi finale con parti distinte e funzionali. I dati 3D etichettati per parte sono molto più rari dei dati mesh-testo. Con la Fase 1 che assorbe la complessa mappatura da testo a forma da un corpus più ampio, la Fase 2 deve solo imparare dove si trovano i confini delle parti su un oggetto che il modello già comprende. Consideriamo l'ablazione descritta nell'articolo come una prova diretta di ciò: la rimozione del pre-addestramento della Fase 1 degrada in modo misurabile la generalizzazione a vocabolario aperto della Fase 2. In breve, la Fase 1 è ciò che permette alla Fase 2 di generalizzare. 
Un'altra innovazione fondamentale nella nostra architettura riguarda il modo in cui le parti comunicano tra loro. La nostra soluzione consiste nell'inserire blocchi di attenzione dedicati tra le parti piuttosto che modificare quelli esistenti, con proiezioni di output inizializzate a zero in modo che inizino come operazioni nulle e apprendano la comunicazione tra le parti senza disturbare il percorso pre-addestrato. Il principio risulterà familiare ai lettori di ControlNet, applicato qui alla scomposizione delle parti in 3D. Per il nostro esempio del carro attrezzi, i blocchi di attenzione tra le parti assicurano che la cabina e il gruppo di traino siano perfettamente integrati e posizionati correttamente rispetto al telaio e alle ruote.

Il nostro dataset e la pipeline VLM 

Per addestrare CubePart, abbiamo creato un dataset con oltre 460.000 risorse — più di 11 volte più grande dei precedenti dataset pubblici1 — e 2,02 milioni di parti. Invece di ricorrere all'etichettatura manuale, abbiamo costruito una pipeline automatizzata utilizzando modelli visione-linguaggio (VLM).

La pipeline rende migliaia di modelli 3D da più angolazioni utilizzando un approccio a coppie: un'immagine con texture (per il contesto semantico) e un'immagine con parti colorate (per un tracciamento preciso dei confini). Entrambe sono contrassegnate con marcatori numerati identici, fornendo al VLM un riferimento testuale per ragionare nello spazio 3D e raggruppare e denominare ogni parte.

A differenza dei set di dati pubblicati in precedenza, in cui ogni ruota di un veicolo è semplicemente etichettata come "ruota", il nostro set di dati insegna all'IA la differenziazione spaziale (ad esempio, distinguere una "ruota anteriore sinistra" da una "ruota posteriore destra"). Questa precisione di corrispondenza è esattamente ciò che cercano i motori di gioco.

Cosa sblocca CubePart e quali sono i prossimi passi

CubePart consente ai creatori di generare risorse che corrispondono al loro codice di gioco e sono direttamente compatibili con i flussi di lavoro esistenti di animazione, fisica e scripting. CubePart può anche scomporre le mesh esistenti degli artisti in un nuovo schema, il che è utile per aggiornare le risorse legacy, non solo per generarne di nuove.

C'è ancora molto da fare. CubePart gestisce la scomposizione dei corpi rigidi, ma stiamo anche lavorando sui pesi dei vertici skinned per la deformazione organica dei personaggi. L'attenzione cross-part riduce drasticamente la sovrapposizione, ma non la elimina. Il ragionamento spaziale — "anteriore sinistra" contro "posteriore destra" — ha ancora un margine di miglioramento significativo.

Consideriamo la generazione basata su schemi come il passo che rende il 3D generativo utile su una piattaforma in cui ogni risorsa partecipa a una simulazione. Presto questa tecnologia sarà disponibile per i creatori di Roblox direttamente all'interno di Roblox Studio.

1Rispetto a PartVerseXL