AI-modellen en platforms
Hoe Text-to-3D AI-generatie werkt: Meta 3D Gen, OpenAI Shap-E en meer

Door
Aayush Mittal Mittal
De mogelijkheid om 3D-digitale activa te genereren vanuit tekstprompts vertegenwoordigt een van de meest spannende recente ontwikkelingen in AI en computergraphics. Aangezien de markt voor 3D-digitale activa naar verwachting zal groeien van 28,3 miljard dollar in 2024 tot 51,8 miljard dollar in 2029, zijn text-to-3D AI-modellen klaar om een belangrijke rol te spelen bij het revolutioneren van contentcreatie in branches als gaming, film, e-commerce en meer. Maar hoe werken deze AI-systemen precies? In dit artikel nemen we een diepe duik in de technische details achter text-to-3D-generatie.
De uitdaging van 3D-generatie
Het genereren van 3D-activa vanuit tekst is een aanzienlijk complexere taak dan 2D-afbeeldingsgeneratie. Terwijl 2D-afbeeldingen essentieel grids van pixels zijn, vereisen 3D-activa het representeren van geometrie, texturen, materialen en vaak animaties in driedimensionale ruimte. Deze extra dimensie en complexiteit maken de generatietaken veel moeilijker.
Enkele sleuteluitdagingen in text-to-3D-generatie zijn:
- Het representeren van 3D-geometrie en structuur
- Het genereren van consistente texturen en materialen over het 3D-oppervlak
- Het waarborgen van fysieke plausibiliteit en coherentie vanuit meerdere gezichtspunten
- Het vastleggen van fijne details en globale structuur tegelijkertijd
- Het genereren van activa die gemakkelijk gerenderd of 3D-geprint kunnen worden
Om deze uitdagingen aan te pakken, gebruiken text-to-3D-modellen verschillende sleuteltechnologieën en -technieken.
Sleutelcomponenten van text-to-3D-systemen
De meeste state-of-the-art text-to-3D-generatiesystemen delen een aantal kerncomponenten:
- Tekstcodering: Het omzetten van de invoertekstprompt in een numerieke representatie
- 3D-representatie: Een methode voor het representeren van 3D-geometrie en uiterlijk
- Generatief model: Het kern-AI-model voor het genereren van het 3D-actief
- Rendering: Het omzetten van de 3D-representatie in 2D-afbeeldingen voor visualisatie
Laten we elk van deze onderdelen nader bekijken.
Tekstcodering
De eerste stap is het omzetten van de invoertekstprompt in een numerieke representatie die het AI-model kan verwerken. Dit gebeurt meestal met behulp van grote taalmodellen zoals BERT of GPT.
3D-representatie
Er zijn verschillende veelvoorkomende manieren om 3D-geometrie in AI-modellen te representeren:
- Voxelgrid: 3D-arrays van waarden die bezetting of kenmerken vertegenwoordigen
- Puntsbewolking: Verzamelingen van 3D-punten
- Netwerken: Vertices en faces die een oppervlak definiëren
- Impliciete functies: Continue functies die een oppervlak definiëren (bijv. ondertekende afstandfuncties)
- Neurale stralingsvelden (NeRFs): Neurale netwerken die dichtheid en kleur in 3D-ruimte vertegenwoordigen
Elk heeft compromissen in termen van resolutie, geheugengebruik en gemak van generatie. Veel recente modellen gebruiken impliciete functies of NeRFs, omdat ze hoge kwaliteit resultaten mogelijk maken met redelijke computationele vereisten.
Bijvoorbeeld kunnen we een eenvoudige bol als een ondertekende afstandfunctie representeren:
import numpy as np
<p>def sphere_sdf(x, y, z, radius=1.0):</p>
<p> return np.sqrt(x**2 + y**2 + z**2) - radius</p>
<p># Evaluate SDF at a 3D point</p>
<p>point = [0.5, 0.5, 0.5]</p>
<p>distance = sphere_sdf(*point)</p>
<p>print(f"Distance to sphere surface: {distance}")</p>
Generatief model
Het kern van een text-to-3D-systeem is het generatieve model dat de 3D-representatie produceert vanuit de tekstembedding. De meeste state-of-the-art-modellen gebruiken een variatie van een diffusiemodel, vergelijkbaar met die gebruikt in 2D-afbeeldingsgeneratie.
Diffusiemodellen werken door geleidelijk ruis toe te voegen aan gegevens en vervolgens te leren om dit proces om te keren. Voor 3D-generatie gebeurt dit proces in de ruimte van de gekozen 3D-representatie.
Een vereenvoudigd pseudocode voor een diffusietrainingstap kan er als volgt uitzien:
def diffusion_training_step(model, x_0, text_embedding):</p> <p> # Sample a random timestep</p> <p> t = torch.randint(0, num_timesteps, (1,))</p> <p> # Add noise to the input</p> <p> noise = torch.randn_like(x_0)</p> <p> x_t = add_noise(x_0, noise, t)</p> <p> # Predict the noise</p> <p> predicted_noise = model(x_t, t, text_embedding)</p> <p> # Compute loss</p> <p> loss = F.mse_loss(noise, predicted_noise)</p> <p> return loss</p> <p># Training loop</p> <p>for batch in dataloader:</p> <p> x_0, text = batch</p> <p> text_embedding = encode_text(text)</p> <p> loss = diffusion_training_step(model, x_0, text_embedding)</p> <p> loss.backward()</p> <p> optimizer.step()</p>
Tijdens generatie starten we vanuit pure ruis en itereren we denoising, voorwaardelijk op de tekstembedding.
Rendering
Om resultaten te visualiseren en verlies te berekenen tijdens training, moeten we onze 3D-representatie omzetten in 2D-afbeeldingen. Dit gebeurt meestal met behulp van differentieerbare renderingtechnieken die gradients toelaten om terug te stromen door het renderingproces.
Voor mesh-gebaseerde representaties kunnen we een rasterisatie-gebaseerde renderer gebruiken:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr <p>def render_mesh(vertices, faces, image_size=256):</p> <p> # Create a renderer</p> <p> renderer = pr.MeshRenderer(</p> <p> rasterizer=pr.MeshRasterizer(),</p> <p> shader=pr.SoftPhongShader()</p> <p> )</p> <p> # Set up camera</p> <p> cameras = pr.FoVPerspectiveCameras()</p> <p> # Render</p> <p> images = renderer(vertices, faces, cameras=cameras)</p> <p> return images</p> <p># Example usage</p> <p>vertices = torch.rand(1, 100, 3) # Random vertices</p> <p>faces = torch.randint(0, 100, (1, 200, 3)) # Random faces</p> <p>rendered_images = render_mesh(vertices, faces)</p>
Voor impliciete representaties zoals NeRFs gebruiken we meestal ray marching-technieken om weergaven te renderen.
Alles samen: de text-to-3D-pipeline
Nu we de sleutelcomponenten hebben behandeld, laten we zien hoe ze samenwerken in een typische text-to-3D-generatiepipeline:
- Tekstcodering: De invoerprompt wordt omgezet in een dichte vectorrepresentatie met behulp van een taalmodel.
- Initiële generatie: Een diffusiemodel, voorwaardelijk op de tekstembedding, genereert een initiële 3D-representatie (bijv. een NeRF of impliciete functie).
- Multi-view consistentie: Het model rendert meerdere weergaven van het gegenereerde 3D-actief en waarborgt consistentie over meerdere gezichtspunten.
- Verfijning: Additionele netwerken kunnen geometrie, texturen of details verfijnen.
- Definitief resultaat: De 3D-representatie wordt omgezet in een gewenst formaat (bijv. getextureerd mesh) voor gebruik in downstream-toepassingen.
Hier is een vereenvoudigd voorbeeld van hoe dit eruit kan zien in code:
class TextTo3D(nn.Module):</p>
<p> def __init__(self):</p>
<p> super().__init__()</p>
<p> self.text_encoder = BertModel.from_pretrained('bert-base-uncased')</p>
<p> self.diffusion_model = DiffusionModel()</p>
<p> self.refiner = RefinerNetwork()</p>
<p> self.renderer = DifferentiableRenderer()</p>
<p> def forward(self, text_prompt):</p>
<p> # Encode text</p>
<p> text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p>
<p> # Generate initial 3D representation</p>
<p> initial_3d = self.diffusion_model(text_embedding)</p>
<p> # Render multiple views</p>
<p> views = self.renderer(initial_3d, num_views=4)</p>
<p> # Refine based on multi-view consistency</p>
<p> refined_3d = self.refiner(initial_3d, views)</p>
<p> return refined_3d</p>
<p># Usage</p>
<p>model = TextTo3D()</p>
<p>text_prompt = "A red sports car"</p>
<p>generated_3d = model(text_prompt)</p>
Top Text to 3d Asset Models Avaliable
3DGen – Meta
3DGen is ontworpen om het probleem van het genereren van 3D-inhoud aan te pakken, zoals personages, voorwerpen en scènes, vanuit tekstuele beschrijvingen.

Large Language and Text-to-3D Models – 3d-gen
3DGen ondersteunt fysiek gebaseerde rendering (PBR), essentieel voor realistische 3D-actiefrelighting in echte toepassingen. Het maakt ook generatieve retexturing van eerder gegenereerde of door artiesten gemaakte 3D-vormen mogelijk met behulp van nieuwe tekstuele invoer. De pipeline integreert twee kerncomponenten: Meta 3D AssetGen en Meta 3D TextureGen, die respectievelijk text-to-3D en text-to-texture generatie afhandelen.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) is verantwoordelijk voor de initiële generatie van 3D-activa vanuit tekstprompts. Deze component produceert een 3D-mesh met texturen en PBR-materiaalkaarten in ongeveer 30 seconden.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun et al., 2024) verfijnt de texturen gegenereerd door AssetGen. Het kan ook worden gebruikt om nieuwe texturen te genereren voor bestaande 3D-meshes op basis van aanvullende tekstuele beschrijvingen. Deze fase duurt ongeveer 20 seconden.
Point-E (OpenAI)
Point-E, ontwikkeld door OpenAI, is een ander opvallend text-to-3D-generatiemodel. In tegenstelling tot DreamFusion, dat NeRF-representaties produceert, genereert Point-E 3D-puntsbewolkingen.
Sleutelfuncties van Point-E:
a) Tweestaps-pipeline: Point-E genereert eerst een synthetische 2D-weergave met behulp van een text-to-image diffusiemodel, en gebruikt vervolgens deze afbeelding om een tweede diffusiemodel te conditioneren dat de 3D-puntsbewolking produceert.
b) Efficiëntie: Point-E is ontworpen om computationeel efficiënt te zijn, in staat om 3D-puntsbewolkingen te genereren in seconden op één GPU.
c) Kleurinformatie: Het model kan gekleurde puntsbewolkingen genereren, waardoor zowel geometrische als uiterlijk informatie behouden blijven.
Beperkingen:
- Lagere kwaliteit in vergelijking met mesh-gebaseerde of NeRF-gebaseerde benaderingen
- Puntsbewolkingen vereisen aanvullende verwerking voor veel downstream-toepassingen
Shap-E (OpenAI):
OpenAI introduceerde Shap-E, dat 3D-meshes genereert in plaats van puntsbewolkingen. Dit adresseert enkele van de beperkingen van Point-E, terwijl het computationeel efficiënt blijft.
Sleutelfuncties van Shap-E:
a) Impliciete representatie: Shap-E leert impliciete representaties (ondertekende afstandfuncties) van 3D-objecten te genereren.
b) Mesh-extractie: Het model gebruikt een differentieerbare implementatie van de marching cubes-algoritme om de impliciete representatie om te zetten in een polygonale mesh.
c) Textuurgeneratie: Shap-E kan ook texturen voor de 3D-meshes genereren, resulterend in visueel aantrekkelijkere uitvoer.
Voordelen:
- Snel generatietijden (seconden tot minuten)
- Directe mesh-uitvoer geschikt voor rendering en downstream-toepassingen
- Mogelijkheid om zowel geometrie als textuur te genereren
GET3D (NVIDIA):
GET3D, ontwikkeld door NVIDIA (NVDA ), is een ander krachtig text-to-3D-generatiemodel dat zich richt op het produceren van hoge kwaliteit getextureerde 3D-meshes.
Sleutelfuncties van GET3D:
a) Expliciete oppervlakte-representatie: In tegenstelling tot DreamFusion of Shap-E, genereert GET3D expliciete oppervlakte-representaties (meshes) zonder tussenliggende impliciete representaties.
b) Textuurgeneratie: Het model bevat een differentieerbare renderingtechniek om hoge kwaliteit texturen te leren en te genereren voor de 3D-meshes.
c) GAN-gebaseerde architectuur: GET3D gebruikt een generatief tegenstrijdig netwerk (GAN), waardoor snelle generatie mogelijk is zodra het model getraind is.
Voordelen:
- Hoge kwaliteit geometrie en texturen
- Snelle inferentietijden
- Directe integratie met 3D-rendering-engines
Beperkingen:
- Vereist 3D-trainingsgegevens, die schaars kunnen zijn voor sommige objectcategorieën
Conclusie
Text-to-3D AI-generatie vertegenwoordigt een fundamentele verschuiving in hoe we 3D-inhoud creëren en ermee interacteren. Door geavanceerde diepe leertechnieken te gebruiken, kunnen deze modellen complexe, hoge kwaliteit 3D-activa produceren vanuit eenvoudige tekstuele beschrijvingen. Naarmate de technologie blijft evolueren, kunnen we verwachten steeds geavanceerdere en capabelere text-to-3D-systemen te zien die branches van gaming en film tot productontwerp en architectuur zullen revolutioneren.
Ik heb de afgelopen vijf jaar doorgebracht met het onderdompelen van mezelf in de fascinerende wereld van Machine Learning en Deep Learning. Mijn passie en expertise hebben me geleid om bij te dragen aan meer dan 50 diverse software-engineeringprojecten, met een bijzondere focus op AI/ML. Mijn voortdurende nieuwsgierigheid heeft me ook aangetrokken tot Natural Language Processing, een vakgebied dat ik graag verder wil verkennen.
Ontdek meer


Python-pakketinstallaties als index van lokale AI-adoptie


OpenAI’s beste model is nu uitgebracht achter een overheidshek


De AI-wapenwedloop Intensifieert: AMD’s Strategisch Partnerschap met OpenAI


OpenAI sluit zevenjarig contract ter waarde van 38 miljard dollar met AWS-cloudpartnerschap


Optimalisatie van Neural Radiance Fields (NeRF) voor Real-Time 3D-Rendering in E-Commerce Platforms


Claude’s Model Context Protocol (MCP): Een Ontwikkelaarsgids
