Charakteranimation durch Motion Capture mittels Microsoft Kinect (Seminararbeit)
1. Gymnasium Weilheim Abiturjahrgang 2015
S E M I N A R A R B E I T
Rahmenthema des Wissenschaftspropädeutischen Seminars:
Programmierung eines Abenteuerspiels
Leitfach: Informatik
Thema der Arbeit:
Charakteranimation durch Motion Capture
Verfasser/in:
Finn Süberkrüb
Kursleiter/in:
Abgabetermin: 4. November 2014
Bewertung Punkte Punkte
schriftliche Arbeit3 - x 3
Abschlusspräsentation2 x 1
Summe:
Gesamtleistung nach § 61 (7) GSO = Summe : 2 (gerundet)
Datum und Unterschrift der Kursleiterin bzw. des Kursleiters
3. Charakteranimation durch Motion Capture
3
5. 3D Charakter 12
5.1 Vorbereitung 12
5.2 Das Mesch 13
• Boxmodeling 13
• Polygon Modeling 13
• 3D Scanner 13
• Modell Generatoren 13
5.3 Rigging 14
5.4 Skinning 14
5.5 Kinect Schnittstelle 14
6. Animation 15
6.1 Vorbereitung 15
6.2 Aufnahme 16
6.3 Nachbearbeitung 16
7. Import in die jMonkeyEngine 17
8. Fazit 17
9. Literaturverzeichnis 19
Bildnachweis 20
4.
5. Charakteranimation durch Motion Capture
2
1. Einleitung
Ein Spiel zu entwickeln heißt, eine Vielzahl verschiedener Aufgaben zu bewältigen.
Von der Spielidee bis zum Endgegner ist es ein langer Weg. Zum einen wird eine
Geschichte aufgebaut und es werden Welten gestaltet. Zum anderen muss das Spiel
noch eine gewisse Logik besitzen. Ganz selbstverständliche Dinge, dass ein Stein
auf den Boden fällt oder ein Mensch gehen kann, müssen dem Programm wie einem
Kind erklärt werden.
Die folgende Seminararbeit beschreibt die Animation von Charakteren mit Hilfe des
Kinect Sensors von Microsoft, welche anschließend in die jMonkeyEngine
eingebunden werden.
Da eine realistische Animation von Bewegungen mindestens genau so viel Zeit in
Anspruch nimmt, wie das eigentliche Gestalten der Figur, habe ich mich mit
Möglichkeiten beschäftigt, diese Arbeit zu beschleunigen. Motion Capturing zur
Animation von 3D Charakteren ist keine Neuheit. In großen Animationsfilmen wird
diese Technik schon sehr viel eingesetzt. Jedoch sind die dort verwendeten Systeme
wegen der Kosten und der benötigten Rechenleistung nur für professionelle
Anwendungen geeignet. Vor einigen Jahren hat Microsoft eine Spielekonsole mit
dem Kinect Sensor zur dreidimensionalen Erfassung des Spielers auf den Markt
gebracht. Viele Hacker haben Kinect für neue Anwendungen erschlossen. Sie kann
inzwischen auch zur Animation am Computer genutzt werden.
Im Folgenden gehe ich auf Kinect und die darin eingesetzten Sensoren, die
dreidimensionale Erfassung, Bildanalyse, die Steuerung und Animation von Objekten
in Blender und den anschließenden Einsatz in der jMonkeyEngine ein.
6. Charakteranimation durch Motion Capture
3
2. Der Kinect Sensor
Microsoft Kinect ist ein Sensor der
ursprünglich zur Steuerung der
Spielekonsole Xbox 360 entwickelt
wurde. Microsoft hat den Sensor
zusammen mit der Firma PrimeSense, einem Entwicklungsunternehmen für drei-
dimensionale Erkennungssysteme entwickelt.
2.1 Technische Daten
Kinect beinhaltet ein Mikrofon Array, eine Farbkamera, einen 3-Achsen
Beschleunigungs- und einen Tiefensensor.
2.2 Array-Mikrofone
Kinect ist mit vier Mikrofonen ausgestattet, die im Sensor verteilt sind. Durch
Laufzeitdifferenzen der Töne vom Sprecher zu den Mikrofonen kann ermittelt
werden, aus welcher Richtung der Ton kommt.
2.3 Farbkamera
In der integrierten Farbkamera arbeitet ein Bayer-Sensor mit einer reellen Auflösung
von 640x480 Pixeln mit 30 fps ([1], Seite 38). Theoretisch wäre eine Auflösung bis zu
1280x1024 Pixel mit 12 fps möglich. Die meisten vorhandenen Treiber für den Kinect
Sensor liefern aber nur die geringere Auflösung. Die mit der Kamera erfassten
Farbbilder können später genutzt werden, um die entstandenen 3D Objekte mit
Texturen zu versehen.
2.4 3-Achsen Beschleunigungssensor - (Gyrosensor)
Im Fuß der Kinect befindet sich ein Servomotor, der die Sensorleiste bei Bedarf um
ca. 27° vertikal schwenken kann. [10, Seite 14] Dadurch wird das Sichtfeld der
Kameras zusätzlich erweitert. Der 3-Achsen Beschleunigungssensor wird genutzt,
um die aktuelle Neigung des Sensors zu ermitteln. Dazu wird aber nur eine Achse
ausgewertet.
7. Charakteranimation durch Motion Capture
4
2.5 Tiefensensor
Der Tiefensensor besteht aus einem Infrarot-Projektor
und einer Infrarotkamera. Als Infrarot-Projektor wird
ein 60 mW starker IR-Laser (Wellenlänge 830 nm) [2]
genutzt. Durch ein diffraktives optisches Element
(Brechungsgitter), das vor dem Laser sitzt, wird ein
definiertes Muster erzeugt. [3] Als Kamera wird ein
Monochromer CMOS Sensor mit vorgesetztem
Bandpass-Filter in der Wellenlänge des Lasers
genutzt. Die Kamera kann einen Sichtwinkel von 57° horizontal und 43° vertikal
abdecken. Nutzbare Daten liefert sie für eine Entfernung zwischen 0,8 m und 3,5 m.
Sie ist in einer Entfernung von 2 Metern in der Tiefe auf 10 mm horizontal so wie
vertikal auf 3 mm genau.
2.6 Chip (PS1080)
Der im Sensor verbaute Chip berechnet die Tiefe für jeden sichtbaren Laserpunkt
und kombiniert sie mit dem RGB Signal. Als Datenstrom liefert der Chip direkt ein
Farbbild mit Tiefeninformation an den Rechner. Der Chip verarbeitet die Daten mit
30fps.
3. Dreidimensionale Erfassung der Kinect
3.1 Messvorgang
Das im Zusammenwirken
von Laser und
Brechungsgitter gebildete
Muster auf einer geraden
Projektionsfläche ist
bekannt. Da es sich um
keine Punkte mit
gleichmäßigem Abstand,
sondern um ein unregelmäßiges Punktemuster handelt, ist es möglich, die
Punktemuster mit der
Infrarotkamera der Kinect
aufgenommen.
8. Charakteranimation durch Motion Capture
5
ursprüngliche Punktpositionen aufgrund des Zusammenhanges im Muster zu
ermitteln. Somit ist man nicht auf die Definition und Identifikation von fixen
Referenzpunkten angewiesen. Sobald sich nun ein Objekt zwischen Hintergrund und
Kinect befindet, verändert sich die Position der Punkte, da sie auf dem Objekt
abgebildet werden. Der Abstand zwischen Sender und Empfänger in der Kinect
sowie die alten und neuen Positionen der Lichtpunkte sind bekannt. Somit kann
durch Triangulation die Tiefe von jedem Punkt berechnet werden.
Der Sensor ist sehr empfindlich gegen Fremdlicht. Um für das menschliche Auge
ungefährlich zu sein, darf jeder einzelne Laserpunkt die Laserschutzklasse 1M mit
einer Leistung von 25 µW nicht übersteigen. Somit sind die Punkte bei Sonnenlicht
für den Sensor kaum noch zu erkennen.
Ein weiteres Problem besteht im Abstand
zwischen Projektor und Kamera. Durch diesen
Abstand gibt es Bereiche hinter den Objekten,
die nicht von dem Laser, aber von der Kamera
erreicht werden. Die Kamera hat in diesen
Bereichen also keine Punkte, über die sie die
Tiefe berechnen könnte. Diese Schatten
erzeugen häufig Fehler, die später in der
Bildanalyse korrigiert werden müssen.
Auch durch eine vollständige Reflexion der Punkte können Fehler entstehen. Dabei
kann ein Punkt, der zum Beispiel auf einen Spiegel trifft, komplett verschwinden oder
an eine andere Stelle wandern.
3.2 Alternativen
Da die Firma PrimeSense ein Patent auf das Verfahren der Tiefen variierenden
Lichtfelder zur dreidimensionalen Erfassung hat, nutzen nur wenige Sensoren diese
Technik.
Jedoch gibt es noch weitere unabhängige Motion Capturing Verfahren.
Eine Möglichkeit sind Sensoranzüge. Dabei werden alle relevanten Punkte des
Menschen mit Bewegungssensoren und Lagesensoren ausgestattet. Dies ist jedoch
mit einem hohen Arbeitsaufwand verbunden und die Aufnahmemöglichkeiten sind
sehr beschränkt. [4, Seite 34]
9. Charakteranimation durch Motion Capture
6
In der Industrie haben sich als Alternative inzwischen optische Lösungen
durchgesetzt. Ein Raum wird mit mehreren Kameras ausgestattet. Jede Kamera hat
einen anderen Winkel zu dem aufzunehmenden Objekt. Die Positionen und
Neigungen der Kameras sind bekannt und werden während der Aufnahme auch
nicht verändert. Nun werden bestimmte Punkte an dem aufzunehmenden Objekt
markiert. Bei der Erkennung von Menschen werden dazu meistens weiße Kugeln
benutzt, die auf einem schwarzen Anzug befestigt sind. Damit kann mit Hilfe von
zwei Kameras, welche das Objekt aus verschiedenen Positionen aufnehmen, die
Kugelposition im dreidimensionalen Raum mittels Triangulation berechnet werden.
Die Positionsbestimmung kann durch weitere Kameras exakter werden. Das
Verfahren wird inzwischen bei vielen professionellen Animationsfilmen eingesetzt.
Dort muss dann nicht jede Bewegung einzeln animiert werden, denn die
Bewegungen des Schauspielers werden einfach auf den zu animierenden Charakter
übertragen. Es ist dennoch sehr viel manuelle Nachbearbeitung notwendig, wenn
beispielsweise ein Mensch für die Animation nichtmenschlicher Objekte genutzt wird.
Damit ein ausgewachsener Mensch einen Hasen steuern kann, bedarf es
komplizierter Umrechnungsverfahren, um realistische Bewegungen zu erzeugen.
[4, Seite 18]
4. RAW Daten Analyse
Die RAW Daten Analyse ist die zentrale Umwandlung der erfassten Daten in die
Positionsdaten der aufgenommenen Person. Ziel ist es, die Position von festgelegten
Körperstellen im dreidimensionalen Raum zu bestimmen. Im ersten Schritt werden
dazu die Kanten im Bild analysiert. Im zweiten Schritt werden bekannte Vorlagen mit
dem Kantenbild abgeglichen, bis die Umrisse des Menschen gefunden wurden. Nun
ist die Position und die Haltung der Person bekannt. Die wichtigen Körperstellen
wurden zuvor auf den Vorlagen markiert und liegen nun auf den entsprechenden
Stellen des Originalbildes. Im letzten Schritt wird die Position und die Tiefe der
Markierungen berechnet. Somit ermittelt man, wo die gesuchte Körperstelle im Raum
liegt.
Dabei wird jedes einzelne Bild, das von der Kinect kommt, analysiert. Der PS1080
Chip, der in der Kinect genutzt wird, liefert einen Stream mit 30fps. Um anschließend
10. Charakteranimation durch Motion Capture
7
auch 30 neue Positionsinformationen pro Sekunde zu erhalten, muss dem Prozess
genug Rechenleistung zur Verfügung stehen.
4.1 Verbindung
Kinect wird per USB an den Computer angeschlossen. Der Standard-Treiber
ermöglicht es Entwicklern jedoch nur über die „Kinect vor Windows SDK“ auf die
Funktionen des Sensors zuzugreifen [10, Seite 30]. Ein passender Open-Source-
Treiber von PrimeSense kann problemlos nachinstalliert werden. Der Treiber enthält
auch direkt die sogenannte Open NI API, über deren Schnittstellen der Zugriff auf die
Daten des Audio-, Video- und Tiefensensors der Kinect erleichtert wird. [6]
4.2 Kanten Analyse
Tiefendaten
Die Daten des Tiefensensors werden als Array mit 307.200
Werten übergeben. Die Tiefenangaben sind Werte
zwischen 0 bis 2047. Diese Werte werden in ein
Graustufenbild umgewandelt und repräsentieren abhängig
von der Tiefe einen Helligkeitswert zwischen 0 und 255.
Da fehlende Werte keine gültige Tiefe besitzen, müssen
diese zuvor auf 0 gesetzt werden.
Der Canny-Algorithmus
Nun beginnen wir mit dem Canny-Algorithmus, oder auch Canny Edge Detector
genannt, die Kanten der Objekte zu analysieren. Dieser Algorithmus wurde 1986 von
John Canny entwickelt und ist heute in der digitalen Bildanalyse weit verbreitet. [7]
Datenvorverarbeitung
Um die Daten für den Canny-Algorithmus brauchbar zu machen, benötigen wir das
Graustufenbild, das aus den Tiefendaten erzeugt wurde. Um zu verhindern, dass
Kanten an Stellen erkannt werden, an denen lediglich ein Bildrauschen vorliegt,
wenden wir einen Gaußschen Weichzeichner auf das Bild an. Wie der Name schon
sagt, beruht dieser Weichzeichner auf der Gauß-Funktion. Dabei werden die
umliegenden Pixel eines Pixels betrachtet und der Wert des in der Mitte liegenden
Pixels in Abhängigkeit davon angepasst. Dabei muss bei der Wahl der
Tiefenbild mit der Kinect
aufgenommen.
11. Charakteranimation durch Motion Capture
8
Rechenparameter darauf geachtet werden, dass nur das Bildrauschen entfernt wird
und keine relevanten Details. [8]
Kanten-Erkennung
Nun wird für jedes Pixel die Kantenrichtung und die
Kantenstärke berechnet. Die Kantenrichtung wird auf 45°
genau berechnet, da jedes Pixel nur 8 angrenzende Pixel
besitzt. Wenn nun alle Kanten markiert sind, werden nur
die stärksten Pixel gesucht und der Rest gelöscht, um alle
Kanten auf die Breite von einem Pixel zu reduzieren (Non-
maximum Suppression). [7]
Zum Abschluss wird durch manuell oder automatisch bestimmte Schwellenwerte
festgelegt, wie detailreich das entstandene Kantenbild sein soll. Dementsprechend
werden schwächere Kanten gelöscht und nur die stärksten Kanten werden auf dem
Bild angezeigt.
4.3 Erkennungsmuster
Nun brauchen wir eine Vorlage von einem Menschen, der
erkannt werden soll. Da ein Mensch jedoch viele Haltungen
einnehmen kann und somit auch viele verschiedene Muster
benötigt werden, um einen Menschen in allen Haltungen
erkennen zu können, reduzieren wir die Suche erst einmal
auf den Kopf. Der Kopf eines Menschen ist von der Form her immer ähnlich. Eine
Kantenzeichnung, die als Vorlage genutzt wird, wird aber immer noch nicht genau so
aussehen wie der Kopf in unserer Kantenzeichnung. Außerdem ist der Kopf eventuell
gedreht oder hat eine andere Größe als die Vorlage.
Deshalb wird zusätzlich ein Verfahren genutzt, dass 1988 von Gunilla Borgefors
entwickelt wurde. [9]
4.4 Distance Transform Pyramid
Tiefenbild nach der
Kanten Erkennung
Vorlage mit Punkten
zum Tracking
mehrere Layer mit
unterschiedlicher
Auflösung übereinander
12. Charakteranimation durch Motion Capture
9
Mit diesem Verfahren ist es möglich, Übereinstimmungen zwischen einer Vorlage
und einem Bild, unabhängig von der Skalierung zu finden. In unserem Beispiel
nutzen wir den vereinfachten Fall, dass wir den Menschen von vorne sehen und
somit nur eine Schablone brauchen.
Auflösungspyramide
Das Kantenbild wird als Grundlage, beziehungsweise als erster Layer genutzt. Nun
wird ein zweites Bild mit geringerer Auflösung erstellt. Dabei werden immer vier Pixel
des unteren Bildes genommen und zusammengefasst. Wenn eins der vier Pixel im
unteren Bild eine Kante war, wird das neue Pixel auch eine Kante. So werden
mehrere Layer übereinander gelegt.
Entfernungsbilder
Nun wird für jeden Pixel eines Layers berechnet, wie weit dieser
von der nächsten Kante entfernt ist. Ist ein Pixel eine Kante,
bekommt dieser die Entfernung null. Dies wird für alle Layer
gemacht.
Übereinstimmung
Auf dem obersten Layer bewegen wir nun die Vorlage über das gesamte Bild und
berechnen jedes Mal die Übereinstimmung. Dabei orientieren wir uns nicht an der
Kante. Wir vergleichen die Entfernungen der Pixel auf dem Kantenbild, die unter der
Kante von der Vorlage liegen. Dort, wo die Entfernungen am ähnlichsten sind, haben
wir eine Übereinstimmung von Vorlage und Original. Nun skalieren wir die Vorlage
an der Stelle so weit, dass sie mit dem Muster auf dem aktuellen Layer
übereinstimmt. Diesen Vorgang wiederholen wir für alle
Layer und haben zum Schluss die Position des Kopfes.
Ausgehend von der Kopfposition kann jetzt der restliche
Körper lokalisiert werden. Um bestimmte Punkte zu
tracken, legen wir uns diese Punkte direkt auf unsere
Vorlagen. Sind die Vorlagen an das aktuelle Kantenbild
angepasst, wissen wir auch, wo der Punkt sich befindet,
den wir tracken wollen. Über die Tiefenangabe und die Position im Bild wissen wir,
Tiefenbild mit überlagerter
Kantenvorlage
13. Charakteranimation durch Motion Capture
10
wo sich dieses Körperteil, zum Beispiel die Gelenke, im dreidimensionalen Raum
befindet.
Dies ist eine Möglichkeit, die RAW Daten der Kinect zu analysieren und festgelegte
Körperstellen im dreidimensionalen Raum zu lokalisieren.
4.5 NI mate
Das Programm NI (Natural Interaction) mate von Delicode kann diesen
Analyseprozess automatisieren. Basierend auf Open NI analysiert es in Echtzeit
Motion Capture Daten von Sensoren wie der Kinect und gibt sie anschließend über
Protokolle wie z.B. OSC (Open Sound Control) weiter.
5. 3D Charakter
Das Erstellen eines dreidimensionalen Charakters für unsere Zwecke kann in vier
Schritte gliedert werden. Die Vorbereitung, das Erstellen des Mesches, die Textur
und das Rigging. Anschließend braucht das Modell noch eine Schnittstelle zu den
Kinect Daten, um den Charakter steuern zu können.
5.1 Vorbereitung
Da das Erstellen eines dreidimensionalen Objekts um eine Dimension komplexer ist,
als das einfache Zeichnen einer Person auf ein Papier, empfiehlt es sich, im
Zweidimensionalen zu beginnen. Wenn feststeht, wie das Modell später aussehen
soll, fängt man mit Zeichnungen oder auch Fotografien aus verschiedenen
Perspektiven an. Diese Vorlagen werden später als Grundlagen für das Modellieren
genutzt. Um die Performance des endgültigen Spieles nicht mit unnötig vielen
Polygonen zu belasten, sollte man schon bei der Vorbereitung darauf achten, nur
das Nötigste zu zeichnen. Unsere zweidimensionalen Vorlagen können wir nun
einfach neben uns legen oder direkt in Blender einbinden. Handelt es sich um eine
Ansicht, die parallel zu einer der Achsen ist, gibt es in Blender die Möglichkeit,
Hintergrundbilder einzubinden. Diese Bilder werden immer dann angezeigt, wenn die
Sicht ebenfalls parallel zu der entsprechenden Achse liegt.
5.2 Das Mesch
14. Charakteranimation durch Motion Capture
11
Zum fertigen Mesch führen wieder zahlreiche unterschiedliche Wege.
Boxmodeling
Bei dieser Methode wird ein einfacher Grundkörper als
Ausgangsform genutzt. Meistens ein Würfel. Durch
verschiedene Operationen wird dieser Körper so weit verändert,
bis das gewünschte Modell entsteht. Diese Methode hat den
Vorteil, auch ohne genaue Planung starten zu können, da das
Modell einfach aus dem Grundkörper entsteht und man sehr
schnell Ergebnisse sieht. [5]
Polygon Modeling
Beim Polygon Modeling wird jedes Polygon einzeln aufgebaut. Für diese Variante
empfiehlt sich eine Vorlage, weil man die einzelnen Punkte genau nach der Vorlage
setzen kann. Um so genauer und detailreicher man Muskeln, Falten und andere
Körperteile nachbaut, desto realistischer wirkt das Objekt im Nachhinein. Dies geht
jedoch schnell zur Lasten der Performance. Daher empfiehlt es sich, gerade für
unsere Anwendung eher an Details zu sparen und diese danach über die Textur
einzuarbeiten. [5]
3D Scanner
Wohl eine der schnellsten und detailreichste Varianten, ein dreidimensionales Abbild
von einem reellen Objekt zu erstellen, ist das 3D Scanning. Diese Technik wäre auch
mit der Kinect möglich. Dabei wird ein Objekt von einem 3D Scanner von allen
Perspektiven aus abgetastet und anschließend automatisch ein Modell erstellt. Diese
Technik liefert allerdings eine große Anzahl an Polygonen und ist daher für unsere
Anwendung nicht zu empfehlen.
Modell Generatoren
Inzwischen wurden auch einige Programme entwickelt, die nach eigenen
Vorstellungen fertige Modelle generieren. Open Source Projekte wie MaceHumen
liefern schnelle und gute Ergebnisse. Für unsere Anwendung sind aber auch diese
Objekte immer noch zu detailreich.
Mesch mit Textur
15. Charakteranimation durch Motion Capture
12
Auf genauere Modellingverfahren und nützliche Funktionen gehe ich hier nicht weiter
ein.
5.3 Rigging
Wenn nur eine Pose gebraucht wird, könnte das Mesch so
genutzt werden wie es ist. Da die Charaktere sich aber im
Spiel bewegen müssen und jMonkey nur Knochen-
Animationen unterstützt, benötigt das Mesch noch ein Skelett.
Das Erstellen eines Skeletts nennt man Rigging. Dazu setzt
man in das Mesch sogenannte Bones, um die Animation zu
erleichtern. Dabei kann man sich an einem menschlichen
Skelett orientieren. Für den Import in jMonkey ist es wichtig,
dass das Rig einen Root Bone besitzt, der mittig am Boden
des Mesches sitzt. An diesem Knochen laufen alle anderen Knochen zusammen.
Somit kann die Position des gesamten Objektes mit dem einen Knochen gesteuert
werden.
5.4 Skinning
Beim Skinning wird das Skelett mit dem Mesch verknüpft. Dazu kann man entweder
dem Skelett das Mesch unterordnen nutzt einen Skelettmodifikator nutzen. Auf beide
Systeme kann man durch Vertex Groups oder die Weight Painting Funktion von
Blender Einfluss nehmen.
5.5 Kinect Schnittstelle
Um die Positionsdaten der Kinect in Blender darzustellen, empfehlen sich Emptys.
Emptys sind keine Geometrien. Es sind lediglich Objekte mit Positions- und
Rotationsinformationen. Emptys werden nicht gerendert und können auch nicht
bearbeitet werden.
Nun benennen wir ein Empty genau so wie einen Punkt aus
dem Motion Capturing. NI mate sendet die Positionsdaten
und den Namen des zugehörigen Punktes über OSC an den
Client. Der Client ist in unserem Fall ein Blender Plugin, das
die Positionsdaten nun auf das gleichnamige Empty
überträgt.
Visualisierung von
Emptys
Skelett / Rig
16. Charakteranimation durch Motion Capture
13
Starten wir das System, können wir über Kinect schon die Emptys in Blender
bewegen.
Nun muss der Charakter noch die Positionen von unseren
Emptys übernehmen. Dazu nutzen wir Bone Constraints.
Die Position des Körpers können wir komplett von einem
der zentralen Emptys übernehmen. Dazu lassen wir die
Position eines zentralen Emptys auf einen Knochen
kopieren, der eine ähnliche Position im Körper hat und
die anderen Knochen beeinflussen kann. Bei allen
anderen Emptys sollte man nicht die gesamte Position
kopieren, da es sonst zu Problemen kommt, wenn die menschlichen Proportionen
nicht mit den Proportionen des Charakters übereinstimmen. Sinvoller ist es, den
Knochen nur in die Richtung des Emptys zu führen. Die Funktion in Blender findet
sich unter den Bone Constrains und heißt „Track To“. Sobald alle notwendigen
Emptys mit dem Charakter verbunden sind, kann das gesamte System gestartet
werden und der Charakter lässt sich über Kinect in Blender bewegen.
6. Animation
Sobald das Live Motion Capturing funktioniert, können wir mit der eigentlichen
Animation beginnen.
6.1 Vorbereitung
Das System sollte in einem Raum installiert werden, in dem der Sensor die besten
Ergebnisse erzielen kann. Das heißt, möglichst wenig Umgebungslicht und vor allem
kein Infrarotlicht. Außerdem sollte genug Platz vorhanden sein. Auch Gegenstände,
die Ähnlichkeiten von menschlichen Mustern aufweisen und stark reflektierende,
bzw. extrem absorbierende Flächen können stören.
Auch die Kleidung spielt eine wichtige Rolle bei der Aufnahme. Weite Kleidung oder
Röcke sind zu vermeiden, da der Computer sonst Schwierigkeiten bekommt, die
genauen Positionen von Gelenken oder Körperteilen zu bestimmen.
Skelett mit Verknüpfung
zu den Emptys
17. Charakteranimation durch Motion Capture
14
Bevor man die Aufnahme beginnt, sollte noch festgelegt werden, was für
Bewegungen aufgenommen werden sollen, um diese anschließend möglichst klar
auszuführen.
6.2 Aufnahme
Für die Aufnahme gibt es zwei verschiedene Wege in Blender. Entweder Schritt für
Schritt oder in einem kontinuierlichen Verfahren alles auf einmal.
Der erste Weg ist, eine Pose einzunehmen und diese Körperhaltung zu speichern.
Anschließend kann man die Pose etwas verändern und die Körperhaltung erneut
speichern. Diese Methode ist sehr zeitaufwändig. Wenn es sich jedoch um eine
Bewegung handelt, die ein Mensch nicht ohne weiteres ausführen kann, empfiehlt
sich diese Methode. Dabei werden nur die wichtigsten Daten gespeichert. Durch die
geringere Datenmenge lässt sich anschließend die Animation leichter bearbeiten. Für
die deutlich schnellere zweite Methode nutzt man die Auto Keyframing Funktion von
Blender. Dabei setzt Blender die Keyframes bei Bewegungen von Objekten oder
Knochen automatisch. Diese Methode speichert meistens sehr viele Keyframes. Es
ist möglich, Bewegungen in Echtzeit aufzunehmen, mit dem Nachteil eines höheren
Bearbeitungsaufwandes bei Anpassungen.
6.3 Nachbearbeitung
Die entstandenen Keyframes könnte man zwar direkt so lassen. Jedoch empfiehlt es
sich, die Daten noch nachzubearbeiten, da Aufnahmefehler vorkommen können.
Dazu können entweder einzelne Keyframes geöffnet und Posen geändert oder mit
dem Graph Editor von Blender Fehler gelöscht oder Bewegungen korrigiert werden.
Sollen mehrere Animationen erstellt werden, speichert man diese zuerst
hintereinander in die Timeline. Nun definiert man den Start- und End-Frame einer
Animation und wandelt sie anschließend über die Bake Action Funktion in Blender in
eine Action um.
7. Import in die jMonkeyEngine
Sind nun alle gewünschten Animationen aufgenommen und bearbeitet, können die
fertigen Blender Dateien ohne Umwege in jMonkey importiert werden. Dazu muss
18. Charakteranimation durch Motion Capture
15
man jedoch die Anforderungen von jMonkey an solche Dateien sehr genau
beachten.
Nach dem Import werden die Dateien automatisch in .j3o Files konvertiert. Diese
Dateien können im jMonkey integrierten Scene Composer geöffnet und bearbeitet
werden. Auch die Animationen lassen sich dort abspielen.
Um unseren Charakter nun in das Spiel zu integrieren, bedarf es noch etwas
Programmcode.
Die jMonkeyEngine besitzt ein eigenes Entity System, zu dem wir unseren Charakter
hinzufügen. Außerdem erstellen wir eine Klasse zu dem Entity, über die unter
anderem die Figur als Form zum Spiel hinzugefügt wird und die Animationen
gestartet und gestoppt werden.
8. Fazit
Zur herkömmlichen Animationsmethode bieten Motion-Capturing-Verfahren viele
neue Möglichkeiten. Jedoch bringen sie auch ihre Schwierigkeiten mit sich. So sollte
man sich einige Fragen stellen, bevor man beschließt, eine Animation per Motion-
Capture-Verfahren aufzunehmen.
Ist die Technik genau genug, um die erwünschten Bewegungen zu erfassen? Nicht
nur die Auflösung kann zu Problemen führen, auch die Verarbeitungsgeschwindigkeit
spielt eine große Rolle. Soll z.B. eine Kampfszene etwas langsamer wiedergeben
werden, um sie dramatischer zu gestalten, braucht man deutlich mehr als 30fps, um
anschließend noch ein flüssiges Bild zu haben.
Kann man die Animation eventuell über einen anderen Weg einfacher realisieren?
Gerade wenn es darum geht, unrealistische Lebewesen zu steuern, muss genau
überlegt werden, wie man die Bewegung des Menschen auf die zu animierende
Figur überträgt.
Welches System ist das Sinnvollste? Kinect reicht sicherlich nur für einen
Hobbyanimator, aber auch bei professionellen Systemen gibt es viele Unterschiede.
Und, und, und, ...
Ob sich Kinect für unser jMonkey Spiel lohnt?
Ja! Denn solange wir das Spiel entwickeln, um dabei etwas zu lernen, lohnt es sich.
Würden wir das Spiel für kommerzielle Zwecke entwickeln, wäre es sicherlich
19. Charakteranimation durch Motion Capture
16
einfacher, auf die Genauigkeit der Animationen zu verzichten und sie einfach per
Hand zu erstellen.
20. Charakteranimation durch Motion Capture
17
9. Literaturverzeichnis
[1] Buch
− Titel: Beginning Kinect Programming with the Microsoft Kinect SDK
− Autor: Jarrett Webb und James Ashley
− Erscheinungsdatum: 6. März 2012
− Verlag: Apress
[2] Webseite
− URL: http://wiki.zimt.uni-
siegen.de/fertigungsautomatisierung/index.php/Einsatzmöglichkeiten_einer_3
D-Kamera_in_der_Produktionstechnik_am_Beispiel_der_Kinect-Kamera
− aufgerufen am: 24.8.2014
[3] Webseite
− URL: http://ntuzhchen.blogspot.de/2010/12/how-kinect-works-prime-
sense.html
− aufgerufen am: 24.8.2014
[4] Buch
− Titel: Understanding Motion Capture for Computer Animation
− Autor: Alberto Menache
− Auflage: Second Edition
− Erscheinungsdatum: 24. Januar 2011
− Verlag: Morgan Kaufmann
[5] Diplomarbeit
− Titel: Realismus bei der 3D-Charaktermodellierung des Menschen
− Autor: Denis Schröder
− URL: https://www.informatik.hu-
berlin.de/forschung/gebiete/viscom/thesis/final/Diplomarbeit_Schroeder_2012
12.pdf
− aufgerufen am: 26.8.2014
[6] Webseite
− URL: http://www.heise.de/newsticker/meldung/Offizielle-Open-Source-Treiber-
fuer-Kinect-1152510.html
− aufgerufen am: 27.8.2014
21. Charakteranimation durch Motion Capture
18
[7] Paper
− Titel: A Computational Approach to Edge Detection
− Autor: John Canny
− Erscheinungsdatum: 6. November 1986 (aktuell: 27.Januar 2009)
− Verlag: IEEE
− URL:
http://www.cim.mcgill.ca/~image529/TA529/Image529_99/assignments/edge_
detection/references/canny-pami.pdf
[8] Masterarbeit
− Titel: Human detection and extraction using kinect depth images
− Autor: Sundar Narayan Krishnamurthy
− URL:
http://nccastaff.bournemouth.ac.uk/jmacey/MastersProjects/MSc11/Sundar/Hu
man_Detection_and_Extraction_using_Kinect_Depth_Images_Thesis.pdf
− aufgerufen am: 27.8.2014
[9] Paper
− Titel: Hierarchical chamfer matching: a parametric edge matching algorithm
− Autor: Gunilla Borgefors
− Erscheinungsdatum: 6. November 1988 (aktuell: 6.August 2002)
− Verlag: IEEE
− URL: http://www.cs.berkeley.edu/~malik/cs294/borgefors88.pdf
[10] Buch
− Titel: Kinect for Windows SDK Programming Guide
− Autor: Abhijit Jana
− Erscheinungsdatum: 26. Dezember 2012
− Verlag: Packt Publishing
Bildnachweis
Alle Bilder, Grafiken und Tabellen von Finn Süberkrüb.
Die Abbildungen unterliegen ausschließlich dem Urheberrecht von Finn Süberkrüb.