Was macht Blender-Produktvideo?
Eine Methode und ein funktionierendes Beispiel für einen 45-75-sekündigen Produktfilm, der auch ohne Ton verständlich ist. Ein fotorealistisches Set (Gras, ein Holztor, ein echter Himmel) trägt eine visuelle Metapher. Kurze Texteinblendungen sagen, was die Bilder nicht zeigen können. Der Film endet, indem er sich in ein flaches Gitter farbiger Blöcke verwandelt, die umklappen und die Überschrift sowie den Call-to-Action buchstabieren.
Alles ist Code: das Set, die Animation, die Compositing. Nichts wird in einer GUI geöffnet.
Was in diesem Ordner ist
| Pfad | Beschreibung |
|---|---|
film.json | Farbpalette, Einblendungstexte mit Zeitangaben, Endzeilen. Bearbeite dies zuerst. |
scripts/blender/build.py | Das Set: Hügel mit Haarpartikel-Gras, Tor, matte Blöcke, Himmel, Dunst, Rendereinstellungen. |
scripts/blender/mascot.py | Beispielcharakter: eine Voxel-Eule, klein genug, um auf einem Zaunpfahl zu sitzen. |
scripts/blender/film.py | Einstellungen, Kameras, Animation pro Bild. Rendert plates und layers. |
scripts/post/comp.py | Compositing: Platten + Schichten, 2D-Kamerabewegungen, Text, Grading, das 2D-Blockende, ffmpeg-Codierung. |
assets/ | Zwei Himmelsplatten (golden, bedeckt). Ersetze sie durch eigene. |
examples/ | Bilder aus einem mit dieser Pipeline erstellten Film. |
Der Beispielfilm ist „Das Tor“: Identische Blöcke rollen gleichmäßig durch ein offenes Tor, kommen dann in allen Größen an und schwärmen aus. Das Tor schließt sich und danach werden Blöcke durchgelassen, gezählt oder gestoppt. Betrachte es als Referenz für die Struktur und ersetze dann die Metapher durch eine, die zum Produkt passt.
Arbeitsablauf
Führe diese Schritte in der angegebenen Reihenfolge aus. Hole bei jedem nummerierten Schritt eine Freigabe ein, bevor du Renderzeit für den nächsten Schritt aufwendest.
- Briefing. Ein Satz pro Punkt: Für wen es ist, das Problem, die Wende, das Versprechen, der Call-to-Action. Lege die Länge (45-75 s), das Seitenverhältnis und den Abspielort fest. Gehe von stummgeschalteter Wiedergabe aus.
- Metapher. Wähle ein physisches Bild für das Problem und eine Veränderung dieses Bildes für das Produkt. Ein Ort, ein Hauptrequisit, eine Art sich bewegendes Objekt. Wenn es erklärt werden muss, wähle neu.
- Einstellungsliste. 6-8 Einstellungen. Für jede: Dauer, was sich bewegt, der Einblendungstext (unter 8 Wörter, eine Idee), Kameraposition und Objektiv. Problemakt in kühlem, bedecktem Licht, Produktakt in warmem Licht. Zeige es als Tabelle und hole die Zustimmung ein.
- Charakter (optional). Ein kleiner Protagonist gibt dem Auge eine Ruhepause. Biete 3-4 Optionen als flache Skizzen an, bevor du etwas modellierst. Skaliere es am Set: Es sollte auf das Hauptrequisit passen. Baue es aus einfachen Primitiven (die Eule besteht aus 1 cm Würfeln).
- Set in Code. Passe
build.pyan. Halte die Einheiten in Metern mit dem Hauptrequisit im Ursprung. Rendere pro Einstellung einen Standframe mit wenigen Samples und betrachte jeden, bevor du animierst. - Animation. In
film.pyhat jede Einstellungsetup_X(Objekte einmal erstellen) undupdate_X(t)(alles für Filmschundtplatzieren). Reine Funktionen der Zeit, keine Keyframes, sodass jedes Bild einzeln gerendert werden kann und ein abgestürzter Render an der Stelle fortgesetzt wird, an der er gestoppt wurde. - Zwei-Pass-Render.
python scripts/blender/film.py plates, dann... layers. Siehe unten. - Compositing.
python scripts/post/comp.py out.mp4 --draftfür eine schnelle Überprüfung (jedes 6. Bild), dann ohne--draft. Verwende--only-ending, während du das Ende abstimmst. - Ansehen. Ziehe Standbilder in der Mitte jeder Einblendung und überprüfe: Ist der Text lesbar, ist das, was der Text benennt, im Bild sichtbar, springt etwas zwischen den Einstellungen. Korrigiere und rendere nur die betroffene Einstellung neu (lösche ihre Dateien in
layers/).
Der Zwei-Pass-Render
Fotorealistisches Gras ist langsam. Bewegte Objekte sind günstig. Deshalb werden sie getrennt gerendert.
- Platten. Ein Standbild pro Einstellung des gesamten Sets (Gras, Requisit, Himmel), im Beispiel 1280x720 mit 36 Samples. Eine Einstellung, die das Licht wechselt, erhält zwei Platten, die der Compositor überblendet.
- Schichten. Nur das, was sich bewegt, auf transparentem Hintergrund, mit niedrigerer Auflösung und weniger Samples. Der Boden ist ein Schattenfänger, sodass Objekte immer noch Schatten werfen. Statische Requisiten sind Platzhalter, sodass Objekte korrekt dahinter verlaufen. Der Himmel bleibt für die Beleuchtung erhalten, ist aber vor der Kamera verborgen.
- Compositor. Legt die Schicht über die Platte und simuliert dann Kamerabewegung mit einem langsamen 2D-Push oder -Drift pro Einstellung. Eine fixierte 3D-Kamera ist das, was die Platte wiederverwendbar macht.
Drei Dinge halten die Kosten niedrig:
- Schleifen. Wenn eine Einstellung ein gleichmäßiger Strom ist, mache die Bewegung periodisch (Abstand 0,84 m bei 0,84 m/s wiederholt sich jede Sekunde) und rendere eine Periode.
LOOPinfilm.pyundcomp.pylistet diese Einstellungen auf. - Auf Zweien. Schichten werden jedes zweite Bild gerendert (
STEP = 2) und gehalten. Es liest sich wie Stop-Motion, was zu kleinen klobigen Objekten passt. - Fortsetzen. Jedes Bild wird übersprungen, wenn seine Datei existiert.
Zur Einordnung: Der Beispielfilm (51 s 3D plus ein 12,5 s langes Ende) besteht aus 8 Platten und 456 Schichtbildern. Er wurde nur auf der CPU gerendert.
Das 2D-Ende
comp.py zeichnet es direkt, ohne Blender. Ein 64x36-Raster abgerundeter Quadrate in der Palette fliegt über das letzte 3D-Bild, 6 Spalten breit ein, die Kamera zoomt zurück, bis alle 64 Spalten sichtbar sind, dann klappt eine diagonale Welle jeden Block um (ein vertikales Stauchen auf Null und zurück, mit dem Farbwechsel am Mittelpunkt) zu seiner endgültigen Farbe. Die endgültigen Farben stammen aus einer 3x5-Pixel-Schriftart, sodass die Blöcke zum Text werden.
Grenzen für die Planung des Texts: bis zu vier Zeilen, je 12 Zeichen (11 sieht besser aus), Großbuchstaben, Ziffern und . - / !. Setze sie in film.json unter ending mit einer Zeile im Raster und einem Palettenschlüssel.
Bearbeiten von film.json
palette: sieben Hex-Farben.primary,accent,warm,soft,deep,paper(Hintergrund des Endes und der Standardblock),alarm(die „Etwas stimmt nicht“-Farbe).overlays:[start, end, "text", x]in Filmssekunden.xist optional, eine horizontale Position von 0 bis 1, wenn das Motiv dort sitzt, wo zentrierter Text es verdecken würde. Verwende\nfür zwei Zeilen.ending: die Zeilen, die die Blöcke buchstabieren.font: Pfad zu einer .ttf- oder .otf-Datei für Einblendungen. Fällt zurück auf Inter, DejaVu, Helvetica oder Arial.
Einstellungsdauern stehen in SHOTS am Anfang von sowohl film.py als auch comp.py. Halte sie gleich.
Einrichtung
python -m venv venv && . venv/bin/activate
pip install bpy==5.3.0 numpy pillow # bpy ist das Blender-Rad; benötigt das passende Python
# ffmpeg muss im PATH sein
TEST=1 python scripts/blender/film.py plates # 480x270, ein Bild pro Einstellung, ein paar Minuten
TEST=1 python scripts/blender/film.py layers
python scripts/post/comp.py draft.mp4 --draft
FILM_OUT=/some/dir schreibt plates/ und layers/ dorthin statt in diesen Ordner. FILM_CONFIG zeigt auf eine andere film.json. GRASS_NEAR und GRASS_MID (Prozent) lichten das Gras aus. Mit Desktop-Blender statt dem Rad: blender -b -P scripts/blender/film.py -- plates.
Fallstricke, die echte Zeit kosten
- Grasslänge. Das Setzen des
normal_factoreines Haarpartikelsystems setzthair_lengthzurück. Setzehair_lengthzuletzt, sonst ist jeder Grashalm meterlang und das Feld sieht bewegungsunschärfeverwaschen aus. - Parenting. Parenting verschiebt das Kind, es sei denn, du setzt
matrix_parent_inverse. Gelenkte Teile springen vom Requisit. - Himmel. Ein Himmelsbild auf einem UV-Zylinder verzerrt sich. Verwende gespiegelte Panels auf einem großen Zylinder oder eine flache Ebene, wenn die Kamera nie schwenkt. Behalte eine physische Sonne für das eigentliche Licht.
- Text über dem Motiv. Überprüfe jede Einblendung gegen das darunterliegende Bild. Verschiebe den Text mit
x, bevor du die Kamera bewegst. - Hineinzoomen verdeckt Dinge. Wenn eine Einblendung etwas benennt („Blockiert.“), bestätige, dass der 2D-Beschnitt es noch enthält.
- Farbauswaschung. Bemalte Flächen unter AgX benötigen dunklere Grundfarben als der Marken-Hex. Bildschirme und alles, was exakt als Farbe lesbar sein muss, sollten Emission sein.
- Keine GPU. Kalkuliere nach Bild: time ein Schichtbild, multipliziere es, reduziere dann Auflösung, Samples oder Einstellungslänge, bis es passt. Starte keinen Render, den du nicht zeitlich erfasst hast.
- Container-Neustarts. Lange Renderläufe werden unterbrochen. Die Überspringen-wenn-vorhanden-Prüfung rettet dich.
Was diese Pipeline nicht tut
Sei offen mit der Person darüber, bevor sie es erwartet.
- Bewegte 3D-Kameras. Einstellungen sind fixiert mit 2D-Bewegungen obendrauf. Echte Parallaxe erfordert das Rendern des Sets in jedem Bild, was eine GPU benötigt.
- Bewegungsunschärfe und 24-fps-Bewegung auf Schichten. Erhöhe die Samples, setze
STEP = 1und aktiviererender.use_motion_blur, sobald die Hardware es zulässt. - Objekte sitzen auf dem Gras, nicht darin, weil das Gras in der Platte ist.
- Ton. Der Film ist darauf ausgelegt, stumm zu funktionieren. Füge bei Bedarf im Nachhinein Musik und Effekte hinzu.
- Bildschirme, Benutzeroberflächen oder Logos in der 3D-Welt. Bewusst weggelassen: Produkt-UI in einem fotorealistischen Feld wirkt unecht. Platziere Produktvisualisierungen im 2D-Ende oder einem separaten Schnitt.
Für eine Endqualitäts-Passform
1920x1080 oder höher für beide Pässe, 128+ Samples mit Denoising, GPU-Rendering (OptiX oder Metal), STEP = 1, Bewegungsunschärfe an, und W, H in comp.py entsprechend erhöht. Verteile Bilder nach Bildnummer auf mehrere Maschinen; jedes Bild ist unabhängig.