Modelli e piattaforme di IA
Come funziona la generazione di 3D tramite AI: Meta 3D Gen, OpenAI Shap-E e altro
La capacità di generare asset digitali 3D da prompt di testo rappresenta uno degli sviluppi più emozionanti recenti nell’ambito dell’intelligenza artificiale e della grafica computerizzata. Poiché il mercato degli asset digitali 3D è previsto crescere da 28,3 miliardi di dollari nel 2024 a 51,8 miliardi di dollari entro il 2029, i modelli di AI text-to-3D sono pronti a svolgere un ruolo importante nella rivoluzione della creazione di contenuti in settori come il gaming, il cinema, l’e-commerce e altro. Ma come funzionano esattamente questi sistemi di AI? In questo articolo, esploreremo nel dettaglio i dettagli tecnici dietro la generazione di 3D tramite testo.
La sfida della generazione di 3D
Generare asset 3D da testo è un compito significativamente più complesso rispetto alla generazione di immagini 2D. Mentre le immagini 2D sono essenzialmente griglie di pixel, gli asset 3D richiedono la rappresentazione di geometria, texture, materiali e spesso animazioni nello spazio tridimensionale. Questa maggiore dimensionalità e complessità rende il compito di generazione molto più impegnativo.
Alcune delle sfide chiave nella generazione di 3D tramite testo includono:
- Rappresentare la geometria e la struttura 3D
- Generare texture e materiali coerenti sulla superficie 3D
- Garantire la plausibilità fisica e la coerenza da più punti di vista
- Catturare dettagli fini e struttura globale contemporaneamente
- Generare asset che possano essere facilmente rappresentati o stampati in 3D
Per affrontare queste sfide, i modelli di text-to-3D sfruttano diverse tecnologie e tecniche chiave.
Componenti chiave dei sistemi di text-to-3D
La maggior parte dei sistemi di generazione di 3D tramite testo condivide alcuni componenti fondamentali:
- Codifica del testo: conversione del prompt di testo di input in una rappresentazione numerica
- Rappresentazione 3D: un metodo per rappresentare la geometria e l’aspetto 3D
- Modello generativo: il modello di AI principale per la generazione dell’asset 3D
- Rendering: conversione della rappresentazione 3D in immagini 2D per la visualizzazione
Esaminiamo ogni uno di questi nel dettaglio.
Codifica del testo
Il primo passo consiste nel convertire il prompt di testo di input in una rappresentazione numerica che il modello di AI possa utilizzare. Ciò viene solitamente fatto utilizzando grandi modelli linguistici come BERT o GPT.
Rappresentazione 3D
Esistono diversi metodi comuni per rappresentare la geometria 3D nei modelli di AI:
- Griglie di voxel: array 3D di valori che rappresentano l’occupazione o le caratteristiche
- Nuvole di punti: insiemi di punti 3D
- Mesh: vertici e facce che definiscono una superficie
- Funzioni implicite: funzioni continue che definiscono una superficie (ad esempio, funzioni di distanza firmate)
- Campi di radiazione neurali (NeRF): reti neurali che rappresentano la densità e il colore nello spazio 3D
Ognuno di questi ha compromessi in termini di risoluzione, utilizzo della memoria e facilità di generazione. Molti modelli recenti utilizzano funzioni implicite o NeRF in quanto consentono risultati di alta qualità con requisiti computazionali ragionevoli.
Ad esempio, possiamo rappresentare una sfera semplice come una funzione di distanza firmata:
import numpy as np
<p>def sphere_sdf(x, y, z, radius=1.0):
return np.sqrt(x**2 + y**2 + z**2) - radius</p>
<p># Valuta SDF in un punto 3D
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f"Distanza dalla superficie della sfera: {distance}")
Modello generativo
Il nucleo di un sistema di text-to-3D è il modello generativo che produce la rappresentazione 3D dal prompt di testo. La maggior parte dei modelli attuali utilizza una variazione di un modello di diffusione, simile a quelli utilizzati nella generazione di immagini 2D.
I modelli di diffusione funzionano aggiungendo gradualmente rumore ai dati, poi imparando a invertire questo processo. Per la generazione di 3D, questo processo avviene nello spazio della rappresentazione 3D scelta.
Un pseudocodice semplificato per un passo di addestramento del modello di diffusione potrebbe avere questo aspetto:
def diffusion_training_step(model, x_0, text_embedding): # Campiona un passo temporale casuale t = torch.randint(0, num_timesteps, (1,)) <p># Aggiungi rumore all'input noise = torch.randn_like(x_0) x_t = add_noise(x_0, noise, t)</p> <p># Prevedi il rumore predicted_noise = model(x_t, t, text_embedding)</p> <p># Calcola la perdita loss = F.mse_loss(noise, predicted_noise)</p> return loss <p># Ciclo di addestramento for batch in dataloader: x_0, text = batch text_embedding = encode_text(text) loss = diffusion_training_step(model, x_0, text_embedding) loss.backward() optimizer.step()
Durante la generazione, iniziamo da rumore puro e denoisiamo iterativamente, condizionati sull’incorporazione del testo.
Rendering
Per visualizzare i risultati e calcolare le perdite durante l’addestramento, dobbiamo rappresentare la nostra rappresentazione 3D in immagini 2D. Ciò viene solitamente fatto utilizzando tecniche di rendering differenziabili che consentono ai gradienti di fluire attraverso il processo di rendering.
Per le rappresentazioni basate su mesh, potremmo utilizzare un renderer basato sulla rasterizzazione:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr <p>def render_mesh(vertices, faces, image_size=256): # Crea un renderer renderer = pr.MeshRenderer( rasterizer=pr.MeshRasterizer(), shader=pr.SoftPhongShader() )</p> <p># Imposta la camera cameras = pr.FoVPerspectiveCameras()</p> <p># Render images = renderer(vertices, faces, cameras=cameras)</p> return images <p># Esempio di utilizzo vertices = torch.rand(1, 100, 3) # Vertici casuali faces = torch.randint(0, 100, (1, 200, 3)) # Facce casuali rendered_images = render_mesh(vertices, faces)
Per le rappresentazioni implicite come NeRF, utilizziamo solitamente tecniche di ray marching per il rendering.
Unendo tutto: la pipeline di text-to-3D
Ora che abbiamo coperto i componenti chiave, esaminiamo come si uniscono in una tipica pipeline di generazione di 3D tramite testo:
- Codifica del testo: il prompt di input viene codificato in una rappresentazione vettoriale densa utilizzando un modello linguistico.
- Generazione iniziale: un modello di diffusione, condizionato sull’incorporazione del testo, genera una rappresentazione 3D iniziale (ad esempio, un NeRF o una funzione implicita).
- Coerenza multi-vista: il modello rappresenta più viste dell’asset 3D generato e garantisce la coerenza tra i punti di vista.
- Rifinizione: reti aggiuntive possono raffinare la geometria, aggiungere texture o migliorare i dettagli.
- Output finale: la rappresentazione 3D viene convertita in un formato desiderato (ad esempio, mesh testurizzata) per l’uso in applicazioni a valle.
Ecco un esempio semplificato di come ciò potrebbe apparire nel codice:
class TextTo3D(nn.Module): def __init__(self): super().__init__() self.text_encoder = BertModel.from_pretrained('bert-base-uncased') self.diffusion_model = DiffusionModel() self.refiner = RefinerNetwork() self.renderer = DifferentiableRenderer() <p>def forward(self, text_prompt): # Codifica del testo text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p> <p># Genera rappresentazione 3D iniziale initial_3d = self.diffusion_model(text_embedding)</p> <p># Renderizza più viste views = self.renderer(initial_3d, num_views=4)</p> <p># Raffina in base alla coerenza multi-vista refined_3d = self.refiner(initial_3d, views)</p> return refined_3d <p># Utilizzo model = TextTo3D() text_prompt = "Una macchina sportiva rossa" generated_3d = model(text_prompt)
Top modelli di asset 3D disponibili
3DGen – Meta
3DGen è progettato per affrontare il problema della generazione di contenuti 3D, come personaggi, oggetti e scene, da descrizioni testuali.

Large Language and Text-to-3D Models – 3d-gen
3DGen supporta il rendering basato sulla fisica (PBR), essenziale per la ri-illuminazione realistica degli asset 3D in applicazioni reali. Consente anche la generazione di texture per forme 3D generate in precedenza o create dall’artista utilizzando nuovi input testuali. La pipeline integra due componenti principali: Meta 3D AssetGen e Meta 3D TextureGen, che gestiscono la generazione di testo-3D e testo-texture, rispettivamente.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) è responsabile della generazione iniziale degli asset 3D dai prompt di testo. Questo componente produce una mesh 3D con texture e mappe di materiali PBR in circa 30 secondi.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun et al., 2024) raffina le texture generate da AssetGen. Può anche essere utilizzato per generare nuove texture per mesh 3D esistenti in base a descrizioni testuali aggiuntive. Questa fase richiede circa 20 secondi.
Point-E (OpenAI)
Point-E, sviluppato da OpenAI, è un altro modello di generazione di 3D tramite testo degno di nota. A differenza di DreamFusion, che produce rappresentazioni NeRF, Point-E genera nuvole di punti 3D.
Caratteristiche chiave di Point-E:
a) Pipeline a due fasi: Point-E genera prima una vista sintetica 2D utilizzando un modello di diffusione testo-immagine, poi utilizza questa immagine per condizionare un secondo modello di diffusione che produce la nuvola di punti 3D.
b) Efficienza: Point-E è progettato per essere efficiente dal punto di vista computazionale, in grado di generare nuvole di punti 3D in pochi secondi su una sola GPU.
c) Informazioni sul colore: il modello può generare nuvole di punti colorati, preservando sia le informazioni geometriche che quelle di aspetto.
Limitazioni:
- Fedeltà inferiore rispetto agli approcci basati su mesh o NeRF
- Le nuvole di punti richiedono un’elaborazione aggiuntiva per molte applicazioni a valle
Shap-E (OpenAI):
Basandosi su Point-E, OpenAI ha introdotto Shap-E, che genera mesh 3D invece di nuvole di punti. Ciò risolve alcune delle limitazioni di Point-E, mantenendo al tempo stesso l’efficienza computazionale.
Caratteristiche chiave di Shap-E:
a) Rappresentazione implicita: Shap-E apprende a generare rappresentazioni implicite (funzioni di distanza firmate) di oggetti 3D.
b) Estrazione della mesh: il modello utilizza un’implementazione differenziabile dell’algoritmo marching cubes per convertire la rappresentazione implicita in una mesh poligonale.
c) Generazione di texture: Shap-E può anche generare texture per le mesh 3D, risultando in output più attraenti.
Vantaggi:
- Tempi di generazione rapidi (secondi o minuti)
- Output di mesh diretto adatto per il rendering e le applicazioni a valle
- Capacità di generare sia la geometria che la texture
GET3D (NVIDIA):
GET3D, sviluppato da ricercatori NVIDIA (NVDA ), è un altro potente modello di generazione di 3D tramite testo che si concentra sulla produzione di mesh 3D testurizzate di alta qualità.
Caratteristiche chiave di GET3D:
a) Rappresentazione di superficie esplicita: a differenza di DreamFusion o Shap-E, GET3D genera direttamente rappresentazioni di superficie esplicite (mesh) senza rappresentazioni implicite intermedie.
b) Generazione di texture: il modello include una tecnica di rendering differenziabile per apprendere e generare texture di alta qualità per le mesh 3D.
c) Architettura basata su GAN: GET3D utilizza un approccio di rete generativa antagonista (GAN), che consente tempi di generazione rapidi una volta addestrato il modello.
Vantaggi:
- Geometria e texture di alta qualità
- Tempi di inferenza rapidi
- Integrazione diretta con i motori di rendering 3D
Limitazioni:
- Richiede dati di addestramento 3D, che possono essere scarsi per alcune categorie di oggetti
Conclusione
La generazione di 3D tramite AI rappresenta un cambiamento fondamentale nel modo in cui creiamo e interagiamo con i contenuti 3D. Sfruttando tecniche di apprendimento avanzate, questi modelli possono produrre asset 3D complessi e di alta qualità da semplici descrizioni testuali. Man mano che la tecnologia continua a evolversi, possiamo aspettarci di vedere sistemi di generazione di 3D tramite testo sempre più sofisticati e capaci, che rivoluzioneranno settori come il gaming, il cinema, la progettazione di prodotti e l’architettura.













