Da grundsaetzlich von allgemeinem Interesse, schreibe ich das Kurz-Tutorial zum Thema Animationen mal hier hinein.
Wir wollen uns in Blender einen kleinen Stromabnehmer bauen und animieren. Grundlegende Blender-Kenntnisse setze ich voraus; man sollte also ohne weiteres aus einem Cube (Basisplatte), zwei Cylinders (Unter- und Oberarm) und einem modifizierten Cube mit Mirror-Modifier (Schleifstueck) Folgendes bauen koennen:
Man sollte gleich darauf achten, dass der Ursprung (Origin) der Objekte im Rotationszentrum liegt. Der Ursprung wird durch einen dicken orangenen Punkt dargestellt, und man kann ihn z.B. mit dem Befehl "Set origin to cursor" im Object Mode an die Position des 3D-Cursors setzen.
Die beiden Planes liegen auf 2.5m und 1.25m Hoehe und dienen nur zum Abmessen. Laut Doku sollte das Schleifstueck in gehobener Position auf 2.5m Hoehe und in gesenkter Position auf 0m Hoehe liegen.
---
Parent-Verknuepfung setzen
Die Teile des realen Stromabnehmers sind miteinander verbunden: Bewege ich nur den Unterarm, bewegt sich der daran befestigte Oberarm und das Schleifstueck auch. Diese Verbindung kann man auch in Blender modellieren und sich die Animation dadurch kraeftig vereinfachen:
Man markiert erst das Objekt "Oberarm" und dann mit gedrueckter Shift-Taste das Objekt "Unterarm". Durch Druecken von Strg+P kommt man ins Menue "Set Parent To", in dem man den ersten Eintrag, "Object", auswaehlt. Unterarm ist nun das Elternobjekt vom Oberarm. Man kann mal probehalber den Unterarm verschieben/rotieren/skalieren: Der Oberarm bewegt sich immer mit.
Genauso setzt man den Parent des Schleifstuecks auf den Oberarm. Die Parent-Beziehung wird im 3D-Fenster durch eine gestrichelte Linie, im Outliner durch eine Baumstruktur dargestellt:
Alle Objekte, die Kinder haben, werden spaeter in eine separate Datei exportiert. Daher sollte man darauf verzichten, den Unterarm als Kind der Basisplatte zu definieren, weil letztere nicht animiert ist und damit eine unnoetige Datei erzeugt wuerde.
---
Keyframes erzeugen
Blender macht Animationen grundsaetzlich aehnlich wie Zusi: Man gibt die Objektpositionen zu bestimmten Zeitpunkten vor (sog. Keyframes); dazwischen wird interpoliert. Als Animationsmoeglichkeiten in Zusi sind vorhanden: Rotation eines Objektes um den Ursprung, Verschieben eines Objektes und eine Dimmung (letztere wird aber noch nicht exportiert).
Der Animationsbereich fuer die meisten Zusi-Animationen ist vom Zeitpunkt t=0 bis t=1, mit beliebig vielen Zwischenpunkten. Blender ist eher auf den Filmbereich ausgerichtet und zaehlt in ganzen Frames. Man sollte sich also eine geeignete Abbildung von Blender-Frames auf Zusi-Frames ueberlegen, sodass die Zwischenframes ganzzahlige Nummern bekommen koennen.
Um den Animationsbereich von 0 bis 1 einzustellen, holt man sich eine "Timeline"-Ansicht auf den Schirm. Dort kann man unter "Start" und "End" die Frames einstellen, die den Zusi-Zeitpunkten 0 und 1 entsprechen sollen. Achtung: "Start" steht standardmaessig auf 1, das sollte man unbedingt auf 0 aendern, um Verwirrungen zu vermeiden. Hier nehmen wir mal den Bereich 0 bis 100:
Mit dem Eingabefeld rechts von Start/End oder mit den Pfeiltasten links und rechts stellt man den aktuellen Frame ein. Er wird im 3D-Fenster links unten neben dem Namen des aktiven Objekts angezeigt, etwa "(5) Oberarm", wenn man bei Frame 5 ist.
Unser Modell haben wir im gehobenen Zustand gebaut. In Zusi entspraeche das der Animationszeit 1. Wir sagen Blender also, dass der aktuelle gebaute Zustand fuer Zeit 1 (oder Frame 100) gelten soll. Wir stellen Frame 100 ein, markieren im Object Mode den Unterarm und druecken die Taste "i".
Es oeffnet sich ein verwirrend langes Menue, denn Blender wuesste gerne, was wir eigentlich animieren wollen. Uns geht es hier ausschliesslich um die Rotation, deshalb waehlen wir "Rotation". Weitere sinnvolle Moeglichkeiten waeren "Location" (Verschiebung) und "LocRot" (Verschiebung und Rotation).
Im Properties-Fenster wird die Rotation nun gelb hinterlegt dargestellt. Das heisst, dass fuer diesen Frame ein Rotations-Keyframe existiert. Bei anderen Frames ist der Hintergrund gruen, das steht fuer "interpolierter Zustand".
Das Einfuegen des Rotations-Keyframes bei Frame 100 wird jetzt nochmals fuer den Oberarm wiederholt. Das Schleifstueck lassen wir momentan aussen vor.
Nun geht es daran, den Keyframe fuer die gesenkte Position des Stromabnehmers zu erstellen. Wir stellen die Frame-Nummer 0 ein, stellen sicher, dass wir im Object Mode sind, und rotieren Unter- und Oberarm so um die X-Achse, dass der Stromabnehmer gesenkt ist. So koennte das aussehen:
Wenn wir jetzt ein anderes Frame einstellen, gehen die Aenderungen sofort verloren. Wir muessen also Blender wieder sagen, dass wir diesen Zustand fuer Frame 0 beibehalten wollen. Wieder wird per Taste "i" je ein Keyframe fuer den Unterarm und den Oberarm eingefuegt.
Jetzt kann man die Frames mit den Pfeiltasten durchspulen und sieht, wie der Stromabnehmer sich sanft hebt. Blender interpoliert standardmaessig nicht wie Zusi linear, sondern mit Bezier-Kurven; in Zusi ist die Animation also nicht ganz so sanft. Die Blender-Interpolation kann man auch auf Linear aendern, das zu erklaeren ginge jetzt aber zu weit.
---
Einschraenkungen
Unser Schleifstueck haengt beim gesenkten Stromabnehmer noch ein wenig durch. Wir haetten gerne, dass es sich unabhaengig von der Stromabnehmerposition immer in der Waagerechten befindet. (Das ist vermutlich nicht ganz vorbildgerecht, eignet sich hier aber zur Demonstration.)
Das Schleifstueck bewegt sich zusammen mit dem animierten Oberarm. Wir wollen nun die Rotation um die X-Achse deaktivieren bzw. verhindern, dass diese Rotation durch die Oberarm-Animation beeinflusst wird. Das geht ueber ein sogenanntes "Constraint", also eine Einschraenkung. Hier ist "Limit Rotation" das richtige.
Constraints stellt man in dem Reiter mit den Kettengliedern zwischen Objekteigenschaften und Modifiers ein. Ueber Add Object Constraint -> Limit Rotation fuegt man ein neues Constraint hinzu und aktiviert dann "Limit X". Sofort sollte das Schleifstueck stur in horizontaler Ausrichtung verharren, egal wie sich der Oberarm dreht. (Das bezieht sich nicht nur auf Animationen; auch manuell kann man das Schleifstueck jetzt nicht mehr in X-Richtung rotieren.)
In Zusi wird das spaeter durch eine Rotationsanimation des Schleifstuecks in gegenlaeufiger Richtung zur Oberarm-Animation geloest. Hier nimmt einem der Exporter also viel Arbeit ab.
---
Zusi-spezifische Eigenschaften
Unser kleiner Stromabnehmer ist fertig animiert. Um ihn korrekt nach Zusi zu exportieren, muessen wir noch den Animationstyp auf "Stromabnehmer A" einstellen, damit der Simulator weiss, wie er die Animation ansteuern soll. Spaetestens hier muss der LS3-Exporter installiert sein, denn er stellt die notwendigen Eingabefelder in Blender bereit. In den Szeneneigenschaften (dritter Karteireiter von links) findet sich ein Abschnitt zu Animationen:
In der oberen Liste sind alle Animationen aufgelistet. Hier habe ich es irgendwie geschafft, fuer den Unterarm gleich zwei Animationen zu erzeugen. Im Outliner sieht man unter "Animation", welche die richtige ist (hier: UnterarmAction.001).
Man markiert also alle Actions nacheinander und stellt jeweils "Animation type" auf "Pantograph A" ein. Das Feld zur Animationsgeschwindigkeit ist fuer Stromabnehmer irrelevant und wird deshalb ausgegraut.
---
Export
Die Animationen nach Zusi transportieren kann aktuell nur der LS3-Exporter. Die Animationen werden nur exportiert, wenn das Haekchen bei "Export animations" gesetzt ist. Zu beachten ist, dass neben der im Exportdialog angegebenen Datei (z.B. Stromabnehmer.ls3) auch noch zwei weitere Dateien mit dem Zusatz _Unterarm bzw. _Oberarm angelegt werden (und ggf. ohne Rueckfrage ueberschrieben werden). Das ist der Dateistruktur von Zusi geschuldet.
---
Video
Ich habe die hier beschriebenen Arbeitsschritte
auf Video aufgenommen (Achtung: Bitte auf "Download" klicken; die Qualitaet im Dropbox-Player ist unterirdisch). Wem es zu schnell geht, der kann in VLC die Abspielgeschwindigkeit verlangsamen
Man sieht auch sehr schoen, was passiert, wenn der Objektursprung nicht mit dem Rotationszentrum uebereinstimmt. Hier habe ich das Schleifstueck im Edit Mode verschoben, dadurch blieb der Objektursprung da, wo der 3D-Cursor beim Erzeugen des Objekts war, und die Rotation spaeter sah komisch aus.
Zum Setzen des Ursprungs benutze ich folgende Befehlsabfolge: Edit Mode -> Vertices selektieren, deren Schwerpunkt der gewuenschte Ursprung ist -> "Snap cursor to Selected" -> Object Mode -> Set Origin to 3D Cursor.
Gruesse
Johannes