Modelos e plataformas de IA
Como Funciona a Geração de 3D por Texto: Meta 3D Gen, OpenAI Shap-E e mais

Por
Aayush Mittal Mittal
A capacidade de gerar ativos digitais 3D a partir de prompts de texto representa um dos desenvolvimentos mais emocionais recentes em IA e gráficos computacionais. Como o mercado de ativos digitais 3D está projetado para crescer de US$ 28,3 bilhões em 2024 para US$ 51,8 bilhões em 2029, os modelos de IA de texto para 3D estão preparados para desempenhar um papel fundamental na revolução da criação de conteúdo em indústrias como jogos, filmes, comércio eletrônico e mais. Mas como exatamente esses sistemas de IA funcionam? Neste artigo, vamos mergulhar nos detalhes técnicos por trás da geração de 3D por texto.
O Desafio da Geração de 3D
Gerar ativos 3D a partir de texto é uma tarefa significativamente mais complexa do que a geração de imagens 2D. Enquanto as imagens 2D são essencialmente grades de pixels, os ativos 3D exigem a representação de geometria, texturas, materiais e, frequentemente, animações em espaço tridimensional. Essa dimensionalidade e complexidade adicionais tornam a tarefa de geração muito mais desafiadora.
Alguns dos principais desafios na geração de 3D por texto incluem:
- Representar a geometria e a estrutura 3D
- Gerar texturas e materiais consistentes em toda a superfície 3D
- Garantir a plausibilidade física e a coerência de múltiplos pontos de vista
- Capturar detalhes finos e estrutura global simultaneamente
- Gerar ativos que possam ser facilmente renderizados ou impressos em 3D
Para lidar com esses desafios, os modelos de texto para 3D aproveitam várias tecnologias e técnicas-chave.
Componentes-Chave dos Sistemas de Texto para 3D
A maioria dos sistemas de geração de 3D por texto de ponta compartilha alguns componentes-chave:
- Codificação de texto: Converter o prompt de texto de entrada em uma representação numérica
- Representação 3D: Um método para representar a geometria e a aparência 3D
- Modelo gerativo: O modelo de IA central para gerar o ativo 3D
- Renderização: Converter a representação 3D em imagens 2D para visualização
Vamos explorar cada um deles em mais detalhes.
Codificação de Texto
O primeiro passo é converter o prompt de texto de entrada em uma representação numérica que o modelo de IA possa trabalhar. Isso é normalmente feito usando grandes modelos de linguagem, como BERT ou GPT.
Representação 3D
Existem várias maneiras comuns de representar a geometria 3D nos modelos de IA:
- Grade de voxels: Matrizes 3D de valores que representam ocupação ou recursos
- Nuvem de pontos: Conjuntos de pontos 3D
- Malha: Vértices e faces que definem uma superfície
- Funções implícitas: Funções contínuas que definem uma superfície (por exemplo, funções de distância assinada)
- Campos de radiação neural (NeRFs): Redes neurais que representam densidade e cor no espaço 3D
Cada uma tem trade-offs em termos de resolução, uso de memória e facilidade de geração. Muitos modelos recentes usam funções implícitas ou NeRFs, pois permitem resultados de alta qualidade com requisitos computacionais razoáveis.
Por exemplo, podemos representar uma esfera simples como uma função de distância assinada:
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># Avaliar SDF em um ponto 3D
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f"Distância para a superfície da esfera: {distance}")
Modelo Gerativo
O núcleo de um sistema de texto para 3D é o modelo gerativo que produz a representação 3D a partir do embed de texto. A maioria dos modelos de ponta usa alguma variação de um modelo de difusão, semelhante àqueles usados na geração de imagens 2D.
Os modelos de difusão funcionam adicionando gradualmente ruído aos dados e, em seguida, aprendendo a reverter esse processo. Para a geração de 3D, esse processo ocorre no espaço da representação 3D escolhida.
Um pseudocódigo simplificado para um passo de treinamento de um modelo de difusão pode parecer com:
def diffusion_training_step(model, x_0, text_embedding): # Amostrar um passo de tempo aleatório t = torch.randint(0, num_timesteps, (1,)) <p># Adicionar ruído à entrada noise = torch.randn_like(x_0) x_t = add_noise(x_0, noise, t)</p> <p># Prever o ruído predicted_noise = model(x_t, t, text_embedding)</p> <p># Computar perda loss = F.mse_loss(noise, predicted_noise)</p> return loss <p># Loop de treinamento 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()
Durante a geração, começamos com ruído puro e iterativamente desfazemos, condicionados ao embed de texto.
Renderização
Para visualizar os resultados e computar perdas durante o treinamento, precisamos renderizar nossa representação 3D em imagens 2D. Isso é normalmente feito usando técnicas de renderização diferenciáveis que permitem que os gradientes fluam de volta pelo processo de renderização.
Para representações baseadas em malha, podemos usar um renderizador baseado em rasterização:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr <p>def render_mesh(vertices, faces, image_size=256): # Criar um renderizador renderer = pr.MeshRenderer( rasterizer=pr.MeshRasterizer(), shader=pr.SoftPhongShader() )</p> <p># Configurar câmera cameras = pr.FoVPerspectiveCameras()</p> <p># Renderizar images = renderer(vertices, faces, cameras=cameras)</p> return images <p># Exemplo de uso vertices = torch.rand(1, 100, 3) # Vértices aleatórios faces = torch.randint(0, 100, (1, 200, 3)) # Faces aleatórias rendered_images = render_mesh(vertices, faces)
Para representações implícitas, como NeRFs, normalmente usamos técnicas de marcha de raios para renderizar vistas.
Colocando Tudo Juntos: O Pipeline de Texto para 3D
Agora que cobrimos os componentes-chave, vamos percorrer como eles se unem em um pipeline típico de geração de 3D por texto:
- Codificação de texto: O prompt de entrada é codificado em uma representação vetorial densa usando um modelo de linguagem.
- Geração inicial: Um modelo de difusão, condicionado ao embed de texto, gera uma representação 3D inicial (por exemplo, um NeRF ou uma função implícita).
- Consistência de múltiplas vistas: O modelo renderiza múltiplas vistas do ativo 3D gerado e garante a consistência entre os pontos de vista.
- Refinamento: Redes adicionais podem refinar a geometria, adicionar texturas ou melhorar detalhes.
- Saída final: A representação 3D é convertida em um formato desejado (por exemplo, malha texturizada) para uso em aplicações downstream.
Aqui está um exemplo simplificado de como isso pode parecer em código:
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): # Codificar texto text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p> <p># Gerar representação 3D inicial initial_3d = self.diffusion_model(text_embedding)</p> <p># Renderizar múltiplas vistas views = self.renderer(initial_3d, num_views=4)</p> <p># Refinar com base na consistência de múltiplas vistas refined_3d = self.refiner(initial_3d, views)</p> return refined_3d <p># Uso model = TextTo3D() text_prompt = "Um carro esportivo vermelho" generated_3d = model(text_prompt)
Principais Modelos de Ativos 3D Disponíveis
3DGen – Meta
3DGen é projetado para lidar com o problema de gerar conteúdo 3D – como personagens, objetos e cenas – a partir de descrições textuais.

Large Language and Text-to-3D Models – 3d-gen
3DGen suporta renderização baseada em física (PBR), essencial para a realista iluminação de ativos 3D em aplicações do mundo real. Ele também permite a geração de texturas para formas 3D previamente geradas ou criadas por artistas usando novas entradas textuais. O pipeline integra dois componentes principais: Meta 3D AssetGen e Meta 3D TextureGen, que lidam com a geração de texto para 3D e texto para textura, respectivamente.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) é responsável pela geração inicial de ativos 3D a partir de prompts de texto. Esse componente produz uma malha 3D com texturas e mapas de material PBR em cerca de 30 segundos.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun et al., 2024) refina as texturas geradas pelo AssetGen. Ele também pode ser usado para gerar novas texturas para malhas 3D existentes com base em descrições textuais adicionais. Esta etapa leva aproximadamente 20 segundos.
Point-E (OpenAI)
Point-E, desenvolvido pela OpenAI, é outro modelo notável de geração de 3D por texto. Ao contrário do DreamFusion, que produz representações NeRF, o Point-E gera nuvens de pontos 3D.
Recursos principais do Point-E:
a) Pipeline de dois estágios: O Point-E primeiro gera uma vista sintética 2D usando um modelo de difusão de texto para imagem, então usa essa imagem para condicionar um segundo modelo de difusão que produz a nuvem de pontos 3D.
b) Eficiência: O Point-E é projetado para ser computacionalmente eficiente, capaz de gerar nuvens de pontos 3D em segundos em uma única GPU.
c) Informação de cor: O modelo pode gerar nuvens de pontos coloridas, preservando tanto a geometria quanto a informação de aparência.
Limitações:
- Fidelidade mais baixa em comparação com abordagens baseadas em malha ou NeRF
- Nuvens de pontos requerem processamento adicional para muitas aplicações downstream
Shap-E (OpenAI):
Construído sobre o Point-E, a OpenAI introduziu o Shap-E, que gera malhas 3D em vez de nuvens de pontos. Isso aborda algumas das limitações do Point-E, mantendo a eficiência computacional.
Recursos principais do Shap-E:
a) Representação implícita: O Shap-E aprende a gerar representações implícitas (funções de distância assinada) de objetos 3D.
b) Extração de malha: O modelo usa uma implementação diferenciável do algoritmo de cubos marchantes para converter a representação implícita em uma malha poligonal.
c) Geração de textura: O Shap-E também pode gerar texturas para as malhas 3D, resultando em saídas visualmente mais atraentes.
Vantagens:
- Tempos de geração rápidos (segundos a minutos)
- Saída de malha direta adequada para renderização e aplicações downstream
- Capacidade de gerar geometria e textura
GET3D (NVIDIA):
O GET3D, desenvolvido por pesquisadores da NVIDIA (NVDA ), é outro poderoso modelo de geração de 3D por texto que se concentra em produzir malhas 3D texturizadas de alta qualidade.
Recursos principais do GET3D:
a) Representação de superfície explícita: Ao contrário do DreamFusion ou do Shap-E, o GET3D gera representações de superfície explícitas (malhas) sem representações implícitas intermediárias.
b) Geração de textura: O modelo inclui uma técnica de renderização diferenciável para aprender e gerar texturas de alta qualidade para as malhas 3D.
c) Arquitetura baseada em GAN: O GET3D usa uma abordagem de rede adversária generativa (GAN), o que permite tempos de geração rápidos uma vez que o modelo é treinado.
Vantagens:
- Geometria e texturas de alta qualidade
- Tempos de inferência rápidos
- Integração direta com motores de renderização 3D
Limitações:
- Requer dados de treinamento 3D, que podem ser escassos para algumas categorias de objetos
Conclusão
A geração de 3D por texto representa uma mudança fundamental na forma como criamos e interagimos com conteúdo 3D. Ao aproveitar técnicas de aprendizado de máquina avançadas, esses modelos podem produzir ativos 3D complexos e de alta qualidade a partir de descrições textuais simples. À medida que a tecnologia continua a evoluir, podemos esperar ver sistemas de texto para 3D cada vez mais sofisticados e capazes que revolucionarão indústrias, desde jogos e filmes até design de produtos e arquitetura.
Eu passei os últimos cinco anos me imergindo no fascinante mundo de Aprendizado de Máquina e Aprendizado Profundo. Minha paixão e expertise me levaram a contribuir para mais de 50 projetos de engenharia de software diversificados, com um foco particular em IA/ML. Minha curiosidade contínua também me levou em direção ao Processamento de Linguagem Natural, um campo que estou ansioso para explorar mais.
Descubra mais


Instalações de Pacotes Python como um Índice de Adoção Local de IA


O melhor modelo da OpenAI acabou de ser lançado atrás de um portão governamental


A Corrida de Armamentos de IA Intensifica-Se: Parceria Estratégica da AMD com a OpenAI


OpenAI Garante Parceria de Sete Anos com a AWS no Valor de US$ 38 Bilhões


Otimizando Campos de Radiância Neural (NeRF) para Renderização 3D em Tempo Real em Plataformas de Comércio Eletrônico


O Protocolo de Contexto de Modelo (MCP) do Claude: Um Guia para Desenvolvedores
