Ir al contenido
learn

Blender para desarrolladores — Misión

El curso de three.js del sitio carga modelos glTF, y GuitarAlchemist dibuja un mástil de guitarra en 3D en el navegador. Hasta ahora, esos modelos se escriben desde código, primitiva a primitiva. Blender es donde se suelen crear los modelos 3D, y es gratuito, de código abierto y programable en Python de principio a fin.

Quiero entender cómo guarda Blender una escena, cómo modelar, texturizar e iluminar algo sencillo pero real, y cómo exportarlo para la web. También quiero manejarlo con scripts, porque ahí es donde un desarrollador aporta más a un pipeline 3D: exportaciones por lotes, escenas generadas y comprobaciones en CI.

Escribes C# o Java, y nunca has hecho 3D. No hace falta conocer bien Python: los scripts son cortos, y el curso de Python cubre el lenguaje. Necesitas un ratón con rueda; una tarjeta gráfica ayuda para EEVEE y para el viewport, pero todos los scripts del curso se ejecutan en la CPU, como en la CI.

La mayoría de los tutoriales de Blender dejan los scripts para el final. Este curso trae bpy, la API de Python de Blender, a cada lección desde la primera, por dos razones. Un desarrollador entiende antes un modelo de datos imprimiéndolo que haciendo clic por la interfaz. Y un script que construye una escena da un resultado comprobable: los mismos números de vértices, los mismos valores de materiales y, como muestra la lección 4, los mismos píxeles renderizados en tres sistemas operativos.

Por eso cada lección tiene dos mitades: lo que haces en la interfaz, y cómo se ve lo mismo en bpy. La lección 5 profundiza después en la propia API.

  • orientarme en la interfaz de Blender, y explicar qué contiene un archivo .blend;
  • modelar con mallas y modificadores, y leer la topología de una malla;
  • construir materiales de nodos con el Principled BSDF, desplegar UV y usar texturas de imagen;
  • iluminar una escena, y elegir entre EEVEE y Cycles, el número de muestras y la eliminación de ruido;
  • escribir scripts bpy que construyen, comprueban y renderizan escenas sin ventana;
  • construir geometría procedural con Geometry Nodes;
  • animar con fotogramas clave, armaduras y restricciones;
  • exportar glTF 2.0 para three.js, y saber qué conserva y qué descarta el exportador;
  • escribir un add-on y empaquetarlo como extensión;
  • ejecutar renders y exportaciones en CI.
# Lección En términos de C# o Java
1 La interfaz, y el archivo .blend como base de datos un modelo de objetos con recuento de referencias, y la reflexión
2 Modelado poligonal y modificadores una cadena de decoradores, evaluada de forma perezosa
3 Materiales, UV, y lo que glTF conserva de ellos un grafo de flujo de datos, y un serializador con pérdidas
4 Luces, cámaras, y el render con EEVEE y Cycles una estimación de Monte Carlo, y un Random con semilla
5 Scripts con bpy: datos, operadores, contexto y línea de comandos la API que hay detrás de la interfaz
6 Geometry Nodes: el modelado procedural como programa de flujo de datos LINQ sobre vértices
7 Animación: fotogramas clave, curvas, armaduras y restricciones —
8 Exportar para la web: glTF 2.0, Draco, meshopt y KTX2, cargados en three.js —
9 Add-ons: operadores, paneles y propiedades, empaquetados como extensión una API de plugins, y un registro de paquetes
10 Un pipeline automatizado: renders y exportaciones por lotes, y pruebas de scripts bpy en CI —
11 Escultura y retopología (visión general) —
12 Simulación: física, partículas y fluidos (visión general, con su coste de cómputo) —
13 Proyecto: un mástil de guitarra para GuitarAlchemist, exportado a glTF y mostrado en three.js —
— Diario

Las lecciones 5 a 13 son el plan; cambiarán a medida que las primeras me enseñen lo que importa.

Todas las lecciones trabajan sobre el mismo objeto: un diapasón de guitarra de 22 trastes con una escala de 648 mm (25,5 pulgadas), construido por scripts/fretboard.py. Los trastes están donde los pone el temperamento igual, algo que un modificador no sabe hacer y un script hace en una línea. No hay ningún archivo .blend en el repositorio: los scripts reconstruyen la escena cada vez.

El diapasón del curso renderizado con Cycles: una tabla de palisandro, trastes de alpaca y marcadores de nácar