Animieren einer Cut-out-Figur
Rezepte für eine Figur, die aus einem Rig von Teilen besteht: einem Körper, einem Kopf, zweiteiligen Armen und Gesichts-Overlays (Mundformen und ein Lidschlag), die auf der eigenen Leinwand des Kopfes gezeichnet sind. Sie werden im Build-Schritt in die Schleife von montagent eingefügt; lade montagent zuerst, falls du es noch nicht getan hast. Für einen Kurzfilm, in dem eine Figur eine Zeile spricht, öffne die Charakter-Kurzfilm-Struktur, bevor du planst.
Was das Rig bereitstellen muss
Lies zuerst die Beschreibung des Rigs. Du benötigst für jedes Teil: sein Bild, seine Größe, seinen Drehpunkt (das Gelenk, um das es sich dreht, als Punkt in der Originalzeichnung), sein Elternteil und die Reihenfolge, in der die Teile von hinten nach vorne gezeichnet werden. Außerdem benötigst du eine Tabelle, die die Visem-IDs der Stimme den Mundformen zuordnet. Das Bild jedes Teils muss so aufgepolstert sein, dass sein Drehpunkt exakt die Mitte seiner Leinwand ist. Die Gesichts-Overlays teilen sich die Leinwand und den Drehpunkt des Kopfes.
Wenn die Vorgabe nur eine einzelne Zeichnung ohne Teile oder Drehpunkte liefert, kannst du kein Rig blind ausschneiden. Informiere den Benutzer und bitte um ein vorgeschnittenes Rig.
Das Rig backen
Montagent hat keine Parent-Kind-Beziehung, und ein Element kann sein Bild nicht ändern. Daher wird eine Figur gebacken: Das gebündelte Skript berechnet für jedes Bild die Position und Rotation jedes Teils auf dem Bildschirm aus seinen Eltern und schreibt jede Mundform und jeden Lidschlag als eigenes Element, das für seine eigene Dauer mit der Transformation des Kopfes angezeigt wird. Schreibe dies nicht selbst.
python3 scripts/bake_rig.py <projekt> <rig> <spezifikation> gibt das Projekt mit einer Spur pro Teil aus. Führe es mit --help für die Spezifikation aus: wo die Figur steht, benannte Posen, die Bewegungen dazwischen, Schwünge, Hüpfer, die Stimme und ihre Visem-Datei sowie die Lidschläge. Führe es nach jeder Änderung der Spezifikation erneut aus. Es ersetzt nur die Spuren, die es geschrieben hat. Bewahre die Spezifikation neben dem Projekt auf: Sie ist die wahre Quelle der Figur.
Lies seinen Bericht. Er listet jede zusammengeführte Mundspanne, die größte Lücke zwischen einem Kind und seinem Elternteil über jedes gezeichnete Bild sowie die zu betrachtenden Zeitpunkte auf: die Ankunft jeder Bewegung und die extremen Winkel jedes Gelenks. Positionen sind ganze Pixel, daher ist eine Lücke von bis zu etwa 1,5 px auf Rundung zurückzuführen, die von den runden Gelenken verdeckt wird. Eine größere Lücke bedeutet, dass die Drehpunkte des Rigs falsch sind.
validate meldet R-EASE-INERT für jede Pose, die die Figur hält, und N-TRACK-GAP für die Mund- und Lidschlag-Spuren zwischen den Spannen. Beides ist zu erwarten (siehe Leitfaden zu den Befunden).
Das gebackene Ergebnis sieht so aus: Jeder Teil ist auf seinem Drehpunkt zentriert, mit Keyframes nur dort, wo er sich bewegt, und jedes Mund- oder Lidschlag-Element kopiert die Transformation des Kopfes über seine Spanne.
{
"frame": {"width": 640, "height": 360}, "fps": 30, "background": "#2E3440", "duration": 2000, "output": "out/gebacken.mp4",
"spuren": [
{"name": "set", "layer": 0, "elements": [
{"id": "set", "type": "image", "start": 0, "end": 2000, "source": "media/still.png", "x": 0, "y": 0, "origin": "top-left", "width": 640, "height": 360, "fit": "literal"}
]},
{"name": "puppe-rumpf", "layer": 10, "elements": [
{"id": "puppe-rumpf", "type": "image", "start": 0, "end": 2000, "source": "rig/teile/rumpf.png", "x": 320, "y": 330, "origin": "center", "fit": "literal", "width": 80, "height": 280}
]},
{"name": "puppe-kopf", "layer": 12, "elements": [
{"id": "puppe-kopf", "type": "image", "start": 0, "end": 2000, "source": "rig/teile/kopf.png", "x": 320, "y": 190, "origin": "center", "fit": "literal", "width": 90, "height": 160, "rotation": [{"t": 0, "v": 0}, {"t": 500, "v": 6.0, "ease": "linear"}, {"t": 1000, "v": 0.0, "ease": "linear"}]}
]},
{"name": "puppe-mund", "layer": 13, "elements": [
{"id": "puppe-mund-0", "type": "image", "start": 400, "end": 700, "source": "rig/teile/mund_offen.png", "x": 320, "y": 190, "origin": "center", "fit": "literal", "width": 24, "height": 60, "rotation": [{"t": 400, "v": 4.8}, {"t": 500, "v": 6.0, "ease": "linear"}, {"t": 666, "v": 4.0, "ease": "linear"}]}
]}
]
}
Rezepte
Jedes Rezept gibt Ausgangsbereiche an, keine endgültigen Antworten. Jedes endet mit einem Look-Schritt: Lade montagent-craft, dann schau an der Stelle nach, die der Schritt angibt, bevor du fortfährst.
Winkel sind in Grad von der gezeichneten Ruhepose, jeweils relativ zum Elternteil, und positiv dreht im Uhrzeigersinn auf dem Bildschirm. Ein Arm auf der rechten Seite des Betrachters hebt sich also mit negativen Winkeln, einer auf der linken Seite mit positiven.
Im Set aufstellen
- Hintergrund: Ein vollformatiges Set-Bild mit
origintop-leftbei 0, 0, in der Größe des Frames, auf der untersten Ebene. Setze denoriginexplizit. - Füße auf dem Boden: Die Wurzel des Rigs (der Körper, der sich an den Füßen dreht) geht dorthin, wo der Boden auf die Schattenlinie der Wand trifft, oder ein wenig davor. Bei einem 1080 hohen Set liegt die Oberkante des Bodens normalerweise bei 80–85 % der Höhe, platziere die Füße also 5–10 % darunter.
- Größe: Die Figur 55–75 % der Frame-Höhe, eingestellt durch den Maßstab der Spezifikation (Frame-Pixel pro Zeichen-Pixel). Miss die sichtbare Figur, nicht die aufgepolsterte Zeichnung: Die Höhe der Zeichnung mal dem Maßstab überschätzt sie.
- Platzierung: Außermittig auf der Seite gegenüber ihrem Requisit oder ihrer Karte, ein Drittel des Weges hinein, es sei denn, sie steht allein.
- Look:
framezu einem Ruhemoment und überprüfe, ob die Füße auf dem Boden sitzen, nicht darüber schweben oder darin versinken, und dass der Kopf mindestens 5 % Abstand zur Oberkante des Frames hat.
Auftritt: Hüpfer
- Hüpfer: 2–3, jeder 300–450 ms, die immer niedriger werden: der erste 8–12 % der Körpergröße der Figur, der letzte 4–6 %. Die horizontale Bewegung deckt die gleiche Spanne mit
ease-outab, sodass der letzte Hüpfer sanft landet. - Pose: Arme unten während des Hüpfens. Lande auf einem gezeichneten Frame und halte 150–300 ms vor der ersten Geste.
- Timing: Beende den Auftritt bevor die Stimme beginnt, mit mindestens 200 ms Puffer.
- Look:
frame --from --to --keyframesüber den Auftritt. Überprüfe, ob die Füße den Boden bei jedem Landezeitpunkt berühren und kein Teil hinter dem Körper zurückbleibt oder vorausspringt.
Gesten
Eine Geste ist eine benannte Pose sowie die Bewegungen hinein und hinaus. Gib jeder Bewegung eine Vorlaufzeit (die in der Spezifikation), damit die Pose gehalten wird, bis sie startet.
- Arme runter: Aus einer Ruhepose mit ausgestreckten Armen drehe jeden Oberarm 40–55° zum Körper hin und den Unterarm weitere 5–15°.
- Winken: Der Oberarm 40–50° aus der Ruheposition gehoben, zur Seite, und der Unterarm weitere 25–35° nach oben. Schwinge den Unterarm vom Ellenbogen aus 15–20° in jede Richtung, mit einer Periode von 350–450 ms, für mindestens 2 volle Schwünge (800 ms oder mehr). Hebe ihn höher und die Hand geht am inneren Extrem des Schwungs hinter den Kopf: Der Kopf wird über den Armen gezeichnet.
- Auf etwas zeigen: Der Oberarm nahezu horizontal in Richtung des Ziels (10–25° über der Ruheposition für einen ausgestreckten und nach unten gerichteten Arm) und der Unterarm innerhalb von 20° der Geraden, sodass die Hand auf die nahe Kante des Ziels zeigt. Komme 1–3 Frames vor dem Wort an, das es benennt.
- Jubeln: Beide Oberarme 40–50° nach oben und die Unterarme weitere 20–30° nach oben. Beuge sie weiter und die Hände verschwinden am Höhepunkt des Überschwingers hinter dem Kopf.
- Bewegungen: In über 250–400 ms. Komme auf der Überschwinger-Bezier-Kurve
[0.34, 1.56, 0.64, 1]an und gehe mitease-in-outzurück zur Ruheposition. Für den Durchschwung füge eine zweite Bewegung hinzu, die nur den Unterarm betrifft, 2–4 Frames nach der des Oberarms. - Niemals eingefroren: Der Kopf neigt sich bei betonten Wörtern um 2–5°, als kurzer Schwung oder eine Hin- und Herbewegung über 250–400 ms. Eine Figur, die eine Pose länger als 1,5 s ohne Bewegung hält, wirkt wie ein Standbild.
- Look: Für jede Geste
frame --atdie Zeitpunkte, die der Bake-Bericht für die Extreme dieses Gelenks auflistet. Überprüfe, ob die Hand frei von Kopf und Frame-Kante ist und die Pose ohne Ton als die Geste erkennbar ist. Dannframe --cropan der Schulter und dem Ellenbogen in der am weitesten gehobenen Pose, im wahren Maßstab, und überprüfe auf eine Lücke oder ein loses Teil.
Lippensynchronisation aus Visemen
Der Bake schreibt den Mund aus der Visem-Datei der Stimme. Jede Visem-ID wird durch die Tabelle des Rigs einem Mund zugeordnet, und Stille ist der Schnabel oder die Lippen in Ruhestellung, ohne Overlay. Benenne das Stimmelement und die Visem-Datei in der Spezifikation. Der Mund folgt dann dem Start und dem Quellbereich dieses Elements. Wenn du die Stimme verschiebst und erneut bäckst, bleibt die Synchronisation erhalten.
- Kürzeste Form: 2 Frames. Der Bake fügt eine kürzere in die vorherige Form ein und meldet jede Zusammenführung. Ein Dutzend Zusammenführungen in einer 6 s Zeile ist normal.
- Vorlauf: 0 ms. Wenn der Mund beim Betrachten des Renderings zu spät wirkt, führe einen Frame vor (33 ms bei 30 fps), niemals mehr.
- Timings: Untersuche die Sprachdatei. Wenn ihre Länge von der angegebenen Dauer der Visem-Datei abweicht, vertraue der Untersuchung.
- Look:
query --atdie Mitte von drei gesprochenen Wörtern und überprüfe, ob jeweils ein Mundelement aktiv ist. Dannquery --atdie Mitte der längsten Pause und nach dem Ende der Zeile und überprüfe, ob keines aktiv ist.
Lidschläge
- Länge: 3 Frames (100 ms bei 30 fps), höchstens 4.
- Rhythmus: Alle 2–4 s, unregelmäßig, niemals auf einem Beat. Setze einen direkt nachdem eine große Bewegung gelandet ist und einen in einer Pause der Zeile. Mindestens 2 in 8 s.
- Vermeide: Einen Lidschlag im gleichen Frame wie die Ankunft einer Geste, da dies die Ankunft verdeckt.
- Look:
frame --atden mittleren Frame eines Lidschlags und überprüfe, ob die geschlossenen Augen genau auf dem Kopf sitzen, in seiner Neigung.