Película de Blender con Claude
El flujo de trabajo detrás de un plano nocturno FPV de 10 segundos sobrevolando una ciudad: un guion gráfico, una trayectoria basada en física, un pivote (el primer héroe no funcionó), iluminación nocturna, sonido a partir del movimiento, un render de 3.5 horas y una revelación de modelado en arcilla. Cada paso a continuación es un script en scripts/ que se ejecutó realmente para ese plano; los nombres en ellos (Drone Empty, Street Asphalt, Building_1...) provienen de esa escena: cambia los nombres por los tuyos.
0. Configuración
- Blender 4.4+ (creado en 5.2), una GPU para Cycles, Python 3 +
ffmpegen PATH (+numpy,scipypara el paso de sonido). - Puente en vivo (Claude maneja Blender abierto, tú observas): en el Editor de Texto de Blender ejecuta
tools/bridge.py(escucha en 127.0.0.1:9876). Luego desde una terminal:python tools/send.py scripts/06_night.pyopython tools/send.py -c "print(bpy.data.filepath)". - Establece
FILM_ROOTen tu carpeta de proyecto (por defecto~/blender-film): allí vivenscene/,render/,audio/,research/.tools/lib.pyes cargado por cada script (ayudantes:coll(),save(),snap()...). - Trabaja sobre copias. Antes de reproducir o volver a ejecutar cualquier script que edite materiales, copia el .blend: varias pasadas no son idempotentes si una ejecución se bloquea a medio camino (volver a ejecutar enlaces de nodos huérfanos una vez).
1. Guion gráfico primero
Pide a Claude un guion gráfico de 10 segundos antes de tocar Blender: lista de tomas con tiempos, cámara por toma, dónde está el héroe, qué siente el espectador. Conviértelo en una hoja de imágenes (cualquier modelo de imágenes) y mantenla abierta: cada decisión posterior se verifica contra ella.
2. Ciudad
Usa un paquete de activos urbanos que poseas (edificios, carreteras, accesorios) o activos CC0 gratuitos (Poly Haven). Haz que Claude diseñe una avenida + una intersección a lo largo de +X desde un mapa en vista superior (mantén el camino del héroe libre de accesorios), luego decora: coches (estacionados / en movimiento / detenidos), farolas, árboles, hidrantes. Integra cada activo externo en el .blend.
3. Movimiento a partir de la física, no curvas animadas manualmente
scripts/01_swing_sim.py simula el movimiento (gravedad, resistencia del aire, una cuerda que no puede estirarse, anclajes web del guion gráfico) y busca los tiempos de los anclajes hasta que la trayectoria atraviese la calle. 02_path_empty.py lo convierte en una curva de trayectoria + un vacío en Seguir Trayectoria con el desplazamiento clave por fotograma (velocidad real, no lineal). El héroe se parenta al vacío, la cámara sigue su propia trayectoria (03_camera.py, + 03b_camera_noise.py para un temblor sutil).
4. El héroe, y cuándo pivotar
El primer héroe fue un Spider-Man riggeado animado con clips de Mixamo. Falló: el motion capture está grabado en el suelo, así que en el aire colgaba como un títere, las poses eran rígidas, y era diminuto en el encuadre. Si el personaje con extremidades se ve mal, cambia el héroe: conserva la ciudad, la cámara y la trayectoria. Pide opciones a Claude (conseguimos: halcón, supercoche, arreglo manual, dron FPV).
El dron FPV funciona porque nada puede verse rígido. 04_drone_attitude.py lo vuela como un quad real:
- actitud a partir de la física: eje de empuje = aceleración + gravedad, morro a lo largo de la velocidad -> se inclina en aceleraciones, se escora en giros rápidos, levanta el morro al frenar;
- corte de aceleración donde la trayectoria es balística -> trucos de estilo libre superpuestos: power flip, barrel roll, back flip;
- frenado con elevación del morro hasta cernerse, luego un giro lento para mirar al objetivo; hélices girando + tiras LED cian/magenta.
5. Pase de realismo (05_realism.py)
Las pequeñas cosas que nadie nota hasta que faltan: exposición AgX (sin gradación), un volumen de neblina tenue, asfalto con repetición de textura rota, marcas de rodadura, una línea de goteo de aceite por cada carril, parches de reparación, pintura desgastada, y suciedad al pie de cada pared + ligeras marcas de escorrentía.
6. Noche que se vea de noche (06_night.py)
Regla: de noche el cielo no ilumina la escena; lo hacen las luces prácticas. Cielo con degradado oscuro y resplandor urbano, farolas LED, ventanas iluminadas, faros/luces traseras de coches, semáforos en rojo, niebla azulada con un toque de emisión, asfalto mojado con charcos.
- Primer intento falló (niebla naranja por todas partes, bloques brillantes en lugar de ventanas).
- La solución: las texturas de las fachadas ya saben dónde está el vidrio: el vidrio es suave, las paredes son rugosas. Usa el mapa de rugosidad como máscara de ventanas (
rugosidad < 0.3), luego ilumina un subconjunto aleatorio por celda de ventana: cálido, frío, apagado.
7. Cámara como un operador real (07_shakify_cams.py)
Reemplaza el ruido procedural con Shakify (complemento gratuito con movimiento de cámara real grabado) en cada cámara de toma. Añade tomas cercanas: una cámara a nivel de calle ~0.45 m sobre la carretera mojada, el dron se lanza hacia el objetivo y se detiene justo delante de él. 08_lens_look.py: floración alrededor de las luces, ligera distorsión de barril + dispersión: sin gradación de color, el aspecto es la iluminación.
8. Sonido diseñado a partir del movimiento
Grabaciones CC0 gratuitas (BigSoundBank: dron DJI, ciudad de noche, tráfico en carretera mojada, cláxones, sirena lejana, viento, lluvia sobre un charco, un aire acondicionado). 11_motion_data.py lee la animación por fotograma (distancia del dron / velocidad radial / lateral / aceleración, coches cercanos) en audio/motion.json; 12_build_sfx.py maneja la mezcla a partir de ello:
- aceleración -> RPM del motor -> tono; velocidad radial -> Doppler (el tono baja al pasar frente al objetivo); lateral -> paneo de igual potencia;
- ganancia por distancia + absorción del aire, ráfagas de propulsión en golpes de aceleración, salpicaduras cuando se cierne bajo sobre la carretera mojada, el AC de la azotea solo en la toma del tejado, coches que pasan en su punto más cercano, reverberación de cañón urbano;
- haz dos versiones (noche tranquila / caos urbano completo) y elige de oído. La tranquila ganó: deja que el héroe sea la estrella. Sonoridad -14 LUFS.
9. Render nocturno, seguro
09_render_opt.py: elimina geometría duplicada oculta (el activo del árbol tenía copias extra), usa un LOD más ligero para cualquier cosa lejana de cada cámara de toma, desnoising por GPU. Sin cambio visible.- Renderiza seis fotogramas de prueba a calidad final primero y revísalos.
10_render_edit.pyrenderiza solo los fotogramas que usa la edición (lista de tomas = cámara + rango de fotogramas), reanudable, y escriberender/status.json;tools/render_window.ps1(Windows) muestra un panel de progreso limpio: %, tiempo restante, último fotograma finalizado.- Después del render: verifica que cada fotograma exista, que no haya fotogramas negros/rotos (brillo por fotograma, saltos solo en cortes planificados), que el sonido coincida con la mezcla aprobada, y que la sonoridad esté lista para YouTube. Solo entonces codifica + (si lo pediste) apaga el PC.
10. La revelación de modelado en arcilla (prueba de que es 3D real)
13_aerial_cam.py añade una cámara elevada sobre la avenida. En una copia nueva de la escena, 14_clay_build.py convierte todo en arcilla blanca, congela la cámara + el tráfico en un fotograma, y oculta cada pieza hasta su turno, luego la deja caer desde el cielo: primero los coches, luego los edificios más cercanos a la cámara primero, luego la ciudad lejana, luego farolas e hidrantes (~500 piezas). Cada caída acelera y rebota un poco al aterrizar. tools/clay_assemble.sh: noche | corte brusco | construcción en arcilla | un wipe de 0.25 s | noche, misma cámara, mismo fotograma. Las imágenes fijas divididas en arcilla vs noche son excelentes miniaturas.
Lecciones que costaron tiempo
- Los grabadores de pantalla capturan negro si la especificación de la ventana es incorrecta: verifica el primer fotograma grabado antes de alejarte.
- Grabaciones de viewport: la Previsualización de Materiales necesita el desenfoque de movimiento desactivado y los volúmenes desvinculados o se mancha; el viewport de Cycles necesita un desnoiser.
- Las rutas de salida relativas en
blender -bse resuelven en la raíz de la unidad: siempre pasa rutas absolutas. - Pregunta antes de cualquier trabajo largo de GPU; prueba a baja calidad primero, calidad final al final.
Licencia: MIT. Mantenido únicamente por Abdullah Formuli. No se aceptan contribuciones externas.