Proyecto destacado

MatForge

Convierte una fotografía en un material 3D completo — Normal, Roughness y Metallic— en menos de 10 segundos. Sin suscripción. Sin internet. En tu equipo.

Proyecto final del Curso de Especialización en IA y Big Data (EUSA, 2025–26). Desarrollado íntegramente de forma individual.

Visor 3D de MatForge: esfera metálica girando con mapas PBR generados por IA aplicados en tiempo real
Visor 3D integrado — Three.js · Mapas generados por MatForge

El problema

La brecha que MatForge cierra

Generar materiales PBR de calidad para producción requiere fotogrametría controlada, software especializado de pago o bibliotecas de materiales prefabricados. Las herramientas existentes no resuelven el caso de uso real simultáneamente: ejecución local, hardware de consumo, los tres mapas canónicos desde una foto, e interfaz accesible.

Posicionamiento: accesibilidad vs. calidad PBR

Accesibilidad → Calidad PBR → Alta calidad, acceso difícil Objetivo MatForge Baja calidad, acceso difícil Accesible, calidad limitada ControlMat ~12 GB VRAM SuperMat MatFusion SurfaceNet Deschaintre 2018 Substance 3D Sampler suscripción · online Materialize shaders, sin ML AwesomeBump MatForge local · free · 4 GB VRAM

Ninguna herramienta identificada satisface los cuatro criterios simultáneamente: ejecución local, hardware de consumo (≤8 GB VRAM), salida N+R+M desde imagen única e interfaz accesible para artistas. MatForge cubre ese espacio.

Cómo funciona

Pipeline de predicción

Desde una sola imagen RGB hasta tres mapas PBR exportables a cualquier motor, todo en un mismo flujo local.

Imagen RGB
Foto, captura o referencia
Corrección de perspectiva opcional
Clasificador
DINOv2-small + PCA-50 + KNN
8 grupos de material
MatForgeNet
PVT-v2-B1 + FPN
Inferencia tile-and-merge
Postproceso
Calibración · RNM · Tiling
Variaciones procedurales
Exportación
Blender · UE5 · Unity · Godot
Metadatos XMP incluidos
Interfaz principal de MatForge con imagen metálica lista para generar mapas

Interfaz principal — imagen cargada, lista para inferencia

Los tres mapas PBR generados por MatForge: Normal (azul), Roughness (gris), Metallic

Normal · Roughness · Metallic — textura metálica

Resultados

Métricas y benchmarking

Los tres objetivos cuantitativos del modelo se cumplieron. El benchmarking confirma superioridad sobre los dos baselines anteriores del proyecto en todas las métricas.

10,37°
MAE Normal
objetivo < 11° ✓
0,1117
MAE Roughness
objetivo < 0,12 ✓
0,0976
LPIPS
objetivo < 0,10 ✓
< 10 s
Inferencia en GPU
GTX 1650 Max-Q · 4 GB VRAM

Comparativa cuantitativa — MatForge vs. baselines del proyecto

Modelo Normal MAE (°) ↓ Roughness MAE ↓ Roughness RMSE ↓ LPIPS render ↓
Pix2Pix 14,74 0,212 0,2327 0,2988
DeepPBR 13,64 0,2238 0,2472 0,3392
MatForge 10,40 0,1084 0,1268 0,2911

Mejora de MatForge sobre Pix2Pix: 29,5% en Normal MAE, 48,9% en Roughness MAE. Sobre DeepPBR: 23,8% en Normal MAE, 51,6% en Roughness MAE.

Relabeling semántico del dataset — pipeline DINOv2 + HDBSCAN

Las categorías originales de MatSynth no siempre coinciden con propiedades físicas útiles para calibración PBR. Se desarrolló un pipeline no supervisado para reorganizar las 3.245 texturas en 8 grupos funcionales: DINOv2-small (embeddings de 384 dim) → PCA-50 → UMAP → HDBSCAN → fusión manual supervisada. Resultado: DBCV = 0,3279, superando el umbral objetivo de 0,30.

UMAP — Categorías originales MatSynth

Antes: Categorías originales — dispersión sin coherencia PBR

UMAP — Grupos funcionales (relabeling)

Después: 8 grupos funcionales útiles para calibración PBR

Comparativa

MatForge vs. Substance 3D Sampler vs. Materialize

Comparativa sobre seis texturas representativas, procesadas con los tres sistemas y renderizadas bajo la misma escena Blender.

MatForge Gratuito · Local
  • Alta fidelidad en materiales metálicos
  • Metallic map correcto en metal y no-metal
  • Clasificación automática de material
  • Exportación a 5 motores con metadatos XMP
  • Visor 3D · SR · Variaciones · Tileable · Batch
  • Dificultades en geometría fina de bajo contraste
Substance 3D Sampler Suscripción · Online
  • Resultados convincentes en materiales no metálicos
  • Robusto en geometría fina
  • Requiere suscripción y autenticación periódica
  • Procesado parcial en servidores remotos
  • Sin clasificación automática de material
  • Exportación limitada al ecosistema Adobe
Materialize Gratuito · Local
  • Gratuito y sin dependencias de red
  • Sin componente de aprendizaje profundo
  • Normales planas en geometría compleja
  • Roughness amplificado o invertido
  • Metallic heurístico por tono de píxel
  • Sin clasificación, calibración ni visor 3D

Bajo el capó

Decisiones técnicas clave

PVT-v2-B1 como encoder jerárquico

Los encoders de clasificación (ResNet, VGG) descartan información espacial de forma irreversible mediante pooling global. Para predicción densa a nivel de píxel eso es una limitación estructural. PVT-v2-B1 mantiene representaciones multiescala en cuatro escalas sin downsampling agresivo, lo que lo hace adecuado para estimar mapas de normales con coherencia espacial fina. El cambio desde MiT-B1 —encoder originalmente previsto— fue forzado por incompatibilidad con timm 1.0.25, y resultó equivalente en capacidad.

PVT-v2-B1 · ~13M parámetros · preentrenado ImageNet-1K via timm · FPN con skip connections en 4 escalas

GAN mantenido pese al colapso del discriminador

El discriminador PatchGAN colapsó desde la primera época adversarial — D(real) y D(fake) convergiendo a 0,50. La decisión fue mantener la fase de todas formas: la feature matching loss seguía aportando señal perceptual útil con independencia del discriminador. El checkpoint final se eligió por LPIPS, no por estabilidad GAN. El resultado mejoró 0,37° en Normal MAE y 0,0118 en LPIPS respecto al checkpoint supervisado. Presentar esto con honestidad es lo que avala las métricas.

90 épocas supervisadas + 20 GAN · checkpoint best_gan.pt seleccionado por LPIPS · discriminador PatchGAN multiescala

Relabeling semántico para dos problemas distintos

Las categorías originales de MatSynth mezclaban materiales visualmente distintos y dejaban grupos críticos —especialmente metal— con muy pocas muestras. Un mal balance en grupos pequeños pero importantes habría sesgado el entrenamiento. El pipeline DINOv2 + PCA-50 + UMAP + HDBSCAN reorganizó 3.245 texturas en 8 grupos funcionales coherentes, mejorando el balance del dataset. Una vez en producción, el mismo clasificador KNN resultante se reutilizó en la app para calibración diferenciada por grupo —resolviendo dos problemas con una sola decisión de diseño.

DBCV = 0,3279 · KNN k=7 · coseno · 8 grupos funcionales · latencia <5 ms en CPU

Super-Resolución como módulo opcional especializado

Incluir SR como preproceso obligatorio habría aumentado el tiempo de inferencia para todos los usuarios, incluso cuando no era necesario. La decisión fue hacerlo opcional y fine-tunearlo sobre MatSynth —en lugar de usar Real-ESRGAN base— para adaptar la cadena de upscaling al dominio específico de materiales PBR. La mejora interna fue del 10,9% en LPIPS. El resultado no se transfirió al benchmarking general, lo que se interpreta como distribution shift de la cadena de degradación sintética —limitación documentada y trasladada a trabajo futuro.

RRDBNet · 23 bloques RRDB · fine-tuning sobre MatSynth · tile-and-merge 256×256 stride 128 · ventana Hann

Más allá de la inferencia

Pipeline completo de producción

MatForge no es solo un modelo. Es una herramienta de producción con diez funcionalidades integradas que cubren desde la entrada hasta la exportación.

Corrección de perspectiva Warp interactivo de 4 puntos con previsualización en tiempo real
Super-Resolución ×4 Real-ESRGAN fine-tuneado sobre MatSynth para entradas de baja resolución
Clasificador de material DINOv2-small + KNN · detección automática del grupo funcional
Calibración por grupo Curvas de corrección específicas para cada uno de los 8 grupos
Material Blender (RNM) Mezcla de dos materiales preservando coherencia vectorial del Normal map
Variaciones procedurales Zonal Mix · Worn Edges · Scale Shift — ruido FBM con semilla
Make Tileable Mezcla en dominio de frecuencias para texturas sin costuras
Evaluación de calidad Puntuación heurística del Normal map con mapa de calor diagnóstico
Visor 3D integrado Three.js · geometría seleccionable · entorno HDRI · sin salir de la app
Batch ZIP Procesa un ZIP completo de imágenes con el pipeline completo
MatForge: herramienta de variaciones procedurales generando tres variantes de la textura metálica
Variaciones procedurales Zonal Mix · Worn Edges · Scale Shift — tres variantes desde la misma textura
MatForge: clasificador de material detectando automáticamente brick_terracotta con confianza 0.95
Clasificador de material DINOv2 + KNN detecta brick_terracotta · distancia KNN 0.016 · confianza 0.95

Exportación multi-motor con metadatos de procedencia XMP

Blender Normal · Roughness · Metallic · Color
Unreal Engine 5 T_name_N · T_name_ORM · T_name_D
Unity URP Normal · MetallicSmoothness · Albedo
Unity HDRP Normal · MaskMap · Albedo
Godot 4 normal · orm · albedo

Todos los PNG exportados incluyen metadatos XMP con campos dc:creator, dc:rights, xmp:CreatorTool y xmpRights:Marked, identificando el origen de IA del contenido en anticipación al Art. 50 del Reglamento UE 2024/1689 (vigente agosto 2026).

Honestidad técnica

Limitaciones identificadas

Un buen proyecto no oculta sus límites. Los conoce, los documenta y sabe por qué existen.

Inconsistencia del mapa Metallic en grupos minoritarios
El canal Metallic se diseñó para el grupo metal, que concentra las texturas conductoras del dataset. Sin embargo, ese grupo tenía pocas muestras en MatSynth, y el modelo no siempre genera un Metallic consistente incluso cuando el clasificador identifica correctamente el material como metálico. La categoría funcional no afecta al modelo MatForge —solo al postproceso—, por lo que la inconsistencia es inherente al balance del dataset de entrenamiento. Es la limitación más estructural del proyecto.
Geometría fina de bajo contraste
Sin profundidad ni iluminación controlada, materiales con microgeometría irregular de alta frecuencia producen normales menos precisas. stone_rough concentra el mayor error angular del benchmark (16,42°), coherente con la dificultad de inferir relieve complejo desde una única imagen RGB sin información de profundidad.
Distribution shift en el módulo SR
MatForge SR mejora un 10,9% sobre Real-ESRGAN base en validación interna, pero no supera al modelo base en el benchmarking general sobre 100 texturas. La cadena de degradación sintética usada en el fine-tuning no representó suficientemente la variedad de condiciones reales. La Fase 2 adversarial también colapsó y fue abortada.
Trabajo futuro documentado
Fase 2 SR con degradación más representativa, integración de MUJICA para atención cruzada entre mapas, ampliación selectiva del dataset, y evolución de metadatos XMP hacia C2PA con firma criptográfica para distribución pública.

Accede al proyecto

Repositorios

MatForge-App
Código fuente de la aplicación Streamlit, instrucciones de instalación, manuales de usuario y técnico, y pesos del modelo (en Releases).
Ver en GitHub →
MatForge-Research
Documentación académica completa (+80 páginas), notebooks de entrenamiento, resultados y métricas, backlog SCRUM y bitácora de desarrollo. En español.
Ver en GitHub →