Interaktive Mediensysteme SS11

Anwendung zur Veranstaltung Interaktive Mediensysteme

 

Beschreibung

Zusammen in einem Team wurde in diesem Projekt eine hochinteraktive und verteilte Anwendung entwickelt. Es wurde ein 3D-Zauberspruchszenario mit Hilfe und Erweiterung der OgreBasisArchitektur erstellt, indem der Benutzer von einem Helferlin in einem Zauberland geführt wird. Der Benutzer steuert den Spieler mit Hilfe des Wii-Kontrollers. Zaubersprüche werden über eine Gestenerkennung und Spracherkennung validiert und ausgeführt. Das Helferlein gibt dem Benutzer Tips und reagiert auf ihn dynamisch.

 

Demonstration:

Architektur des Projektes:


Beschreibung des Ablaufs

Die Anwendung ist auf zwei Computern verteilt, da es bei einem Rechner warscheinlich zu einer Überlastung von Rechenkapazitäten käme. Beide Rechner sind über LAN miteinander verknüpft. Der Benutzer muss zunächst den Computer A mit der Anwendung starten. Die Steuerung des Spieler erfolgt über den Wii-Controller, dieser muss in der linken Hand gehalten werden, da das rechte Handgelenk von der Kinect zur Gestenerkennung benötigt wird. Beim Laden des Szenarios wird der Wii-Controller und die Kinect erkannt. Anschließend wartet die Anwendung auf eine Verbindung zum Computer B. Der Benutzer muss zuerst auf dem Computer B zweimal DialogOS mit einem Szenario zur Spracheingabe und Sprachsynthese starten. Zuletzt wird eine Java-Client Anwendung gestartet, welche zugleich den SceneMaker hochfährt. Wenn eine Verbindung da ist, erfolgt in der 3D-Simulation zunächst eine kurze Einführung in das Programm. Die Anwendung sendet Kommandos über den Server an den Java-Client. Dieser leitet die Kommandos an den SceneMaker. Im SceneMaker wird die Logik und das Verhalten des Helferleins für die Simulation gesteuert. Der SceneMaker leitet Kommandos weiter an DialogOS zur Sprachsynthese, damit das Helferlein das Intro spricht und zugleich leitet es ein Kommandos an die Anwendung, wann eine “Sprechanimation” vom Helferlein ausgeführt werden soll und wann der Text zu ende gesprochen wurde. Nun kann der Spieler mittels des Wii-Controllers den Spieler aus der “Ich-Perspektive” steuern. Das Helferlein befindet sich immer in der nähe zum Spieler und schwebt in der Luft. Wenn dem Helferlein langweilig wird, macht es sich durch lustige Geräusche wie zum Beispiel “Gäähn” bemerkbar. Der Spieler muss zunächst Zaubersprüche erlernen. Dazu muss er drei Steinrunen anfixieren. Daraufhin wird über einen Schweif das entsprechende Symbol vorgezeichnet. Während des Spielverlaufs wechseln sich Tag und Nacht ab. Die folgenden Zaubersprüche wurden bisher umgesetzt:

  • Helferlein zeigen
  • Helferlein verstecken
  • Reducio: Bäume verkleinern; Geste: Kreis
  • Mobilcorpus: Schwerkraft umkehren; Geste: X
  • Demobilcorpus: Schwerkraft normalisieren; Geste: L
  • multo die: von Nacht zum Tag simulieren
  • multa nocte: von Tag zu Nacht
  • Aspectus: Kisten erscheinen lassen; Geste: Dreieck
  • Alohomora: verschlossene Türen knacken; Geste: Mondsichel

Um in der Welt weiter zu kommen muss er zunächst mit Hilfe eines Zauberspruchs Bäume vor einem Zugang verkleinern damit er passieren kann. Dazu hält er die A-Taste des Wii-Controllers und führt mit der rechten Hand eine Kreisbewegung durch, dabei wird ein Schweif nachgezogen um die Geste besser zu visualisieren. Danach lässt er die A-Taste los. Dies veranlasst eine Generierung eines binäres Bildes mit den Bildinformationen der Geste. Das Bild wird an OpenCV weitergeleitet. OpenCV führt eine Bildererkennung durch und liefert das Resultat. Anschließend spricht der Benutzer den Zauberspruch “Reducio” in ein Mikrophon. DialogOS versucht den Spruch zu erkennen und liefert das Resultat an den SceneMaker. Der SceneMaker wiederum führt die Logik aus und schickt ein Kommando an die Anwendung. War der Zauberspruch erfolgreich wird in der Simulation ein Baum so lange verkleinert, bis er nicht mehr sichtbar ist. Zugleich wird ein Strompartikeleffekt ausgeführt und eine passende Audiodatei über OpenAL abgespielt. Danach erfolgt ein Feedback vom Helferlein. Die resultierende Scene wird in Echtzeit über die Ogre3D-Engine gerendert und auf dem Bildschirm ausgegeben.

 

Beschreibung der Komponenten und des Ablaufs

OgreBasisArchitektur

Eine Beschreibung kann hier nachgelesen werden. Die OgreBasisArchitektur wurde durch viele Funktionalitäten und Komponenten erweitert. Zu diesen zählen:

  • RT Shader System: Neuartiges Echtzeitshadersystem von Ogre zur effizienten Berechnung von Normalmaps und Parallel-Split Shadow Mapping (Abk. PSSM)
  • KinectManager: Zur Erhaltung von Gestenkoordinaten
  • ParticleUniverse: Für eindrucksvolle Partikeleffekte

Ogitor und Exportierung

Der (Ogitor) ist ein frei verfügbarer Leveleditor um den Design von 3D-Umgebungen zu vereinfachen. Mit ihm wurde eine 3D-Welt erstellt und im XML-Format exportiert. Diese wird über die OgreBasisArchitektur in der Interaktive Mediensysteme Anwendung geladen. Außerdem sind in der XML-Datei Informationen für physikalische Effekte und Kollisionskörper enthalten. Mittels der NewtonDynamics-PhysikEngine werden der Anwendung Physik eingehaucht.

Interaktive Mediensysteme Anwendung

Es wurde ein Simulationszustand entwickelt der nach den Menüeinstellungen geladen wird. In dieser Komponente erfolgt die Berechnung der Benutzersteuerung, Logik, Physik, Audio und Rendern der Szene. Der Benutzer wird über den Wii-Controller physikalisch gesteuert. Er kann sich frei bewegen und Sprungaktionen ausführen. Zudem wird ein Helferlein immer in der Nähe des Spieler dynamisch bewegt und animiert. Der Spieler kann Runen fixieren. Dabei wird ein Raycast auf Polygonebene ausgeführt und wenn die Rune erkannt wurde, wird für das entsprechende Symbol auf der Rune ein Schweif ausgeführt. Das Problem beim Schweif war, dass dieser ein 3D-Objekt ist, er jedoch im 2D-Maus Koordinatensystem gezeichnet werden soll. Daher musste eine Funktion geschrieben werden, welche abhängig von der Spielerposition und Orientierung über ein Kameraray Projektion auf eine unsichtbare Plane die 3D-Koordinaten in ein 2D-Koordinatensystem umwandelt. Der Spieler kann wie zuvor beschrieben über Sprache und Gestik Zaubersprüche ausführen. Er kann somit physikalische Bäume verkleinern, sodass die Kollisionshülle irgendwann entfernt wird. Des Weiteren kann er verschlossene Türen knacken wenn er sich vor eine Tür befindet. Die Türen sind über Joints an Säulen geknüpft. Wenn der Zauberspruch erfolgreich war, kann der Spieler gegen die Tür laufen und diese wird physikalisch aufgemacht. Außerdem befindet sich eine Rune in einem Turm an der Decke. Daher muss der Spieler einen Zauberspruch ausführen, der die Schwerkraft umkehrt. Der Spieler wird an die Decke befördert und gedreht, sodass er sich entlang der Decke bewegen kann. Schwerkraft normalisieren lässt den Spieler wieder auf den Boden knallen. Mit dem Zauberspruch “Aspectus” wird eine Kiste physikalisch generiert und fällt vor dem Spieler auf den Boden. Er kann diese nutzen um an höher gelegene Stellen zu gelangen. Zu Schönheitszwecken kann der Spieler, wenn es in der Welt dunkel wird einen Zauberspruch ausführen, der die Nacht beschleunigt bis der nächste Tag heranbricht. Beim Erreichen der Tageszeit 12 Uhr, verliert der Zauberspruch seine Wirkung. Zudem werden entsprechende Partikeleffekte und Sounds abgespielt. Das Helferlein wird über den Animationsblender der OgreBasisArchitektur animiert. Somit kann zwischen verschiedenen Animationen nahtlos übergeblendet werden. Der Simulationszustand ist auch eine Sammelstelle für Kommandos die von außerhalb über den SocketServer kommen.

DialogOS

Bei DialogOS handelt es sich um eine mächtige Software die in der Lage ist Spracheingaben die über ein Mikrophon vom Benutzer geschickt werden, auszuwerten und Sprache zu synthetisieren und über die Lautsprecher auszugeben. Vorher werden Variablen in DialogOS erstellt. Wenn der Benutzer ein Wort spricht, versucht DialogOS zu erkennen ob eine Variable mit dem Wort übereinstimmt. In den meisten Fällen liefert es korrekte Ergebnisse. Es besteht auch die Möglichkeit Variablen über einen “Rendeveuz Server” an einen Java Client weiter zu leiten um damit arbeiten zu können. In einer Szene zur Spracheingabe wurde die Erkennung für gesprochene Zaubersprüche erstellt. In einer anderen Szene wurden Maßnahmen getroffen um eine Sprachsynthese zu ermöglichen. Dazu bekommt DialogOS von außerhalb ein Kommando und eine synthetische Sprecherin (Steffi) spricht den Inhalt des Kommandos. Es soll so aussehen, alsob das Helferlein den Text spricht.

SceneMaker

Der SceneMaker ist ein Forschungprojekt am DFKI in Saarbrücken. Es dient zur Modellierung von komplexer Logik. Der Benutzer kann Szenenknoten, Übergänge, Bedingungen, paralelle Abläufe usw. erstellen. Er kann Variablen anlegen und das Logik-Szenario in Echtzeit abspielen indem er Variablen ändert und den resultierenden Knotenablauf visualisiert bekommt. Im SceneMaker wird das Verhaltens des Helferleins gesteuert. Darüberhinaus werden Zaubersprüche behandelt, sowie Kommandos von der Interaktiven Anwendung in beide Richtungen.

Java Clients

Diese in Java geschriebenen Clients kümmern sich um die Weiterleitung von Kommandos an DialogOS, den SceneMaker und die Simulationsanwendung. Es wurden mehrere Clients erstellt, die über LAN mit dem ServerSocket der Simulationsanwendung verbunden werden. Zudem wurde eine GUI erstellt, die alle augenblicklich ankommenden Kommandos darstellt. Es wurde ein SocketClient erstellt, der direkt mit der Simulationsanwendung in beide Richtungen kommuniziert. Der SocketClient leitet Kommandos an den SceneMakerClient weiter. Dieser wiederum leitet die Kommandos an den SceneMaker weiter. Außerdem empfängt der SceneMakerClient Kommandos von DialogOS (Zaubersprüche) und leitet vom SceneMaker geschickte Kommandos weiter über einen SpeechOutputClient an DialogOS, damit diese synthetisiert werden können. Damit das Helferlein in der 3D-Szene weiß wann eine Sprechanimation vorüber ist. Wird über den SpeechOutputClient eine Variable gesetzt nachdem ein Text von der Steffi fertig gesprochen wurde.

OpenCV

OpenCV ist eine Bibliothek, die über Algorithmen zur effizienten 2D-Bilderkennung enthält. Beim Drücken der A-Taste des Wii-Controllers wird ein binäres Bild gezeichnet. Beim Loslassen der Taste, wird es abgespeichert und an die OpenCV Bibliothek weitergeleitet. Diese führt die Bilderkennung durch. Zuvor wurden mehrere Trainingsdaten in Form von Bildern erstellt. Es wurde beispielsweise 30x ein Kreis unterschiedlich gezeichnet. OpenCV nutzt diese Trainingsdaten zur schneller Bilderkennung.

KinectSDK

Bei dem KinectSDK handelt es sich um eine Bibliothek, die von Microsoft freigegeben wurde um 3D-Punkte aus Gesten zu erhalten. Zum KinectSDK wurde eine Kinect Sensorleiste gekauft. Sie besteht neben einem 3D-Mikrophon, das nicht verwendet wird, aus einer Tiefensensor- und Farbkamera. Die Kamera erkennt 26 Skelettpunkte eines Benutzers. Es wurde eine Beispielanwendung so adaptiert, dass nur Daten des Skelettpunkt des rechten Handgelenks erhalten werden. Weiterer Overhead zum Darstellen der Bilder und des Skeletts wurde aus Performanzgründen entfernt. In der Simulationsanwendung, wird Halten der A-Taste des Wii-Controllers, der Schweif an die Daten vom KinectManager gemappt und zudem aus den entsprechenden Koordinaten ein Bild gezeichnet.

3D-Modelle und Animation in Cinema4D

Mit dem 3D-Modellierungs und Animationsprogramm Cinema4D wurden verschiedene 3D-Modelle wie zum Bespiel das Helferlein, eine Tür, die Runen usw. modelliert. Für das Helferlein wurden zudem unterschiedliche Animationen erstellt. Alle Modelle wurden über ein Plugin (iOgre) in ein Mesh-Format mit einer Skeleton-Datei für die Animationen und Materialdateien für Texturen und Shader exportiert.

Screenshots:

zurück