Modele i platformy AI
Jak działa generacja 3D AI z tekstu: Meta 3D Gen, OpenAI Shap-E i więcej

Przez
Aayush Mittal Mittal
Możliwość generowania cyfrowych aktywów 3D z podpowiedziami tekstowymi reprezentuje jeden z najbardziej ekscytujących niedawnych rozwojów w dziedzinie sztucznej inteligencji i grafiki komputerowej. Ponieważ rynek cyfrowych aktywów 3D ma wzrosnąć z 28,3 miliarda dolarów w 2024 roku do 51,8 miliarda dolarów do 2029 roku, modele AI do generacji 3D z tekstu są gotowe do odegrania głównej roli w rewolucjonizowaniu tworzenia treści w branżach takich jak gry, filmy, e-commerce i wiele innych. Ale jak dokładnie działają te systemy AI? W tym artykule zagłębimy się w techniczne szczegóły za generacją 3D z tekstu.
Wyzwanie generacji 3D
Generowanie aktywów 3D z tekstu jest znacznie bardziej złożonym zadaniem niż generowanie obrazów 2D. Podczas gdy obrazy 2D są podstawowo siatkami pikseli, aktywa 3D wymagają reprezentowania geometrii, tekstur, materiałów i często animacji w trójwymiarowej przestrzeni. Ta dodatkowa wymiarowość i złożoność sprawia, że zadanie generacji jest znacznie bardziej wyzwaniem.
Niektóre kluczowe wyzwania w generacji 3D z tekstu obejmują:
- Reprezentowanie geometrii 3D i struktury
- Generowanie spójnych tekstur i materiałów na powierzchni 3D
- Gwarantowanie fizycznej wiarygodności i spójności z różnych punktów widzenia
- Uchwycenie drobnych szczegółów i globalnej struktury jednocześnie
- Generowanie aktywów, które mogą być łatwo renderowane lub drukowane w 3D
Aby pokonać te wyzwania, modele generacji 3D z tekstu wykorzystują kilka kluczowych technologii i technik.
Kluczowe składniki systemów generacji 3D z tekstu
Większość najnowocześniejszych systemów generacji 3D z tekstu dzieli kilka podstawowych składników:
- Kodowanie tekstu: Konwersja wejściowej podpowiedzi tekstowej na reprezentację numeryczną
- Reprezentacja 3D: Metoda reprezentowania geometrii i wyglądu 3D
- Model generatywny: Podstawowy model AI do generowania aktywów 3D
- Renderowanie: Konwersja reprezentacji 3D na obrazy 2D do wizualizacji
Zagłębimy się w każdy z nich bardziej szczegółowo.
Kodowanie tekstu
Pierwszym krokiem jest konwersja wejściowej podpowiedzi tekstowej na reprezentację numeryczną, z którą może pracować model AI. Zazwyczaj wykonuje się to przy użyciu dużych modeli językowych, takich jak BERT lub GPT.
Reprezentacja 3D
Istnieje kilka powszechnych sposobów reprezentowania geometrii 3D w modelach AI:
- Siątki wokselowe: 3-wymiarowe tablice wartości reprezentujących zajętość lub cechy
- Chmury punktów: Zbiory punktów 3D
- Siątki: Wierzchołki i twarze definiujące powierzchnię
- Funkcje implicite: Ciągłe funkcje definiujące powierzchnię (np. funkcje odległości podpisane)
- Neuralne pola promieniowania (NeRF): Sieci neuronowe reprezentujące gęstość i kolor w przestrzeni 3D
Każdy z nich ma kompromis pomiędzy rozdzielczością, użyciem pamięci i łatwością generacji. Wiele ostatnich modeli wykorzystuje funkcje implicite lub NeRF, ponieważ pozwalają one na uzyskanie wyników wysokiej jakości przy rozsądnym zużyciu obliczeniowym.
Na przykład możemy reprezentować prostą kulę jako funkcję odległości podpisanej:
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># Evaluate SDF at a 3D point
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f"Odległość do powierzchni kuli: {distance}")
Model generatywny
Rdzeniem systemu generacji 3D z tekstu jest model generatywny, który produkuje reprezentację 3D z osadzania tekstu. Większość modeli wykorzystuje pewną wariację modelu dyfuzyjnego, podobnego do tych używanych w generacji obrazów 2D.
Modele dyfuzyjne działają przez stopniowe dodawanie szumu do danych, a następnie uczą się odwracać ten proces. W przypadku generacji 3D proces ten zachodzi w przestrzeni wybranej reprezentacji 3D.
Uproszczony pseudokod dla kroku treningowego modelu dyfuzyjnego może wyglądać następująco:
def diffusion_training_step(model, x_0, text_embedding): # Sample a random timestep t = torch.randint(0, num_timesteps, (1,)) <p># Add noise to the input noise = torch.randn_like(x_0) x_t = add_noise(x_0, noise, t)</p> <p># Predict the noise predicted_noise = model(x_t, t, text_embedding)</p> <p># Compute loss loss = F.mse_loss(noise, predicted_noise)</p> return loss <p># 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()
Podczas generacji zaczynamy od czystego szumu i iteracyjnie go odhałamujemy, warunkując na osadzaniu tekstu.
Renderowanie
Aby wizualizować wyniki i obliczać straty podczas treningu, musimy renderować naszą reprezentację 3D do obrazów 2D. Zazwyczaj wykonuje się to przy użyciu różniczkowalnych technik renderowania, które pozwalają gradientom przepływać z powrotem przez proces renderowania.
Dla reprezentacji opartych na siatkach możemy użyć renderera opartego na rastrowaniu:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr <p>def render_mesh(vertices, faces, image_size=256): # Create a renderer renderer = pr.MeshRenderer( rasterizer=pr.MeshRasterizer(), shader=pr.SoftPhongShader() )</p> <p># Set up camera cameras = pr.FoVPerspectiveCameras()</p> <p># Render images = renderer(vertices, faces, cameras=cameras)</p> return images <p># 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)
Dla reprezentacji implicitej, takich jak NeRF, zwykle używamy technik marszowania promieni do renderowania widoków.
Łącząc wszystko: Potok generacji 3D z tekstu
Teraz, gdy omówiliśmy kluczowe składniki, przejdźmy przez to, jak łączą się one w typowym potoku generacji 3D z tekstu:
- Kodowanie tekstu: Wejściowa podpowiedź jest kodowana w gęstą reprezentację wektorową przy użyciu modelu językowego.
- Początkowa generacja: Model dyfuzyjny, warunkowany na osadzaniu tekstu, generuje początkową reprezentację 3D (np. NeRF lub funkcję implicite).
- Spójność wielowidokowa: Model renderuje wiele widoków wygenerowanego aktywu 3D i zapewnia spójność z różnych punktów widzenia.
- Doskonalenie: Dodatkowe sieci mogą doskonalić geometrię, dodać tekstury lub poprawić szczegóły.
- Wynik końcowy: Reprezentacja 3D jest konwertowana do pożądanego formatu (np. siatki z teksturami) do użycia w dalszych aplikacjach.
Oto uproszczony przykład, jak to może wyglądać w kodzie:
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): # Encode text text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p> <p># Generate initial 3D representation initial_3d = self.diffusion_model(text_embedding)</p> <p># Render multiple views views = self.renderer(initial_3d, num_views=4)</p> <p># Refine based on multi-view consistency refined_3d = self.refiner(initial_3d, views)</p> return refined_3d <p># Usage model = TextTo3D() text_prompt = "Czerwony samochód sportowy" generated_3d = model(text_prompt)
Najlepsze dostępne modele aktywów 3D z tekstu
3DGen – Meta
3DGen został zaprojektowany, aby rozwiązać problem generowania treści 3D, takich jak postacie, rekwizyty i sceny, z opisów tekstowych.

Duży język i modele tekstowo-3D – 3d-gen
3DGen obsługuje renderowanie oparte na fizyce (PBR), co jest niezbędne do realistycznego oświetlenia aktywów 3D w aplikacjach świata rzeczywistego. Umożliwia również generatywne ponowne tekstowanie wcześniej wygenerowanych lub stworzonych przez artystów kształtów 3D przy użyciu nowych wejść tekstowych. Potok łączy dwa podstawowe składniki: Meta 3D AssetGen i Meta 3D TextureGen, które zajmują się odpowiednio generacją 3D z tekstu i generacją tekstur.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) jest odpowiedzialny za początkową generację aktywów 3D z podpowiedziami tekstowymi. Ten składnik produkuje siatkę 3D z teksturami i mapami materiałów PBR w ciągu około 30 sekund.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun et al., 2024) doskonali tekstury wygenerowane przez AssetGen. Może również służyć do generowania nowych tekstur dla istniejących kształtów 3D na podstawie dodatkowych opisów tekstowych. Ten etap trwa około 20 sekund.
Point-E (OpenAI)
Point-E, opracowany przez OpenAI, to kolejny godny uwagi model generacji 3D z tekstu. W przeciwieństwie do DreamFusion, który produkuje reprezentacje NeRF, Point-E generuje chmury punktów 3D.
Kluczowe funkcje Point-E:
a) Dwuetapowy potok: Point-E najpierw generuje syntetyczny widok 2D przy użyciu modelu dyfuzyjnego tekst-obraz, a następnie używa tego obrazu do warunkowania drugiego modelu dyfuzyjnego, który produkuje chmurę punktów 3D.
b) Wydajność: Point-E został zaprojektowany, aby być obliczeniowo wydajnym, umożliwiając generowanie chmur punktów 3D w ciągu kilku sekund na jednej karcie graficznej.
c) Informacja koloru: Model może generować chmury punktów z kolorami, zachowując zarówno geometryczne, jak i informacje o wyglądzie.
Ograniczenia:
- Niższa wierność w porównaniu z podejściami opartymi na siatkach lub NeRF
- Chmury punktów wymagają dodatkowej obróbki do wielu aplikacji
Shap-E (OpenAI):
Rozwijając Point-E, OpenAI wprowadził Shap-E, który generuje siatki 3D zamiast chmur punktów. To rozwiązuje niektóre z ograniczeń Point-E, zachowując przy tym wydajność obliczeniową.
Kluczowe funkcje Shap-E:
a) Reprezentacja implicite: Shap-E uczy się generować reprezentacje implicite (funkcje odległości podpisane) obiektów 3D.
b) Ekstrakcja siatki: Model wykorzystuje różniczkowalną implementację algorytmu marching cubes do konwersji reprezentacji implicitej w siatkę wielokątów.
c) Generacja tekstur: Shap-E może również generować tekstury dla siatek 3D, co skutkuje bardziej atrakcyjnymi wizualnie wynikami.
Zalety:
- Szybkie czasy generacji (kilka sekund do kilku minut)
- Bezpośredni wynik siatki nadający się do renderowania i dalszych aplikacji
- Możliwość generowania zarówno geometrii, jak i tekstur
GET3D (NVIDIA):
GET3D, opracowany przez badaczy NVIDIA (NVDA ), to kolejny potężny model generacji 3D z tekstu, który koncentruje się na wytwarzaniu wysokiej jakości siatek 3D z teksturami.
Kluczowe funkcje GET3D:
a) Wyraźna reprezentacja powierzchni: W przeciwieństwie do DreamFusion lub Shap-E, GET3D generuje bezpośrednio wyraźne reprezentacje powierzchni (siatki) bez pośrednich reprezentacji implicitej.
b) Generacja tekstur: Model obejmuje różniczkowalną technikę renderowania do nauki i generowania wysokiej jakości tekstur dla siatek 3D.
c) Architektura oparta na GAN: GET3D wykorzystuje podejście sieci generatywnej przeciwnika (GAN), co pozwala na szybką generację po wstępnym treningu modelu.
Zalety:
- Wysoka jakość geometrii i tekstur
- Szybkie czasy inferencji
- Bezpośrednia integracja z silnikami renderowania 3D
Ograniczenia:
- Wymaga danych treningowych 3D, które mogą być rzadkie dla niektórych kategorii obiektów
Podsumowanie
Generacja 3D z tekstu AI reprezentuje fundamentalną zmianę w tworzeniu i interakcji z treściami 3D. Wykorzystując zaawansowane techniki głębokiego uczenia, te modele mogą produkować złożone, wysokiej jakości aktywa 3D z prostych opisów tekstowych. W miarę ewolucji tej technologii możemy oczekiwać coraz bardziej zaawansowanych i zdolnych systemów generacji 3D z tekstu, które rewolucjonizują branże od gier i filmów po projektowanie produktów i architekturę.
Przez ostatnie pięć lat zanurzałem się w fascynującym świecie Machine Learning i Deep Learning. Moja pasja i ekspertyza doprowadziły mnie do udziału w ponad 50 różnorodnych projektach inżynierii oprogramowania, ze szczególnym uwzględnieniem AI/ML. Moja nieustanna ciekawość również skierowała mnie w stronę Natural Language Processing, dziedziny, którą chcę dalej eksplorować.
Odkryj więcej


Instalacje pakietów Python jako wskaźnik lokalnej adopcji sztucznej inteligencji


Najlepszy model OpenAI właśnie został wydany za bramą rządową


Wyścig zbrojeń w AI nasila się: Strategiczne partnerstwo AMD z OpenAI


OpenAI Uzyskuje Siedmioletnią, 38 Miliardów Dolarów Umowę Partnerską z AWS


Optymalizacja pól promieniowania neuronowego (NeRF) dla renderowania 3D w czasie rzeczywistym na platformach e-commerce


Protokół Kontekstu Modelu Claude: Przewodnik dla programistów
