Phase 08 - Lesson 12

Geração 3D

O 3D é a modalidade onde a alavancagem de 2D para 3D é mais forte. O avanço de 2023 foi o 3D Gaussian Splatting. O impulso generativo de 2024-2026 adiciona camadas de difusão multi-view + reconstrução 3D no topo para produzir objetos e cenas a partir de um único prompt ou foto.

Tipo: Aprender Linguagens: Python Pré-requisitos: Fase 4 (Visão), Fase 8 · 07 (Difusão Latente) Tempo: ~45 minutos

O Problema

O conteúdo 3D é doloroso:

  • Representação. Malhas (meshes), nuvens de pontos, grades de voxels, campos de distância assinados (SDFs), campos de radiância neural (NeRFs), Gaussianas 3D. Cada um tem suas desvantagens.
  • Escassez de dados. O ImageNet possui 14 milhões de imagens. O maior conjunto de dados 3D limpo (Objaverse-XL, 2023) tem cerca de 10 milhões de objetos, a maioria de baixa qualidade.
  • Memória. Uma grade de voxels de 512³ equivale a 128 milhões de voxels; um NeRF de cena útil precisa de 1 milhão de amostras por raio. A geração é mais difícil do que a reconstrução.
  • Supervisão. Para uma imagem 2D, você tem os pixels. Para 3D, você geralmente tem um punhado de vistas 2D e precisa elevá-las para 3D.

A stack de 2026 separa os dois problemas. Primeiro, gere imagens multi-view 2D com um modelo de difusão. Segundo, ajuste uma representação 3D (geralmente Gaussian splatting) a essas imagens.

O Conceito

3D generation: multi-view diffusion + 3D reconstruction

Representação: 3D Gaussian Splatting (Kerbl et al., 2023)

Represente uma cena como uma nuvem de cerca de 1 milhão de Gaussianas 3D. Cada uma possui 59 parâmetros: posição (3), covariância (6, ou quatérnio 4 + escala 3), opacidade (1), cor em harmônicos esféricos (48 no grau 3, 3 no grau 0).

Renderização = projeção + alpha-compositing. Rápida (~100 fps em 1080p em uma 4090). Diferenciável. Ajustada por gradiente descendente contra fotos de referência (ground-truth). Uma cena é ajustada em 5 a 30 minutos em uma GPU de consumidor.

Duas inovações de 2023-2024 no topo:

  • Gaussian splats generativos. Modelos como LGM, LRM e InstantMesh preveem uma nuvem Gaussiana diretamente a partir de uma ou poucas imagens.
  • 4D Gaussian Splatting. Gaussianas com offsets por frame para cenas dinâmicas.

Difusão multi-view

Ajuste fino (fine-tune) de um modelo de difusão de imagem pré-treinado para gerar múltiplas vistas consistentes do mesmo objeto a partir de um prompt de texto ou de uma única imagem. Zero123 (Liu et al., 2023), MVDream (Shi et al., 2023), SV3D (Stability, 2024), CAT3D (Google, 2024). Geralmente geram de 4 a 16 vistas ao redor do objeto, elevadas para 3D via Gaussian splatting ou NeRF.

Pipelines de Texto para 3D

Modelo Entrada Saída Tempo
DreamFusion (2022) texto NeRF via SDS ~1 hora por ativo
Magic3D texto malha + textura ~40 min
Shap-E (OpenAI, 2023) texto 3D implícito ~1 min
SJC / ProlificDreamer texto NeRF / malha ~30 min
LRM (Meta, 2023) imagem triplano ~5 s
InstantMesh (2024) imagem malha ~10 s
SV3D (Stability, 2024) imagem novas vistas ~2 min
CAT3D (Google, 2024) 1-64 imagens NeRF 3D ~1 min
TripoSR (2024) imagem malha ~1 s
Meshy 4 (2025) texto + imagem malha PBR ~30 s
Rodin Gen-1.5 (2025) texto + imagem malha PBR ~60 s
Tencent Hunyuan3D 2.0 (2025) imagem malha ~30 s

Direção para 2025-2026: modelos diretos de texto para malha (text-to-mesh) com materiais PBR adequados para engines de jogos. A etapa intermediária de difusão multi-view ainda é a receita de melhor desempenho para objetos gerais.

NeRF (para contexto)

Neural Radiance Field (Mildenhall et al., 2020). Um MLP minúsculo recebe (x, y, z, view direction) e gera (color, density). Renderize integrando ao longo dos raios. Supera a síntese de novas vistas baseada em malha em qualidade, mas é de 100 a 1000 vezes mais lento para renderizar. Substituído pelo Gaussian splatting para a maioria dos usos em tempo real, mas ainda dominante na pesquisa.

Construa

code/main.py implementa um ajuste de "Gaussian splatting" 2D de brinquedo: represente uma imagem alvo sintética (um gradiente suave) como uma soma de 2D Gaussian splats. Otimize posições, cores e covariâncias por gradiente descendente para corresponder ao alvo. Você verá as duas operações principais: renderização direta (forward render: splat + alpha-composite) e ajuste por gradiente descendente.

Passo 1: 2D Gaussian splat

def gaussian_at(x, y, gaussian):
    px, py = gaussian["pos"]
    sigma = gaussian["sigma"]
    d2 = (x - px) ** 2 + (y - py) ** 2
    return math.exp(-d2 / (2 * sigma * sigma))

Passo 2: renderizar somando splats

def render(image_size, gaussians):
    img = [[0.0] * image_size for _ in range(image_size)]
    for g in gaussians:
        for y in range(image_size):
            for x in range(image_size):
                img[y][x] += g["color"] * gaussian_at(x, y, g)
    return img

O Gaussian splatting 3D real ordena as Gaussianas por profundidade e faz o alpha-compositing em ordem. Nosso brinquedo 2D apenas soma.

Passo 3: ajuste por gradiente descendente

for step in range(steps):
    pred = render(size, gaussians)
    loss = mse(pred, target)
    gradients = compute_grads(pred, target, gaussians)
    update(gaussians, gradients, lr)

Armadilhas

  • Inconsistência de vistas. Se você gerar 4 vistas de forma independente e elas discordarem sobre a estrutura do objeto, o ajuste 3D ficará borrado. Correção: difusão multi-view com atenção compartilhada.
  • Alucinação do lado oculto. A conversão de uma única imagem → 3D precisa inventar o lado não visto. A qualidade varia muito.
  • Explosão de Gaussian splats. O treinamento sem restrições cresce para mais de 10 milhões de splats e sofre overfitting. Heurísticas de densificação + poda (do artigo original do 3D-GS) são essenciais.
  • Problemas de topologia. Malhas provenientes de campos implícitos (SDFs) frequentemente apresentam buracos ou auto-interseções. Execute um remesher (por exemplo, o voxel remesh do Blender) antes do envio.
  • Termos dos dados de treinamento. O Objaverse possui termos mistos; o uso comercial varia para cada modelo.

Use

Tarefa Escolha para 2026
Reconstrução de cena a partir de fotos Gaussian splatting (3DGS, Gsplat, Scaniverse)
Objeto texto para 3D para jogos Meshy 4 ou Rodin Gen-1.5 (saída PBR)
Imagem para 3D Hunyuan3D 2.0, TripoSR, InstantMesh
Síntese de novas vistas a partir de poucas imagens CAT3D, SV3D
Reconstrução de cena dinâmica 4D Gaussian Splatting
Avatar / humano com roupas Gaussian Avatar, HUGS
Pesquisa / SOTA O que tiver sido lançado na última semana

Para enviar 3D de produção em um pipeline de jogo ou e-commerce: as saídas de malhas PBR do Meshy 4 ou Rodin Gen-1.5 vão direto para o Unity / Unreal.

Envie

Salve outputs/skill-3d-pipeline.md. A Skill recebe um resumo 3D (entrada: texto / uma imagem / poucas imagens; saída: malha / splat / NeRF; uso: renderização / jogo / VR) e gera: pipeline (difusão multi-view + ajuste, ou modelo de malha direta), modelo base, orçamento de iterações, pós-processamento de topologia, canais de material necessários.

Exercícios

  1. Fácil. Execute code/main.py com 4, 16, 64 Gaussianas. Relate o MSE final em relação ao alvo.
  2. Médio. Estenda para Gaussianas coloridas (RGB). Confirme se a reconstrução corresponde ao padrão de cores do alvo.
  3. Difícil. Usando gsplat ou Nerfstudio, reconstrua um objeto real a partir de uma captura de 50 fotos. Relate o tempo de ajuste e o SSIM final nas vistas reservadas (held-out).

Termos-Chave

Termo O que as pessoas dizem O que realmente significa
3D Gaussian Splatting "3DGS" Cena como uma nuvem de Gaussianas 3D; renderização de alpha-compositing diferenciável.
NeRF "Neural radiance field" MLP que gera cor + densidade em um ponto 3D; renderização por integração de raios.
Triplane "Três planos 2D" Fatora o 3D em três grades de features 2D alinhadas aos eixos; mais barato que o volumétrico.
SDS "Score distillation sampling" Treina o modelo 3D usando a pontuação de difusão 2D como pseudo-gradiente.
Difusão multi-view "Múltiplas vistas de uma vez" Modelo de difusão que gera um lote de vistas de câmera consistentes.
PBR "Physically-based rendering" Material com canais de albedo, rugosidade (roughness), metálico e normais.
Densificação "Crescer splats" Heurística de treinamento do 3DGS: divide / clona splats em regiões de alto gradiente.

Nota de produção: o 3D ainda não possui um substrato compartilhado

Diferente de imagem (difusão latente + DiT) e vídeo (DiT espaço-temporal), o 3D não possui um único runtime dominante em 2026. A árvore de decisão de produção se divide com base na representação:

  • NeRF / triplane. A inferência consiste em ray-marching + uma passagem direta (forward) de MLP por amostra. Uma renderização de 512² requer milhões de passagens diretas de MLP. Agrupe as amostras de raios de forma agressiva; aplica-se SDPA/xformers.
  • Difusão multi-view + reconstrução LRM. Pipeline de duas etapas. A Etapa 1 (DiT multi-view) é um servidor de difusão exatamente como na Lição 07. A Etapa 2 (transformer LRM) é uma passagem direta única (one-shot) sobre as vistas. O perfil de latência geral é "difusão + one-shot" — escolha as primitivas de serviço por etapa de acordo com isso.
  • SDS / DreamFusion. Otimização por ativo, não inferência. Crie tarefas (jobs), não manipuladores de requisições (request handlers).

Para a maioria dos produtos de 2026, a resposta correta é "executar um modelo de difusão multi-view sob demanda, reconstruir para 3DGS de forma assíncrona, servir o 3DGS para visualização em tempo real". Isso divide a carga de trabalho de forma limpa entre um servidor de inferência em GPU (rápido) e um otimizador offline (lento).

Leituras Adicionais

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).