AI-modeller og plattformer
Hvordan fungerer tekst-til-3D AI-generering: Meta 3D Gen, OpenAI Shap-E og mer

Av
Aayush Mittal Mittal
Evnen til å generere 3D-digitale aktiva fra tekstprompt representerer en av de mest spennende nyeste utviklingene i AI og datagrafikk. Ettersom markedet for 3D-digitale aktiva forventes å vokse fra 28,3 milliarder dollar i 2024 til 51,8 milliarder dollar i 2029, er tekst-til-3D AI-modeller godt posisjonert til å spille en stor rolle i å revolusjonere innholdsskapning over hele industrier som spill, film, e-handel og mer. Men hvordan fungerer disse AI-systemene egentlig? I denne artikkelen skal vi dykke dypt inn i de tekniske detaljene bak tekst-til-3D-generering.
Utfordringen med 3D-generering
Å generere 3D-aktiva fra tekst er en betydelig mer kompleks oppgave enn 2D-bildegenerering. Mens 2D-bilder i hovedsak er ruter av piksler, krever 3D-aktiva representasjon av geometri, teksturer, materialer og ofte animasjoner i tre dimensjoner. Denne ekstra dimensjonaliteten og kompleksiteten gjør genereringsoppgaven mye mer utfordrende.
Noen nøkkelutfordringer i tekst-til-3D-generering inkluderer:
- Representere 3D-geometri og struktur
- Generere konsistente teksturer og materialer over hele 3D-overflaten
- Sikre fysisk plausibilitet og konsistens fra flere synsvinkler
- Fange fine detaljer og global struktur samtidig
- Generere aktiva som kan enkelt rendres eller 3D-prints
For å takle disse utfordringene, utnytter tekst-til-3D-modeller flere nøkkelteknologier og -teknikker.
Nøkkelkomponenter i tekst-til-3D-systemer
De fleste state-of-the-art tekst-til-3D-genereringssystemer deler noen felles komponenter:
- Tekstkoding: Konvertering av inndata-tekstprompt til en numerisk representasjon
- 3D-representasjon: En metode for å representere 3D-geometri og utseende
- Generativ modell: Kjerne-AI-modellen for å generere 3D-aktiva
- Rendring: Konvertering av 3D-representasjon til 2D-bilder for visualisering
La oss utforske hver av disse i mer detalj.
Tekstkoding
Det første steget er å konvertere inndata-tekstprompt til en numerisk representasjon som AI-modellen kan arbeide med. Dette gjøres vanligvis ved hjelp av store språkmodeller som BERT eller GPT.
3D-representasjon
Det finnes flere vanlige måter å representere 3D-geometri i AI-modeller:
- Vokselruter: 3D-arrays av verdier som representerer okkupasjon eller egenskaper
- Punktskyer: Samlinger av 3D-punkter
- Nett: Vertices og ansikter som definerer en overflate
- Implisitte funksjoner: Kontinuerlige funksjoner som definerer en overflate (f.eks. signerte avstandsfunksjoner)
- Neurale strålingsfelt (NeRFs): Neurale nettverk som representerer tetthet og farge i 3D-rom
Hver har kompromisser når det gjelder oppløsning, minnebruk og lett generering. Mange nyere modeller bruker implisitte funksjoner eller NeRFs, da de tillater høykvalitetsresultater med rimelige beregningskrav.
For eksempel kan vi representere en enkel kule som en signert avstandsfunksjon:
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># Evaluér SDF ved et 3D-punkt
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f"Avstand til kuleoverflaten: {distance}")
Generativ modell
Kernen i et tekst-til-3D-system er den generative modellen som produserer 3D-representasjonen fra tekstkodingen. De fleste state-of-the-art-modellene bruker en variasjon av en diffusjonsmodell, lignende de som brukes i 2D-bildegenerering.
Diffusjonsmodeller fungerer ved å gradvis legge til støy til data, og deretter lære å reversere denne prosessen. For 3D-generering skjer denne prosessen i rommet til den valgte 3D-representasjonen.
En forenklet pseudokode for en diffusjonsmodell-trening kan se ut som følger:
def diffusion_training_step(model, x_0, text_embedding): # Sampler en tilfeldig tidssteg t = torch.randint(0, num_timesteps, (1,)) <p># Legg til støy til inndata noise = torch.randn_like(x_0) x_t = add_noise(x_0, noise, t)</p> <p># Forutsi støyen predicted_noise = model(x_t, t, text_embedding)</p> <p># Beregn tap loss = F.mse_loss(noise, predicted_noise)</p> return loss <p># Treningssyklus 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()
Under generering starter vi fra ren støy og itererer denoisning, betinget av tekstkodingen.
Rendring
For å visualisere resultater og beregne tap under trening, trenger vi å rendre vår 3D-representasjon til 2D-bilder. Dette gjøres vanligvis ved hjelp av differensierbare rendringsmetoder som tillater gradienter å flyte tilbake gjennom rendringsprosessen.
For nettbaserte representasjoner kan vi bruke en rasterbasert renderer:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr <p>def render_mesh(vertices, faces, image_size=256): # Opprett en renderer renderer = pr.MeshRenderer( rasterizer=pr.MeshRasterizer(), shader=pr.SoftPhongShader() )</p> <p># Sett opp kamera cameras = pr.FoVPerspectiveCameras()</p> <p># Rendre images = renderer(vertices, faces, cameras=cameras)</p> return images <p># Eksempelbruk vertices = torch.rand(1, 100, 3) # Tilfeldige vertices faces = torch.randint(0, 100, (1, 200, 3)) # Tilfeldige ansikter rendered_images = render_mesh(vertices, faces)
For implisitte representasjoner som NeRFs, bruker vi vanligvis ray marching-teknikker for å rendre visninger.
Sammenstilling av tekst-til-3D-pipeline
Nå som vi har dekket de nøkkelkomponentene, la oss gå gjennom hvordan de kommer sammen i en typisk tekst-til-3D-genereringspipeline:
- Tekstkoding: Inndata-tekstprompten kodet til en tett vektorrepresentasjon ved hjelp av en språkmodell.
- Initial generering: En diffusjonsmodell, betinget av tekstkodingen, genererer en initial 3D-representasjon (f.eks. en NeRF eller implisitt funksjon).
- Flersynskonsistens: Modellen rendrer flere visninger av det genererte 3D-aktiva og sikrer konsistens over synsvinkler.
- Forbedring: Ytterligere nettverk kan forbedre geometri, legge til teksturer eller forbedre detaljer.
- Endelig utgang: 3D-representasjonen konverteres til en ønsket format (f.eks. teksturert nett) for bruk i nedstrømsapplikasjoner.
Her er et forenklet eksempel på hvordan dette kan se ut i kode:
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): # Kod tekst text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p> <p># Generer initial 3D-representasjon initial_3d = self.diffusion_model(text_embedding)</p> <p># Rendre flere visninger views = self.renderer(initial_3d, num_views=4)</p> <p># Forbedre basert på flersynskonsistens refined_3d = self.refiner(initial_3d, views)</p> return refined_3d <p># Bruk model = TextTo3D() text_prompt = "En rød sportsbil" generated_3d = model(text_prompt)
Topp tekst-til-3D-aktiva-modeller tilgjengelige
3DGen – Meta
3DGen er designet for å løse problemet med å generere 3D-innhold – som figurer, rekvisitter og scener – fra tekstbeskrivelser.

Large Language and Text-to-3D Models – 3d-gen
3DGen støtter fysisk-basert rendring (PBR), som er essensiell for realistisk 3D-aktiva-relighting i virkelige applikasjoner. Den muliggjør også generativ reteksturering av tidligere genererte eller kunstnerisk skapte 3D-former ved hjelp av nye tekstbeskrivelser. Pipeline-integrasjonen består av to nøkkelkomponenter: Meta 3D AssetGen og Meta 3D TextureGen, som håndterer tekst-til-3D- og tekst-til-tekstur-generering, henholdsvis.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) er ansvarlig for den initielle genereringen av 3D-aktiva fra tekstprompt. Denne komponenten produserer en 3D-mesh med teksturer og PBR-materiale-kart i løpet av omtrent 30 sekunder.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun et al., 2024) forbedrer teksturene generert av AssetGen. Den kan også brukes til å generere nye teksturer for eksisterende 3D-mesh basert på ytterligere tekstbeskrivelser. Dette stadiet tar omtrent 20 sekunder.
Point-E (OpenAI)
Point-E, utviklet av OpenAI, er en annen bemerkelsesverdig tekst-til-3D-genereringsmodell. I motsetning til DreamFusion, som produserer NeRF-representasjoner, genererer Point-E 3D-punktskyer.
Nøkkeltilpasninger for Point-E:
a) To-trinns-pipeline: Point-E genererer først en syntetisk 2D-visning ved hjelp av en tekst-til-bilde-diffusjonsmodell, og deretter bruker denne bildet til å betinge en annen diffusjonsmodell som produserer 3D-punktskyen.
b) Effektivitet: Point-E er designet for å være komputasjonelt effektiv, og kan generere 3D-punktskyer på noen sekunder på en enkelt GPU.
c) Fargeinformasjon: Modellen kan generere fargede punktskyer, og bevare både geometrisk og utseendemessig informasjon.
Begrensninger:
- Lavere fidelitet sammenlignet med nettbaserte eller NeRF-baserte tilnærminger
- Punktskyer krever ytterligere prosessering for mange nedstrømsapplikasjoner
Shap-E (OpenAI):
Bygget på Point-E, introduserte OpenAI Shap-E, som genererer 3D-mesh i stedet for punktskyer. Dette løser noen av begrensningene til Point-E, samtidig som det opprettholder komputasjonell effektivitet.
Nøkkeltilpasninger for Shap-E:
a) Implisitt representasjon: Shap-E lærer å generere implisitte representasjoner (signerte avstandsfunksjoner) av 3D-objekter.
b) Nett-ekstraksjon: Modellen bruker en differensierbar implementasjon av marching cubes-algoritmen for å konvertere den implisitte representasjonen til en polygonal mesh.
c) Teksturgenerering: Shap-E kan også generere teksturer for 3D-mesh, og resultere i mer visuelt tiltalende utgang.
Fordeler:
- Rask genereringstid (sekunder til minutter)
- Direkte mesh-utgang egnet for rendring og nedstrømsapplikasjoner
- Evne til å generere både geometri og tekstur
GET3D (NVIDIA):
GET3D, utviklet av NVIDIA-forskere (NVDA ), er en annen kraftfull tekst-til-3D-genereringsmodell som fokuserer på å produsere høykvalitets teksturerte 3D-mesh.
Nøkkeltilpasninger for GET3D:
a) Eksplicit overflate-representasjon: I motsetning til DreamFusion eller Shap-E, genererer GET3D eksplisitte overflate-representasjoner (mesh) uten mellomliggende implisitte representasjoner.
b) Teksturgenerering: Modellen inkluderer en differensierbar rendringsmetode for å lære og generere høykvalitets teksturer for 3D-mesh.
c) GAN-basert arkitektur: GET3D bruker en generativ adversarial nettverks-tilnærmning, som tillater rask generering når modellen er trent.
Fordeler:
- Høykvalitets geometri og teksturer
- Rask inferenstid
- Direkte integrasjon med 3D-rendringsmotorer
Begrensninger:
- Krever 3D-treningdata, som kan være sjeldne for noen objekt-kategorier
Konklusjon
Tekst-til-3D AI-generering representerer en fundamentalt endring i hvordan vi skaper og samhandler med 3D-innhold. Ved å utnytte avanserte dyplearnings-teknikker, kan disse modellene produsere komplekse, høykvalitets 3D-aktiva fra enkle tekstbeskrivelser. Ettersom teknologien fortsetter å utvikle seg, kan vi forvente å se stadig mer avanserte og kapable tekst-til-3D-systemer som vil revolusjonere industrier fra spill og film til produkt-design og arkitektur.
Jeg har brukt de siste fem årene på å dykke ned i den fasiniserende verden av Maskinlæring og Dypt Læring. Min lidenskap og ekspertise har ledet meg til å bidra til over 50 ulike programvareprosjekter, med særlig fokus på AI/ML. Min pågående nysgjørhet har også trukket meg mot Naturlig Språkbehandling, et felt jeg er ivrig etter å utforske videre.
Oppdag mer


Python-pakkeinstallasjoner som et indeks for lokal AI-tilpasning


OpenAIs beste modell er nå lansert bak en regjeringsport


AI-våpenkappløpet intensifieres: AMDs strategiske partnerskap med OpenAI


OpenAI sikrer syv-års, 38 milliarder dollar AWS-skytjenesteavtale


Optimering av Neurale Radiance Fields (NeRF) for Sanntids 3D-Rendering i E-Handel Plattformer


Claudes Modellkontekstprotokoll (MCP): En utviklerguide
