Artificiell intelligens
Hur text-to-3D AI-generering fungerar: Meta 3D Gen, OpenAI Shap-E och mer


Möjligheten att generera digitala 3D-tillgÄngar frÄn textmeddelanden representerar en av de mest spÀnnande senaste utvecklingarna inom AI och datorgrafik. Eftersom marknaden för digitala 3D-tillgÄngar förvÀntas vÀxa frÄn 28.3 miljarder dollar 2024 till 51.8 miljarder dollar Är 2029, text-to-3D AI-modeller Àr redo att spela en viktig roll för att revolutionera innehÄllsskapandet i branscher som spel, film, e-handel och mer. Men exakt hur fungerar dessa AI-system? I den hÀr artikeln tar vi en djupdykning i de tekniska detaljerna bakom text-till-3D-generering.
Utmaningen med 3D-generering
Att generera 3D-tillgÄngar frÄn text Àr en betydligt mer komplex uppgift Àn 2D-bildgenerering. Medan 2D-bilder i huvudsak Àr nÀt av pixlar, krÀver 3D-tillgÄngar att representera geometri, texturer, material och ofta animationer i tredimensionellt utrymme. Denna extra dimensionalitet och komplexitet gör generationsuppgiften mycket mer utmanande.
NÄgra viktiga utmaningar i text-till-3D-generering inkluderar:
- Representerar 3D-geometri och struktur
- Genererar konsekventa texturer och material över 3D-ytan
- SÀkerstÀlla fysisk rimlighet och koherens ur flera synvinklar
- FÄnga fina detaljer och global struktur samtidigt
- Generera tillgÄngar som enkelt kan renderas eller 3D-utskrivas
För att hantera dessa utmaningar anvÀnder text-till-3D-modeller flera nyckelteknologier och tekniker.
Nyckelkomponenter i text-till-3D-system
De flesta toppmoderna text-till-3D-genereringssystem delar nÄgra kÀrnkomponenter:
- Textkodning: Konverterar inmatningstextprompten till en numerisk representation
- 3D-representation: En metod för att representera 3D-geometri och utseende
- Generativ modell: KÀrnmodellen för AI för att generera 3D-tillgÄngen
- rendering: Konverterar 3D-representationen till 2D-bilder för visualisering
LÄt oss utforska var och en av dessa mer i detalj.
Textkodning
Det första steget Àr att konvertera inmatningstextprompten till en numerisk representation som AI-modellen kan arbeta med. Detta görs vanligtvis med hjÀlp av stora sprÄkmodeller som BERT eller GPT.
3D-representation
Det finns flera vanliga sÀtt att representera 3D-geometri i AI-modeller:
- Voxel rutnÀt: 3D-matriser av vÀrden som representerar belÀggning eller funktioner
- Peka moln: UppsÀttningar av 3D-punkter
- maskor: Vertices och ytor som definierar en yta
- Implicita funktioner: Kontinuerliga funktioner som definierar en yta (t.ex. teckenavstÄndsfunktioner)
- Neurala strÄlningsfÀlt (NeRF): Neurala nÀtverk som representerar densitet och fÀrg i 3D-rymden
Var och en har kompromisser nÀr det gÀller upplösning, minnesanvÀndning och enkel generering. MÄnga nyare modeller anvÀnder implicita funktioner eller NeRF eftersom de möjliggör resultat av hög kvalitet med rimliga berÀkningskrav.
Till exempel kan vi representera en enkel sfÀr som en teckenavstÄndsfunktion:
import numpy as np def sphere_sdf(x, y, z, radius=1.0): return np.sqrt(x**2 + y**2 + z**2) - radius # Evaluate SDF at a 3D point point = [0.5, 0.5, 0.5] distance = sphere_sdf(*point) print(f"Distance to sphere surface: {distance}")
Generativ modell
KÀrnan i ett text-till-3D-system Àr den generativa modellen som producerar 3D-representationen frÄn textinbÀddning. De flesta toppmoderna modeller anvÀnder nÄgon variant av en diffusionsmodell, liknande de som anvÀnds i 2D-bildgenerering.
Diffusionsmodeller fungerar genom att gradvis lÀgga till brus till data och sedan lÀra sig att vÀnda denna process. För 3D-generering sker denna process i utrymmet för den valda 3D-representationen.
En förenklad pseudokod för ett utbildningssteg för diffusionsmodell kan se ut sÄ hÀr:
def diffusion_training_step(model, x_0, text_embedding): # Sample a random timestep t = torch.randint(0, num_timesteps, (1,)) # Add noise to the input noise = torch.randn_like(x_0) x_t = add_noise(x_0, noise, t) # Predict the noise predicted_noise = model(x_t, t, text_embedding) # Compute loss loss = F.mse_loss(noise, predicted_noise) return loss # Training loop 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 genereringen utgÄr vi frÄn rent brus och iterativt denoise, villkorat av textinbÀddningen.
rendering
För att visualisera resultat och berÀkna förluster under trÀning mÄste vi Äterge vÄr 3D-representation till 2D-bilder. Detta görs vanligtvis med hjÀlp av differentierbara renderingstekniker som tillÄter gradienter att flöda tillbaka genom renderingsprocessen.
För mesh-baserade representationer kan vi anvÀnda en rasteriseringsbaserad renderare:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr def render_mesh(vertices, faces, image_size=256): # Create a renderer renderer = pr.MeshRenderer( rasterizer=pr.MeshRasterizer(), shader=pr.SoftPhongShader() ) # Set up camera cameras = pr.FoVPerspectiveCameras() # Render images = renderer(vertices, faces, cameras=cameras) return images # Example usage vertices = torch.rand(1, 100, 3) # Random vertices faces = torch.randint(0, 100, (1, 200, 3)) # Random faces rendered_images = render_mesh(vertices, faces)
För implicita representationer som NeRFs anvÀnder vi vanligtvis strÄlmarschtekniker för att Äterge vyer.
Putting it All Together: Text-to-3D Pipeline
Nu nÀr vi har tÀckt nyckelkomponenterna, lÄt oss gÄ igenom hur de sammanfaller i en typisk text-till-3D-genereringspipeline:
- Textkodning: Inmatningsprompten kodas till en tÀt vektorrepresentation med hjÀlp av en sprÄkmodell.
- Initial generation: En diffusionsmodell, beroende pÄ textinbÀddningen, genererar en initial 3D-representation (t.ex. en NeRF eller implicit funktion).
- Konsistens i flera vyer: Modellen Äterger flera vyer av den genererade 3D-tillgÄngen och sÀkerstÀller konsekvens över synpunkter.
- Förfining: Ytterligare nÀtverk kan förfina geometrin, lÀgga till texturer eller förbÀttra detaljer.
- Slutlig utgÄng: 3D-representationen konverteras till ett önskat format (t.ex. texturerat nÀt) för anvÀndning i nedströmsapplikationer.
HÀr Àr ett förenklat exempel pÄ hur detta kan se ut i kod:
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() def forward(self, text_prompt): # Encode text text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1) # Generate initial 3D representation initial_3d = self.diffusion_model(text_embedding) # Render multiple views views = self.renderer(initial_3d, num_views=4) # Refine based on multi-view consistency refined_3d = self.refiner(initial_3d, views) return refined_3d # Usage model = TextTo3D() text_prompt = "A red sports car" generated_3d = model(text_prompt)
Topptext till 3d-tillgÄngsmodeller tillgÀngliga
3DGen â Meta
3DGen Ă€r utformad för att ta itu med problemet med att generera 3D-innehĂ„ll â som karaktĂ€rer, rekvisita och scener â frĂ„n textbeskrivningar.

Stora sprĂ„k- och text-till-3D-modeller â 3d-gen
3DGen stöder fysiskt baserad rendering (PBR), vÀsentligt för realistisk 3D-tillgÄngsbelysning i verkliga applikationer. Det möjliggör ocksÄ generativ omstrukturering av tidigare genererade eller konstnÀrskapade 3D-former med hjÀlp av nya textinmatningar. Pipelinen integrerar tvÄ kÀrnkomponenter: Meta 3D AssetGen och Meta 3D TextureGen, som hanterar text-till-3D respektive text-till-texturgenerering.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) ansvarar för den första genereringen av 3D-tillgÄngar frÄn textmeddelanden. Denna komponent producerar ett 3D-nÀt med texturer och PBR-materialkartor pÄ cirka 30 sekunder.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun et al., 2024) förfinar texturerna som genereras av AssetGen. Den kan ocksÄ anvÀndas för att generera nya texturer för befintliga 3D-nÀt baserat pÄ ytterligare textbeskrivningar. Detta steg tar cirka 20 sekunder.
Point-E (OpenAI)
Point-E, utvecklad av OpenAI, Àr en annan anmÀrkningsvÀrd text-till-3D-genereringsmodell. Till skillnad frÄn DreamFusion, som producerar NeRF-representationer, genererar Point-E 3D-punktmoln.
Viktiga egenskaper hos Point-E:
a) TvÄstegs pipeline: Point-E genererar först en syntetisk 2D-vy med hjÀlp av en text-till-bild-diffusionsmodell, och anvÀnder sedan denna bild för att konditionera en andra diffusionsmodell som producerar 3D-punktmolnet.
b) Effektivitet: Point-E Àr designad för att vara berÀkningseffektiv och kan generera 3D-punktmoln pÄ nÄgra sekunder pÄ en enda GPU.
c) FÀrginformation: Modellen kan generera fÀrgade punktmoln och bevara bÄde geometrisk information och utseendeinformation.
BegrÀnsningar:
- LÀgre trohet jÀmfört med mesh-baserade eller NeRF-baserade metoder
- Punktmoln krÀver ytterligare bearbetning för mÄnga nedströmsapplikationer
Shap-E (OpenAI):
Bygger pÄ Point-E introducerade OpenAI Shap-E, som genererar 3D-nÀt istÀllet för punktmoln. Detta ÄtgÀrdar nÄgra av begrÀnsningarna med Point-E samtidigt som berÀkningseffektiviteten bibehÄlls.
Nyckelfunktioner hos Shap-E:
a) Implicit representation: Shap-E lÀr sig att generera implicita representationer (signerade avstÄndsfunktioner) av 3D-objekt.
b) NÀtextraktion: Modellen anvÀnder en differentierbar implementering av algoritmen för marschkuber för att konvertera den implicita representationen till ett polygonalt nÀt.
c) Texturgenerering: Shap-E kan ocksÄ generera texturer för 3D-maskorna, vilket resulterar i mer visuellt tilltalande utdata.
fördelar:
- Snabba generationstider (sekunder till minuter)
- Direkt mesh-utgÄng lÀmplig för rendering och nedströmsapplikationer
- FörmÄga att generera bÄde geometri och textur
GET3D (NVIDIA):
GET3D, utvecklad av NVIDIA-forskare, Àr en annan kraftfull text-till-3D-generationsmodell som fokuserar pÄ att producera högkvalitativa texturerade 3D-nÀt.
Nyckelfunktioner i GET3D:
a) Explicit ytrepresentation: Till skillnad frÄn DreamFusion eller Shap-E genererar GET3D direkt explicita ytrepresentationer (maskor) utan mellanliggande implicita representationer.
b) Texturgenerering: Modellen inkluderar en differentierbar renderingsteknik för att lÀra sig och generera högkvalitativa texturer för 3D-maskorna.
c) GAN-baserad arkitektur: GET3D anvÀnder ett generativt motstridigt nÀtverk (GAN), vilket möjliggör snabb generering nÀr modellen vÀl har trÀnats.
fördelar:
- Högkvalitativ geometri och texturer
- Snabba slutledningstider
- Direkt integration med 3D-renderingsmotorer
BegrÀnsningar:
- KrÀver 3D-trÀningsdata, som kan vara knappa för vissa objektkategorier
Slutsats
Text-to-3D AI-generering representerar en grundlÀggande förÀndring i hur vi skapar och interagerar med 3D-innehÄll. Genom att utnyttja avancerade djupinlÀrningstekniker kan dessa modeller producera komplexa, högkvalitativa 3D-tillgÄngar frÄn enkla textbeskrivningar. NÀr tekniken fortsÀtter att utvecklas kan vi förvÀnta oss att se allt mer sofistikerade och kapabla text-till-3D-system som kommer att revolutionera industrier frÄn spel och film till produktdesign och arkitektur.
Jag har Àgnat de senaste fem Ären Ät att fördjupa mig i den fascinerande vÀrlden av Machine Learning och Deep Learning. Min passion och expertis har lett mig till att bidra till över 50 olika programvaruutvecklingsprojekt, med sÀrskilt fokus pÄ AI/ML. Min pÄgÄende nyfikenhet har ocksÄ dragit mig mot Natural Language Processing, ett omrÄde som jag Àr ivrig att utforska vidare.
Du mÄ gilla
-
Optimera Neural Radiance Fields (NeRF) för 3D-rendering i realtid i e-handelsplattformar
-
Claude's Model Context Protocol (MCP): En utvecklarguide
-
Designmönster i Python för AI- och LLM-ingenjörer: En praktisk guide
-
Microsoft AutoGen: Multi-Agent AI-arbetsflöden med avancerad automation
-
Asynkrona LLM API-anrop i Python: A Comprehensive Guide
-
AI Language Showdown: JÀmför prestanda för C++, Python, Java och Rust