Film Blender avec Claude
Le workflow derrière un plan de 10 secondes en FPV nocturne à travers une ville : un storyboard, une trajectoire physique réaliste, un pivot (le premier héros n'a pas fonctionné), un éclairage nocturne, un son issu du mouvement, un rendu de 3,5 heures, et une révélation en argile blanche. Chaque étape ci-dessous est un script dans scripts/ qui a été réellement exécuté pour ce plan ; les noms qu'ils contiennent (Drone Empty, Street Asphalt, Building_1...) proviennent de cette scène – renommez-les pour la vôtre.
0. Configuration
- Blender 4.4+ (réalisé sur la 5.2), un GPU pour Cycles, Python 3 +
ffmpegdans le PATH (+numpy,scipypour l'étape sonore). - Pont en direct (Claude pilote Blender ouvert, vous regardez) : dans l'éditeur de texte de Blender, exécutez
tools/bridge.py(écoute sur 127.0.0.1:9876). Ensuite, depuis un terminal :python tools/send.py scripts/06_night.pyoupython tools/send.py -c "print(bpy.data.filepath)". - Définissez
FILM_ROOTsur votre dossier de projet (par défaut~/blender-film) :scene/,render/,audio/,research/y résident.tools/lib.pyest chargé par chaque script (aides :coll(),save(),snap()...). - Travaillez sur des copies. Avant de rejouer ou de réexécuter un script qui modifie les matériaux, copiez le fichier .blend – plusieurs passes ne sont pas idempotentes si une exécution plante à mi-chemin (réexécuter des connexions de nœuds orphelins une fois).
1. Storyboard d'abord
Demandez à Claude un storyboard de 10 secondes avant de toucher à Blender : liste des plans avec leurs durées, caméra par plan, où se trouve le héros, ce que le spectateur ressent. Transformez-le en une planche d'images (n'importe quel modèle d'image) et gardez-la ouverte – chaque décision ultérieure sera vérifiée par rapport à elle.
2. Ville
Utilisez un pack d'actifs urbains que vous possédez (bâtiments, routes, accessoires) ou des actifs CC0 gratuits (Poly Haven). Faites en sorte que Claude dispose une avenue + une intersection le long de l'axe +X à partir d'une vue du dessus (gardez le chemin du héros libre d'accessoires), puis habillez-la : voitures (garées / en mouvement / arrêtées), lampadaires, arbres, bouches d'incendie. Intégrez chaque actif externe dans le fichier .blend.
3. Mouvement issu de la physique, pas de courbes animées manuellement
scripts/01_swing_sim.py simule le mouvement (gravité, traînée aérodynamique, une corde qui ne peut pas s'étirer, des points d'ancrage web issus du storyboard) et cherche les timings des ancrages jusqu'à ce que le chemin traverse la rue. 02_path_empty.py le transforme en courbe de chemin + un empty sur Follow Path avec le décalage clé par image (vitesse réelle, pas linéaire). Le héros est parenté à l'empty, la caméra suit son propre chemin (03_camera.py, + 03b_camera_noise.py pour un léger tremblement).
4. Le héros – et quand pivoter
Le premier héros était un Spider-Man rigide animé avec des clips Mixamo. Cela a échoué : la capture de mouvement est enregistrée au sol, donc dans les airs, il pendait comme une marionnette, les poses étaient rigides, et il était minuscule dans le cadre. Si le personnage avec des membres semble mauvais, échangez le héros – conservez la ville, la caméra et le chemin. Demandez des options à Claude (nous avons eu : faucon, supervoiture, correction manuelle, drone FPV).
Le drone FPV fonctionne parce que rien ne peut sembler rigide. 04_drone_attitude.py le fait voler comme un vrai quadricoptère :
- attitude basée sur la physique : axe de poussée = accélération + gravité, le nez suit la vitesse -> il s'incline dans les accélérations, se penche brusquement dans les virages rapides, relève le nez lors du freinage ;
- coupure de gaz là où le chemin est balistique -> des figures freestyle superposées : power flip, tonneau baril, back flip ;
- freinage avec relevé de nez pour un vol stationnaire, puis un lent lacet pour fixer l'objectif ; hélices qui tournent + bandes LED cyan/magenta.
5. Passage au réalisme (05_realism.py)
Les petits détails que personne ne remarque jusqu'à ce qu'ils manquent : exposition AgX (sans étalonnage), un léger volume de brume, asphalte avec répétition de texture brisée, traces de roues, une traînée d'huile dans chaque voie, des plaques de réparation, de la peinture usée, et de la saleté au pied de chaque mur + légères traînées de ruissellement.
6. Nuit crédible (06_night.py)
Règle : la nuit, le ciel n'éclaire pas la scène – ce sont les lumières pratiques qui le font. Ciel dégradé sombre avec lueur de la ville, lampadaires à LED, fenêtres éclairées, phares et feux arrière de voitures, feux de signalisation rouges, brouillard teinté de bleu avec une touche d'émission, asphalte mouillé avec flaques.
- Première tentative ratée (brouillard orange partout, blocs lumineux au lieu de fenêtres).
- La solution : les textures des façades savent déjà où est le verre – le verre est lisse, les murs sont rugueux. Utilisez la carte de rugosité comme masque des fenêtres (
roughness < 0.3), puis éclairez un sous-ensemble aléatoire par cellule de fenêtre : chaud, froid, éteint.
7. Caméra comme un vrai opérateur (07_shakify_cams.py)
Remplacez le bruit procédural par Shakify (extension gratuite avec mouvement de caméra réel enregistré) sur chaque caméra de plan. Ajoutez des plans rapprochés : une caméra au niveau de la rue ~0,45 m au-dessus de la route mouillée, le drone plonge vers l'objectif et s'arrête juste devant lui. 08_lens_look.py : flare autour des lumières, légère distorsion en barillet + dispersion – pas d'étalonnage couleur, l'aspect vient de l'éclairage.
8. Son conçu à partir du mouvement
Enregistrements CC0 gratuits (BigSoundBank : drone DJI, ville la nuit, trafic sur route mouillée, klaxons, sirène lointaine, vent, pluie sur une flaque, climatiseur). 11_motion_data.py lit l'animation par image (distance du drone / vitesse radiale / côté / gaz, voitures à proximité) dans audio/motion.json ; 12_build_sfx.py pilote le mixage à partir de celui-ci :
- gaz -> régime moteur -> hauteur ; vitesse radiale -> Doppler (la hauteur chute en passant devant l'objectif) ; côté -> panoramique à puissance égale ;
- gain de distance + absorption de l'air, rafales de souffle d'hélice lors des poussées, projections lorsqu'il survole la route mouillée, le climatiseur de toit uniquement sur le plan du toit, passages de voitures à leur approche la plus proche, réverbération de canyon urbain ;
- faites deux versions (nuit calme / chaos urbain total) et choisissez à l'oreille. La version calme a gagné : laissez le héros être la star. Loudness -14 LUFS.
9. Rendu nocturne – en toute sécurité
09_render_opt.py: supprimez les géométries cachées en double (l'actif arbre contenait des copies supplémentaires), utilisez un LOD plus léger pour tout ce qui est loin de chaque caméra de plan, débruiteur GPU. Aucun changement visible.- Rendez d'abord six tests fixes à la qualité finale et vérifiez-les.
10_render_edit.pyne rend que les images que le montage utilise (liste des plans = caméra + plage d'images), reprenable, et écritrender/status.json;tools/render_window.ps1(Windows) affiche un panneau de progression propre : %, temps restant, dernière image terminée.- Après le rendu : vérifiez que chaque image existe, aucune image noire ou corrompue (luminosité par image, sauts uniquement aux coupes prévues), le son correspond au mixage approuvé, loudness prêt pour YouTube. Encodez ensuite seulement + (si vous l'avez demandé) éteignez le PC.
10. La révélation en argile blanche (preuve que c'est de la vraie 3D)
13_aerial_cam.py ajoute une caméra haute au-dessus de l'avenue. Sur une copie fraîche de la scène, 14_clay_build.py transforme tout en argile blanche, fige la caméra + le trafic à une image, et cache chaque pièce jusqu'à son tour, puis la laisse tomber du ciel : les voitures d'abord, puis les bâtiments les plus proches de la caméra en premier, puis la ville lointaine, puis les lampadaires et les bouches d'incendie (~500 pièces). Chaque chute accélère et rebondit légèrement à l'atterrissage. tools/clay_assemble.sh : nuit | coupe franche | construction en argile | un wipe de 0,25 s | nuit, même caméra, même image. Les images fixes comparant argile et nuit font de superbes miniatures.
Leçons qui ont coûté du temps
- Les enregistreurs d'écran capturent du noir si les spécifications de la fenêtre sont erronées – vérifiez la première image enregistrée avant de vous éloigner.
- Enregistrements de la vue : l'aperçu des matériaux nécessite le flou de mouvement désactivé et les volumes déliés, sinon cela bave ; la vue Cycles a besoin d'un débruiteur.
- Les chemins de sortie relatifs dans
blender -bse résolvent à la racine du disque – passez toujours des chemins absolus. - Demandez avant tout long travail GPU ; testez d'abord en basse qualité, la qualité finale en dernier.
Licence : MIT. Maintenu uniquement par Abdullah Formuli. Aucune contribution externe acceptée.