Animationen

Jan-Henrik Lackner

Das Heldenschiff soll nicht nur gut Aussehen und sich durch die Gegend bewegen können, sondern dabei auch noch gewisse Animationen ausüben. Den Grundstein für diese Animation setzen wir in Blender über sogenannte Bones.

Bones

Nachdem unser Heldenschiff mit Blender fertig modelliert ist, müssen wir ihm noch Bones zuweisen um es beweglich zu machen. Dazu erstellen wir im Object Mode mit SHIFT+A unter dem Punkt Armature einen Single Bone. Diesen Bone können wir dann, wie alle anderen Objekte auch, durch Drücken der Taste G an jegliche uns beliebige Stelle bewegen. Ein Bone besteht aus drei Elementen. Eine Kugel am Anfang und Ende und einen Oktaeder, welcher den Hauptteil des Bone bildet. Bei unserem Heldenschiff ist der erste Bone zuständig für den Rumpf des Raumschiffes. Dazu positionieren wir den Bone mittig an das Ende des Heldenschiffes. Da sich die Flügel unabhängig von dem Rumpf bewegen sollen, brauchen diese jeweils einen eigenen Bone. Dazu wählen wir den Endpunkt von dem ersten Bone aus und erstellen durch Drücken der Taste E einen neuen Bone, der mit unserem Ausgangs-Bone verbunden ist. Dies machen wir für jeden Flügel und haben somit drei Bones. Als nächstes müssen wir jedem Bone den Bereich zuweisen, für welchen er zuständig ist. Blender hat dafür eine Funktion, mit welcher für jeden Vertex versucht wird den Einfluss von jedem Bone zu gewichten. Dazu müssen wir unser Heldenschiff und die Bones anwählen, danach mit STRG+P das „Set Parent To“ Menü aufrufen und in diesem „With Automatic Weights“ auswählen. Mit dieser Methode ist allerdings nicht sichergestellt, dass Blender allen Bones die richtige Gewichtung zugewiesen hat. Da unser Heldenschiff nur aus drei Bones besteht haben wir uns dafür entschieden unseren Bones per Hand zuzuweisen, wie stark sie jeden Vertex beeinflussen sollen. Dafür geben wir zuerst den Bones die eindeutigen Namen Xwing, Leftwing und Rightwing. Anschließend wählen wir jeden Vertex aus, welcher den Rumpf des Schiffes bildet und weisen diese einer Vertex Group zu. Diese nennen wir dann Xwing, da dieses der Name des Bone ist, der für diesen Bereich zuständig sein soll. Somit hat jeder Vertex innerhalb der Vertex Group ein Gewicht von eins für den Bone und macht jede Bewegung mit, die der Bone macht. Alle anderen Vertices haben für den Bone ein Gewicht von null und werden von ihm nicht bewegt. Das gleiche Verfahren wenden wir für die Flügel an und haben somit drei Teilbereiche des Raumschiffes, die wir unabhängig voneinander bewegen können. Das Einzige, was uns jetzt noch zu erfolgreichen Animationen fehlt, ist das Anpassen der lokalen Achsen der Bones an die globalen Achsen unseres Objektes. Jeder Bone hat nach Erstellung seine eigene Achsenausrichtung, was es später schwierig macht die richtigen Rotationsachsen zu finden. Damit sich alle Bones an die globalen Achsen halten, wählen wir die Bones aus, drücken STRG+N und wählen „Recalculate Roll“ aus. Danach haben die Bones die gleichen Achsen wie der Rest unseres Raumschiffes und wir können anfangen die Animationen zu erstellen. Blender kann eigenständig Animationen erstellen, allerdings haben wir uns dagegen entschieden und verlagern das Animieren nach Three js.

Animationen in Three js

Zur Implementierung einer .json-Datei mit Bones nach Three js muss man ein SkinnedMesh verwenden. Dieses ist wie ein normales Mesh, nur besitzt es zusätzlich ein Skeleton und Bones, mit denen man die einzelnen Vertices animieren kann. Zur Erstellung benötigt die SkinnedMesh die geometry-Daten, in welchen von jedem Vertex die Koordinaten stehen und die material-Daten, in denen für jedes face angegeben wird, aus welchem Material es gemacht ist. Für jedes material muss dabei skinning auf true gesetzt werden, da nur so Animationen überhaupt möglich sind. Die einzelnen Bones werden in einem Array gespeichert und können über „Objectname.skeleton.bones[]“ einzeln animiert werden.

Ausweichrolle

Die erste Animation die unser Schiff kann ist eine Ausweichrolle. Diese wird durch ein loslassen der Leertaste ausgeführt. Das Schiff dreht sich dabei in jedem Renderdurchlauf in Schritten von 0.2 um die eigene Achse, bis es an der Ausgangsposition angelangt ist. Durch wiederholtes Drücken und loslassen der Leertaste können problemlos mehrere Rollen nacheinander ausgeführt werden. Die Schrittanzahl wurde so gewählt, damit die Drehung flüssig aussieht.

Zurückklappen der Flügel

Die zweite Animation die unser Schiff kann ist ein zurückklappen der Flügel ab einer Geschwindigkeit von 200. Dazu rufen wir die Geschwindigkeit des Schiffes auf und rotieren die Flügel in Schritten von 0.01 pro Renderdurchlauf bis zu einem Wert von 1.75, wenn die Geschwindigkeit 200 überschritten hat. Sobald das Schiff langsamer als 200 fliegt, gehen die Flügel zurück in ihre Ausgangsposition.

results matching ""

    No results matching ""