Film produit Blender
Méthode et exemple fonctionnel pour un film produit de 45 à 75 secondes qui se lit son coupé. Un décor photoréaliste (herbe, un portail en bois, un vrai ciel) porte une métaphore visuelle. De courts superpositions de texte disent ce que les images ne peuvent pas. Le film se termine en se transformant en grille plate de blocs colorés qui se retournent pour épeler le titre et l'appel à l'action.
Tout est code : le décor, l'animation, le compositing. Rien n'est ouvert dans une interface graphique.
Contenu de ce dossier
| Chemin | Ce que c'est |
|---|---|
film.json | Palette, texte superposé avec minutage, lignes de fin. Modifiez d'abord ceci. |
scripts/blender/build.py | Le décor : colline avec herbe à particules, portail, blocs givrés, ciel, brume, paramètres de rendu. |
scripts/blender/mascot.py | Personnage exemple : une chouette voxel assez petite pour tenir sur un poteau de clôture. |
scripts/blender/film.py | Plans, caméras, animation par image. Rendu des plates et layers. |
scripts/post/comp.py | Compositeur : plaques + calques, mouvements de caméra 2D, texte, étalonnage, fin en blocs 2D, encodage ffmpeg. |
assets/ | Deux plaques de ciel (doré, couvert). Remplacez par les vôtres. |
examples/ | Images d'un film réalisé avec ce pipeline. |
Le film exemple est "La Porte" : des blocs identiques roulent à travers un portail ouvert à un rythme constant, puis arrivent dans toutes les tailles, puis essaiment. Le portail se ferme, et après, les blocs sont laissés passer, comptés ou arrêtés. Traitez-le comme une référence pour la structure, puis remplacez la métaphore par celle qui correspond au produit.
Flux de travail
Faites ces étapes dans l'ordre. Obtenez une validation à chaque étape numérotée avant d'investir du temps de rendu sur la suivante.
- Brief. Une phrase chacun : pour qui c'est, le problème, le tournant, la promesse, l'appel à l'action. Décidez de la durée (45 à 75 s), du format et de l'endroit où il sera diffusé. Supposez une lecture en mode muet.
- Métaphore. Choisissez une image physique pour le problème et un changement de cette image pour le produit. Un seul lieu, un seul accessoire principal, un seul type d'objet en mouvement. Si cela nécessite une explication, choisissez à nouveau.
- Feuille de rythme. 6 à 8 plans. Pour chacun : durée, ce qui bouge, la ligne de superposition (moins de 8 mots, une idée), position de la caméra et objectif. Acte problème sous une lumière froide et couverte, acte produit sous une lumière chaude. Présentez-la sous forme de tableau et obtenez l'approbation.
- Personnage (optionnel). Un petit protagoniste donne à l'œil un endroit où se reposer. Proposez 3 ou 4 options sous forme de croquis plats avant de modéliser quoi que ce soit. Dimensionnez-le par rapport au décor : il doit tenir sur l'accessoire principal. Construisez-le à partir de primitives simples (la chouette fait des cubes de 1 cm).
- Décor en code. Adaptez
build.py. Gardez les unités en mètres avec l'accessoire principal à l'origine. Rendez une image fixe par plan à faible échantillonnage et regardez chacune avant d'animer. - Animation. Dans
film.py, chaque plan asetup_X(créer les objets une fois) etupdate_X(t)(placer tout pour la seconde de filmt). Fonctions pures du temps, pas d'images clés, donc n'importe quelle image peut être rendue seule et un rendu planté reprend là où il s'est arrêté. - Rendu en deux passes.
python scripts/blender/film.py plates, puis... layers. Voir ci-dessous. - Composition.
python scripts/post/comp.py out.mp4 --draftpour une vérification rapide (une image sur six), puis sans--draft. Utilisez--only-endingpour régler la fin. - Regardez. Prélevez des images fixes au milieu de chaque superposition et vérifiez : le texte
est-il lisible, la chose nommée par le texte est-elle visible dans le cadre, quelque chose
saute-t-il entre les plans. Corrigez et re-rendez uniquement le plan concerné (supprimez ses
fichiers dans
layers/).
Le rendu en deux passes
L'herbe photoréaliste est lente. Les objets en mouvement sont bon marché. Donc ils sont rendus séparément.
- Plaques. Une image fixe par plan du décor complet (herbe, accessoire, ciel), 1280x720 à 36 échantillons dans l'exemple. Un plan qui change de lumière reçoit deux plaques que le compositeur fond en fondu enchaîné.
- Calques. Uniquement ce qui bouge, sur fond transparent, à résolution et échantillonnage inférieurs. Le sol est un attrape-ombre pour que les objets projettent encore des ombres. Les accessoires statiques sont des caches pour que les objets passent correctement derrière eux. Le ciel reste pour l'éclairage mais est caché de la caméra.
- Compositeur. Pose le calque sur la plaque, puis simule le mouvement de caméra avec une avance ou un dérive 2D lent par plan. Une caméra 3D verrouillée est ce qui rend la plaque réutilisable.
Trois éléments maintiennent le coût bas :
- Boucles. Si un plan est un flux constant, rendez le mouvement périodique (espacement de 0,84 m à
0,84 m/s se répète chaque seconde) et rendez une période.
LOOPdansfilm.pyetcomp.pyliste ces plans. - Sur deux. Les calques sont rendus toutes les deux images (
STEP = 2) et tenus. Cela donne un rendu de stop motion, qui convient aux petits objets bloc. - Reprise. Chaque image est ignorée si son fichier existe.
Pour l'échelle : le film exemple (51 s de 3D plus une fin de 12,5 s) représente 8 plaques et 456 images de calque. Il a été rendu uniquement sur CPU.
La fin 2D
comp.py la dessine directement, sans Blender. Une grille de 64x36 carrés arrondis dans la palette
vole sur la dernière image 3D sur 6 colonnes de large, la caméra recule jusqu'à ce que les 64 colonnes
soient visibles, puis une vague diagonale retourne chaque bloc (une compression verticale à zéro et
retour, avec l'échange de couleur au milieu) vers sa couleur finale. Les couleurs finales proviennent
d'une police de pixels 3x5, donc les blocs deviennent le texte.
Limites pour planifier le texte autour : jusqu'à quatre lignes, 12 caractères chacune (11 est mieux),
majuscules, chiffres et . - / !. Définissez-les dans film.json sous ending avec une ligne de
grille et une clé de palette.
Édition de film.json
palette: sept couleurs hexadécimales.primary,accent,warm,soft,deep,paper(fond de la fin et bloc par défaut),alarm(la couleur "quelque chose ne va pas").overlays:[début, fin, "texte", x]en secondes de film.xest optionnel, une position horizontale de 0 à 1 pour lorsque le sujet se trouve là où le texte centré le couvrirait. Utilisezpour deux lignes.ending: les lignes que les blocs épellent.font: chemin vers un .ttf ou .otf pour les superpositions. Valeur de repli vers Inter, DejaVu, Helvetica ou Arial.
Les durées des plans se trouvent dans SHOTS en haut de film.py et comp.py. Gardez-les égales.
Configuration
python -m venv venv && . venv/bin/activate
pip install bpy==5.3.0 numpy pillow # bpy est la roue Blender ; nécessite le Python correspondant
# ffmpeg doit être dans le PATH
TEST=1 python scripts/blender/film.py plates # 480x270, une image par plan, quelques minutes
TEST=1 python scripts/blender/film.py layers
python scripts/post/comp.py draft.mp4 --draft
FILM_OUT=/some/dir écrit plates/ et layers/ là-bas au lieu de dans ce dossier. FILM_CONFIG
pointe vers un autre film.json. GRASS_NEAR et GRASS_MID (pourcentage) éclaircissent l'herbe.
Avec Blender de bureau au lieu de la roue : blender -b -P scripts/blender/film.py -- plates.
Pièges qui coûtent du temps réel
- Longueur de l'herbe. Définir le
normal_factord'un système de particules capillaire réinitialisehair_length. Définissezhair_lengthen dernier ou chaque brin mesure des mètres et le champ semble flou de mouvement. - Parentage. Le parentage déplace l'enfant sauf si vous définissez
matrix_parent_inverse. Les parties articulées sauteront de l'accessoire. - Ciel. Une image de ciel sur un cylindre UV s'étire. Utilisez des panneaux en miroir sur un grand cylindre, ou un plan plat si la caméra ne panoramique jamais. Gardez un soleil physique pour la lumière réelle.
- Texte sur le sujet. Vérifiez chaque superposition par rapport à l'image en dessous. Déplacez le
texte avec
xavant de déplacer la caméra. - Les recadrages cachent des choses. Si une superposition nomme quelque chose ("Bloqué."), confirmez que le recadrage 2D le contient toujours.
- Délavement des couleurs. Les surfaces peintes sous AgX ont besoin de couleurs de base plus foncées que le code hexadécimal de la marque. Les écrans et tout ce qui doit être lu comme une couleur exacte doivent être en émission.
- Pas de GPU. Budget par image : chronométrez une image de calque, multipliez, puis réduisez la résolution, les échantillons ou la durée du plan jusqu'à ce que cela rentre. Ne démarrez pas un rendu que vous n'avez pas chronométré.
- Redémarrages de conteneur. Les rendus longs sont interrompus. La vérification skip-if-exists est ce qui vous sauve.
Ce que ce pipeline ne fait pas
Soyez honnête avec la personne à ce sujet avant qu'elle ne les attende.
- Caméras 3D en mouvement. Les plans sont verrouillés avec des mouvements 2D par-dessus. Le vrai parallaxe signifie rendre le décor à chaque image, ce qui nécessite un GPU.
- Flou de mouvement et mouvement à 24 ips sur les calques. Augmentez les échantillons, définissez
STEP = 1et activezrender.use_motion_blurlorsque le matériel le permet. - Les objets reposent sur l'herbe, pas dedans, car l'herbe est dans la plaque.
- Son. Le film est conçu pour fonctionner en silence. Ajoutez de la musique et des effets après si souhaité.
- Écrans, IUs ou logos dans le monde 3D. Volontairement omis : l'IU du produit dans un champ photoréaliste semble faux. Mettez les visuels du produit dans la fin 2D ou un plan séparé.
Pour un rendu de qualité finale
1920x1080 ou plus pour les deux passes, 128+ échantillons avec débruitage, rendu GPU (OptiX ou Metal),
STEP = 1, flou de mouvement activé, et W, H dans comp.py augmentés pour correspondre. Répartissez
les images sur plusieurs machines par numéro d'image ; chaque image est indépendante.