Phase 08 - Lesson 12
Generación 3D
El 3D es la modalidad donde el apalancamiento de 2D a 3D es más fuerte. El avance de 2023 fue 3D Gaussian Splatting. El impulso generativo de 2024-2026 superpone la difusión multi-view + reconstrucción 3D para producir objetos y escenas a partir de un solo prompt o foto.
Tipo: Aprender Lenguajes: Python Prerrequisitos: Fase 4 (Visión), Fase 8 · 07 (Difusión Latente) Tiempo: ~45 minutos
El Problema
El contenido 3D es doloroso:
- Representación. Mallas (meshes), nubes de puntos, rejillas de voxels, campos de distancia con signo (SDFs), campos de radiancia neural (NeRFs), Gaussianas 3D. Cada uno tiene sus ventajas y desventajas.
- Escasez de datos. ImageNet tiene 14 millones de imágenes. El conjunto de datos 3D limpio más grande (Objaverse-XL, 2023) tiene alrededor de 10 millones de objetos, la mayoría de baja calidad.
- Memoria. Una rejilla de voxels de 512³ equivale a 128 millones de voxels; un NeRF de escena útil necesita 1 millón de muestras por rayo. La generación es más difícil que la reconstrucción.
- Supervisión. Para una imagen 2D tienes los píxeles. Para 3D, generalmente tienes un puñado de vistas 2D y debes elevarlas a 3D.
La stack de 2026 separa los dos problemas. Primero, genera imágenes multi-view 2D con un modelo de difusión. Segundo, ajusta una representación 3D (generalmente Gaussian splatting) a esas imágenes.
El Concepto
Representación: 3D Gaussian Splatting (Kerbl et al., 2023)
Representa una escena como una nube de alrededor de 1 millón de Gaussianas 3D. Cada una tiene 59 parámetros: posición (3), covarianza (6, o cuaternión 4 + escala 3), opacidad (1), color en armónicos esféricos (48 en el grado 3, 3 en el grado 0).
Renderizado = proyección + alpha-compositing. Rápido (~100 fps en 1080p en una 4090). Diferenciable. Ajustado por descenso de gradiente contra fotos de referencia (ground-truth). Una escena se ajusta en 5 a 30 minutos en una GPU de consumo.
Dos innovaciones de 2023-2024 en la parte superior:
- Gaussian splats generativos. Modelos como LGM, LRM e InstantMesh predicen una nube Gaussiana directamente a partir de una o pocas imágenes.
- 4D Gaussian Splatting. Gaussianas con offsets por frame para escenas dinámicas.
Difusión multi-view
Ajuste fino (fine-tune) de un modelo de difusión de imagen preentrenado para generar múltiples vistas consistentes del mismo objeto a partir de un prompt de texto o de una sola imagen. Zero123 (Liu et al., 2023), MVDream (Shi et al., 2023), SV3D (Stability, 2024), CAT3D (Google, 2024). Por lo general, generan de 4 a 16 vistas alrededor del objeto, elevadas a 3D mediante Gaussian splatting o NeRF.
Pipelines de Texto a 3D
| Modelo | Entrada | Salida | Tiempo |
|---|---|---|---|
| DreamFusion (2022) | texto | NeRF vía SDS | ~1 hora por activo |
| Magic3D | texto | malla + textura | ~40 min |
| Shap-E (OpenAI, 2023) | texto | 3D implícito | ~1 min |
| SJC / ProlificDreamer | texto | NeRF / malla | ~30 min |
| LRM (Meta, 2023) | imagen | triplano | ~5 s |
| InstantMesh (2024) | imagen | malla | ~10 s |
| SV3D (Stability, 2024) | imagen | nuevas vistas | ~2 min |
| CAT3D (Google, 2024) | 1-64 imágenes | NeRF 3D | ~1 min |
| TripoSR (2024) | imagen | malla | ~1 s |
| Meshy 4 (2025) | texto + imagen | malla PBR | ~30 s |
| Rodin Gen-1.5 (2025) | texto + imagen | malla PBR | ~60 s |
| Tencent Hunyuan3D 2.0 (2025) | imagen | malla | ~30 s |
Dirección para 2025-2026: modelos directos de texto a malla (text-to-mesh) con materiales PBR adecuados para motores de juego (game engines). El paso intermedio de difusión multi-view sigue siendo la receta con mejor rendimiento para objetos generales.
NeRF (para contexto)
Neural Radiance Field (Mildenhall et al., 2020). Un MLP diminuto recibe (x, y, z, view direction) y produce (color, density). Se renderiza integrando a lo largo de los rayos. Supera a la síntesis de nuevas vistas basada en mallas en calidad, pero es de 100 a 1000 veces más lento para renderizar. Reemplazado por Gaussian splatting para la mayoría de los usos en tiempo real, pero sigue siendo dominante en la investigación.
Constrúyelo
code/main.py implementa un ajuste de "Gaussian splatting" 2D de juguete: representa una imagen objetivo sintética (un gradiente suave) como una suma de 2D Gaussian splats. Optimiza posiciones, colores y covarianzas mediante descenso de gradiente para coincidir con el objetivo. Verás las dos operaciones principales: renderizado directo (forward render: splat + alpha-composite) y ajuste mediante descenso de gradiente.
Paso 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))
Paso 2: renderizar sumando 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
El Gaussian splatting 3D real ordena las Gaussianas por profundidad y realiza el alpha-compositing en orden. Nuestro juguete 2D solo suma.
Paso 3: ajuste mediante descenso de gradiente
for step in range(steps):
pred = render(size, gaussians)
loss = mse(pred, target)
gradients = compute_grads(pred, target, gaussians)
update(gaussians, gradients, lr)
Dificultades
- Inconsistencia de vistas. Si generas 4 vistas de forma independiente y no coinciden en la estructura del objeto, el ajuste 3D resultará borroso. Solución: difusión multi-view con atención compartida.
- Alucinación de la parte posterior. La conversión de una sola imagen → 3D tiene que inventar el lado no visto. La calidad varía enormemente.
- Explosión de Gaussian splats. El entrenamiento sin restricciones crece hasta más de 10 millones de splats y produce sobreajuste (overfitting). Las heurísticas de densificación + poda (del artículo original de 3D-GS) son esenciales.
- Problemas de topología. Las mallas de campos implícitos (SDFs) a menudo tienen agujeros o autointersecciones. Ejecuta un remesher (por ejemplo, el voxel remesh de Blender) antes de distribuirlas.
- Términos de los datos de entrenamiento. Objaverse tiene términos mixtos; el uso comercial varía según el modelo.
Úsalo
| Tarea | Selección para 2026 |
|---|---|
| Reconstrucción de escenas a partir de fotos | Gaussian splatting (3DGS, Gsplat, Scaniverse) |
| Objeto de texto a 3D para juegos | Meshy 4 o Rodin Gen-1.5 (salida PBR) |
| Imagen a 3D | Hunyuan3D 2.0, TripoSR, InstantMesh |
| Síntesis de nuevas vistas a partir de pocas imágenes | CAT3D, SV3D |
| Reconstrucción de escenas dinámicas | 4D Gaussian Splatting |
| Avatar / humano con ropa | Gaussian Avatar, HUGS |
| Investigación / SOTA | Lo que se haya lanzado la semana pasada |
Para distribuir 3D de producción en un pipeline de juegos o comercio electrónico: las mallas PBR de salida de Meshy 4 o Rodin Gen-1.5 van directo a Unity / Unreal.
Distribúyelo
Guarda outputs/skill-3d-pipeline.md. La Skill recibe un informe 3D (entrada: texto / una imagen / pocas imágenes; salida: malla / splat / NeRF; uso: renderizado / juego / VR) y produce: pipeline (difusión multi-view + ajuste, o modelo de malla directa), modelo base, presupuesto de iteraciones, postprocesamiento de topología, canales de material necesarios.
Ejercicios
- Fácil. Ejecuta
code/main.pycon 4, 16, 64 Gaussianas. Informa el MSE final frente al objetivo. - Medio. Extiende a Gaussianas de colores (RGB). Confirma que la reconstrucción coincida con el patrón de color del objetivo.
- Difícil. Utilizando gsplat o Nerfstudio, reconstruye un objeto real a partir de una captura de 50 fotos. Informa el tiempo de ajuste y el SSIM final en las vistas reservadas (held-out).
Términos Clave
| Término | Lo que dice la gente | Lo que realmente significa |
|---|---|---|
| 3D Gaussian Splatting | "3DGS" | Escena como una nube de Gaussianas 3D; renderizado diferenciable por alpha-compositing. |
| NeRF | "Neural radiance field" | MLP que produce color + density en un punto 3D; renderizado por integración de rayos. |
| Triplane | "Tres planos 2D" | Factoriza el 3D en tres rejillas de características 2D alineadas con los ejes; más económico que el volumétrico. |
| SDS | "Score distillation sampling" | Entrena el modelo 3D usando la puntuación de difusión 2D como pseudo-gradiente. |
| Difusión multi-view | "Muchas vistas a la vez" | Modelo de difusión que produce un lote de vistas de cámara consistentes. |
| PBR | "Physically-based rendering" | Material con canales de albedo, rugosidad (roughness), metálico y normales. |
| Densificación | "Hacer crecer los splats" | Heurística de entrenamiento de 3DGS: divide / clona splats en regiones de alto gradiente. |
Nota de producción: el 3D aún no tiene un sustrato compartido
A diferencia de la imagen (difusión latente + DiT) y el video (DiT espaciotemporal), el 3D no tiene un único runtime dominante en 2026. La decisión de producción se bifurca según la representation:
- NeRF / triplane. La inferencia consiste en ray-marching + una pasada directa (forward) de MLP por muestra. Un renderizado de 512² requiere millones de pasadas directas de MLP. Agrupa las muestras de rayos de forma agresiva; se aplica SDPA/xformers.
- Difusión multi-view + reconstrucción LRM. Pipeline de dos etapas. La Etapa 1 (DiT multi-view) es un servidor de difusión exactamente igual que en la Lección 07. La Etapa 2 (transformer LRM) es una pasada directa única (one-shot) sobre las vistas. El perfil de latencia general es "difusión + one-shot" — selecciona primitivas de servicio por etapa de acuerdo con esto.
- SDS / DreamFusion. Optimización por activo, no inferencia. Construye tareas (jobs), no manejadores de peticiones (request handlers).
Para la mayoría de los productos de 2026, la respuesta correcta es "ejecutar un modelo de difusión multi-view bajo petición, reconstruir a 3DGS de forma asíncrona, servir el 3DGS para visualización en tiempo real". Esto divide la carga de trabajo de forma limpia entre un servidor de inferencia en GPU (rápido) y un optimizador offline (lento).
Lecturas Adicionais
- Mildenhall et al. (2020). NeRF: Representing Scenes as Neural Radiance Fields — NeRF.
- Kerbl et al. (2023). 3D Gaussian Splatting for Real-Time Radiance Field Rendering — 3DGS.
- Poole et al. (2022). DreamFusion: Text-to-3D using 2D Diffusion — SDS.
- Liu et al. (2023). Zero-1-to-3: Zero-shot One Image to 3D Object — Zero123.
- Shi et al. (2023). MVDream — difusión multi-view.
- Hong et al. (2023). LRM: Large Reconstruction Model for Single Image to 3D — LRM.
- Gao et al. (2024). CAT3D: Create Anything in 3D with Multi-View Diffusion Models — CAT3D.
- Stability AI (2024). Stable Video 3D (SV3D) — SV3D.