AI 모델 및 플랫폼

텍스트에서 3D 생성 AI의 작동 방식: 메타 3D Gen, 오픈AI Shap-E 및 기타

mm
Unite.AI를 Google의 선호 소스에 추가
div]:bg-bg-300 [&_pre]:-mr-4 md:[&_pre]:-mr-9″>

텍스트 프롬프트에서 3D 디지털 자산을 생성하는 능력은 AI와 컴퓨터 그래픽스에서 가장 흥미로운 최근 개발 중 하나를 대표합니다. 3D 디지털 자산 시장은 2024년에 283억 달러에서 2029年に 518억 달러로 성장할 것으로 예상됨에 따라, 텍스트에서 3D를 생성하는 AI 모델은 게임, 영화, 전자 상거래 및 기타 산업에서 콘텐츠 생성을 혁신하는 데 주요 역할을 할 것입니다. 하지만 이러한 AI 시스템은 정확히 어떻게 작동할까요? 이 기사에서는 텍스트에서 3D 생성의 기술적 세부 사항에 대해 깊이 있는 탐구를 하겠습니다.

3D 생성의 도전

텍스트에서 3D 자산을 생성하는 것은 2D 이미지 생성보다 훨씬 더 복잡한 작업입니다. 2D 이미지는 본질적으로 픽셀의 격자이지만, 3D 자산은 기하학, 텍스처, 재료 및 종종 애니메이션을 3차원 공간에서 나타내야 합니다. 이러한 추가된 차원성과 복잡성은 생성 작업을 훨씬 더 어려운 작업으로 만듭니다.

텍스트에서 3D 생성의 일부 주요 도전은:

  • 3D 기하학 및 구조를 나타내는 것
  • 3D 표면에 걸쳐 일관된 텍스처 및 재료를 생성하는 것
  • 다중 관점에서 물리적으로 가능하고 일관된 결과를 보장하는 것
  • 세부 사항과 전역 구조를 동시에 캡처하는 것
  • 렌더링 또는 3D 프린팅에 쉽게 사용할 수 있는 자산을 생성하는 것

이러한 도전을 극복하기 위해, 텍스트에서 3D를 생성하는 모델은 여러 핵심 기술과 기법을 활용합니다.

텍스트에서 3D 시스템의 핵심 구성 요소

대부분의 최첨단 텍스트에서 3D 생성 시스템은 몇 가지 핵심 구성 요소를 공유합니다:

  1. 텍스트 인코딩: 입력 텍스트 프롬프트를 수치 표현으로 변환
  2. 3D 표현: 3D 기하학 및 외관을 나타내는 방법
  3. 생성 모델: 3D 자산을 생성하는 핵심 AI 모델
  4. 렌더링: 3D 표현을 2D 이미지로 변환하여 시각화

이러한 각 구성 요소를 자세히 살펴보겠습니다.

텍스트 인코딩

첫 번째 단계는 입력 텍스트 프롬프트를 AI 모델이 작업할 수 있는 수치 표현으로 변환하는 것입니다. 이는 일반적으로 BERT 또는 GPT와 같은 대규모 언어 모델을 사용하여 수행됩니다.

3D 표현

3D 기하학을 AI 모델에서 나타내는 일반적인 방법은:

  1. ボクセル 격자: 3D 배열의 값으로 점유 또는 특징을 나타냄
  2. 점군: 3D 점들의 집합
  3. 메시: 표면을 정의하는 꼭짓점과 면
  4. 암시적 함수: 표면을 정의하는 연속 함수(예: 서명된 거리 함수)
  5. 신경 복사 필드(NeRF): 3D 공간에서 밀도와 색상을 나타내는 신경망

각각의 방법은 해상도, 메모리 사용, 생성의 용이성과 관련된 트레이드오프를 가지고 있습니다. 최근의 많은 모델은 암시적 함수 또는 NeRF를 사용하여 높은 품질의 결과를 합리적인 계산 요구 사항으로 얻을 수 있습니다.

예를 들어, 우리는 간단한 구를 서명된 거리 함수로 나타낼 수 있습니다:

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>

생성 모델

텍스트에서 3D 시스템의 핵심은 3D 자산을 생성하는 생성 모델입니다. 대부분의 최첨단 모델은 2D 이미지 생성에서 사용되는 것과 유사한 확산 모델의 변형을 사용합니다.

확산 모델은 데이터에 노イズ를逐渐 추가한 다음, 이를 역으로 학습하는 방식으로 작동합니다. 3D 생성의 경우, 이 과정은 선택된 3D 표현의 공간에서 발생합니다.

확산 모델의 훈련 단계를 위한 간소화된 유사 코드는 다음과 같습니다:

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>

생성 중에, 우리는 순수한 노イズ에서 시작하여, 텍스트 임베딩에 조건을 두어 반복적으로 노イズ를 제거합니다.

렌더링

결과를 시각화하고 훈련 중에 손실을 계산하기 위해, 우리는 3D 표현을 2D 이미지로 렌더링해야 합니다. 이는 렌더링 과정을 통해 그래디언트가 흐를 수 있는 차별화 가능한 렌더링 기술을 사용하여 수행됩니다.

메시 기반 표현의 경우, 우리는 래스터화 기반 렌더러를 사용할 수 있습니다:

import torch</p>
<p>import torch.nn.functional as F</p>
<p>import pytorch3d.renderer as pr</p>

<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>

암시적 표현인 경우, 우리는 일반적으로 레이 마칭 기술을 사용하여 보기를 렌더링합니다.

모두 함께: 텍스트에서 3D 파이프라인

이제 핵심 구성 요소를 다루었으니, 일반적인 텍스트에서 3D 생성 파이프라인을 통해 어떻게 작동하는지 살펴보겠습니다:

  1. 텍스트 인코딩: 입력 프롬프트가 언어 모델을 사용하여 밀도 벡터 표현으로 인코딩됩니다.
  2. 초기 생성: 확산 모델은 텍스트 임베딩에 조건을 두어 초기 3D 표현(예: NeRF 또는 암시적 함수)을 생성합니다.
  3. 다중 관점 일관성: 모델은 생성된 3D 자산의 여러 관점을 렌더링하고, 여러 관점에서 일관성을 보장합니다.
  4. 세부 사항 개선: 추가 네트워크는 기하학, 텍스처 또는 세부 사항을 개선할 수 있습니다.
  5. 최종 출력: 3D 표현이 원하는 형식(예: 텍스처가 있는 메시)으로 변환되어, 하위 응용 프로그램에서 사용됩니다.

여기에는 간소화된 예가 있습니다:

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>

최상위 텍스트에서 3D 자산 모델

3DGen – 메타

3DGen은 텍스트 설명에서 3D 콘텐츠(예: 캐릭터, 프로프, 장면)를 생성하는 문제를 해결하도록 설계되었습니다.

대규모 언어 및 텍스트에서 3D 모델 – 3d-gen

3DGen은 물리 기반 렌더링(PBR)을 지원하여, 실제 응용 프로그램에서 3D 자산의 재조명에 필수적입니다. 또한, 이전에 생성된 또는 아티스트가 생성한 3D 모양에 대한 새로운 텍스트 입력을 사용하여 생성된 텍스처를 생성할 수 있습니다. 파이프라인에는 두 가지 핵심 구성 요소가 있습니다. 메타 3D AssetGen과 메타 3D TextureGen은 각각 텍스트에서 3D 및 텍스처 생성을 처리합니다.

메타 3D AssetGen

메타 3D AssetGen(Siddiqui et al., 2024)은 텍스트 프롬프트에서 3D 자산을 초기 생성하는 책임을 맡습니다. 이 구성 요소는 약 30초 만에 텍스처 및 PBR 재료 맵이 있는 3D 메시를 생성합니다.

메타 3D TextureGen

메타 3D TextureGen(Bensadoun et al., 2024)은 AssetGen에 의해 생성된 텍스처를 개선합니다. 또한, 기존 3D 메시에 대한 새로운 텍스처를 추가 텍스트 설명을 사용하여 생성할 수 있습니다. 이 단계는 약 20초가 소요됩니다.

Point-E (오픈AI)

Point-E, 오픈AI에서 개발한 또 다른 주목할 만한 텍스트에서 3D 생성 모델입니다. DreamFusion과 달리 NeRF 표현을 생성하는 대신, Point-E는 3D 점군을 생성합니다.

Point-E의 주요 특징:

a) 2단계 파이프라인: Point-E는 먼저 텍스트에서 이미지 확산 모델을 사용하여 합성 2D 보기를 생성한 다음, 이를 사용하여 3D 점군을 생성하는 두 번째 확산 모델을 조건으로 합니다.

b) 효율성: Point-E는 계산적으로 효율적이며, 단일 GPU에서 몇 초 안에 3D 점군을 생성할 수 있습니다.

c) 색상 정보: 모델은 색상 정보를 보존하여, 기하학적 및 외관 정보를 모두 생성할 수 있습니다.

제한:

  • 메시 기반 또는 NeRF 기반 접근 방식에 비해 낮은 품질
  • 다중 관점에서 일관성을 보장하기 어렵다

Shap-E (오픈AI):

Point-E를 기반으로, 오픈AI는 Shap-E를 소개했습니다. 이는 3D 메시를 생성하는 대신, 3D 점군을 생성합니다. 이는 Point-E의 일부 제한을 해결하면서, 계산 효율성을 유지합니다.

Shap-E의 주요 특징:

a) 암시적 표현: Shap-E는 3D 객체의 암시적 표현(서명된 거리 함수)을 학습합니다.

b) 메시 추출: 모델은 마칭 큐브 알고리즘의 차별화 가능한 구현을 사용하여 암시적 표현에서 폴리곤 메시를 추출합니다.

c) 텍스처 생성: Shap-E는 또한 3D 메시에 대한 텍스처를 생성할 수 있습니다.

장점:

  • 빠른 생성 시간(초에서 분까지)
  • 렌더링 및 하위 응용 프로그램에 적합한 직접 메시 출력
  • 기하학 및 텍스처를 모두 생성할 수 있음

GET3D (엔비디아):

GET3D, 엔비디아 연구원에 의해 개발된 또 다른 강력한 텍스트에서 3D 생성 모델입니다. 이는 높은 품질의 텍스처가 있는 3D 메시를 생성하는 데 중점을 둡니다.

GET3D의 주요 특징:

a) 명시적 표면 표현: GET3D는 암시적 표현 없이 명시적 표면 표현(메시)을 직접 생성합니다.

b) 텍스처 생성: 모델에는 차별화 가능한 렌더링 기술이 포함되어 있습니다. 이는 3D 메시에 대한 높은 품질의 텍스처를 학습하고 생성할 수 있습니다.

c) GAN 기반 아키텍처: GET3D는 생성적 적대 신경망(GAN) 접근 방식을 사용하여, 훈련 후 빠른 생성을 가능하게 합니다.

장점:

  • 높은 품질의 기하학 및 텍스처
  • 빠른 추론 시간
  • 3D 렌더링 엔진과 직접 통합

제한:

  • 일부 객체 카테고리에서 3D 훈련 데이터가 부족할 수 있음

결론

텍스트에서 3D 생성 AI는 3D 콘텐츠 생성 방식을 근본적으로 변화시키는 기술입니다. 고급 딥 러닝 기술을 활용하여, 이러한 모델은 단순한 텍스트 설명에서 복잡한 3D 자산을 생성할 수 있습니다. 이 기술이 계속 발전함에 따라, 게임, 영화, 제품 디자인 및 건축과 같은 산업에서 혁신적인 텍스트에서 3D 생성 시스템을 기대할 수 있습니다.

지난 5년 동안私は Machine Learning과 Deep Learning의 매혹적인 세계에 몰두해 왔습니다.私の熱情と専門知識は私を50以上의多様한 소프트웨어 엔지니어링 프로젝트에 기여하게 했으며, 특히 AI/ML에 중점을 두었습니다.私の継続的な 호기심은 또한私를自然어 처리로 끌어들였습니다.私は이 분야를さらに 탐구하기를熱望합니다.