Hauptseminar Virtuelle Präsenz VRML oA
Transcrição
Hauptseminar Virtuelle Präsenz VRML oA
Hauptseminar Virtuelle Präsenz an der Universität Ulm 3D-Grafik und -Animation: – VRML – Virtual Reality Modelling Language Andreas Schmeil [email protected] Hauptseminar Virtuelle Präsenz WS 2003/2004 Inhaltsverzeichnis 1. Einführung 2. Entstehungsgeschichte von VRML 3. Aufbau einer VRML-Datei 4. Interaktion 5. Animation 6. Weitere Möglichkeiten von VRML 2.0 7. Multi-User-Projekte 1 Hauptseminar Virtuelle Präsenz WS 2003/2004 1. Einführung VRML ist eine Beschreibungssprache für dreidimensionale Welten bzw Szenarien, die eine Modellierung von beliebigen dreidimensionale n Objekten ermöglicht, mit denen der Benutzer mit Tastatur und Maus interagieren kann. Er kann als sein Avatar – eine interaktive Repräsentation des Benutzers in der Virtualität, die ein beliebiges Äußeres annehmen kann – durch diese Welten laufen, fliegen oder die Szene von aussen betrachten und beliebig drehen. Möglich machen all dies ein VRML-Viewer, das ist ein Programm oder ein Webbrowser-Plugin, und eine VRML-Datei, die Informationen über die Welt und die Objekte darin enthält. Da VRML nur eine Beschreibungssprache ist und somit kleine ASCII-Dateien große Welten beschreiben können, ist es als Web-3D-Standard sehr gut geeignet, da keine großen Datenmengen übertragen werden müssen, sondern die eigentliche grafische Verarbeitung am Rechner zuhause geschieht. VRML wurde genau dafür konzipiert (siehe Kapitel 2: Entstehungsgeschichte von VRML). Diese Ausarbeitung will nicht VRML in ihrer Vollständigkeit erklären, sie bietet lediglich eine kleine Einführung und einen Überblick über die Möglichkeiten von VRML. 2. Entstehungsgeschichte von VRML Auf dem ersten World-Wide-Web-Kongreß in Genf 1994 präsentierten Mark Pesce und Anthony Parisi ihr dreidimensionales WWW-Interface "Labyrinth", welches den Anstoß für die Entwicklung der Virtual Reality Markup Language gab (wie man VRML vorerst nannte). Eine entsprechende Arbeitsgruppe auf diesem Kongreß begann sogleich mit der Spezifikation der neuen Sprache, einer Beschreibungssprache für dreidimensionale Welten, in die Hyperlinks integriert werden können. 2 Hauptseminar Virtuelle Präsenz WS 2003/2004 Später wurde sie, um ihrem graphischen Charakter gerecht zu werden, in Virtual Reality Modelling Language (VRML) umbenannt. Mit Hilfe des amerikanischen Magazins Wired wurde eine WWW-VRMLMailingliste gegründet, die nach bereits einer Woche mehr als tausend Mitglieder zählte. Auf der zweiten WWW-Konferenz in Chicago im Oktober 1994 war der Konzeptentwurf für die erste Version (VRML 1.0 Draft 1 ) fertiggestellt. Nach intensiver Betrachtung der zahlreichen zur Verfügung stehenden Technologien entschied man sich für das Open Inventor ASCII File Format von Silicon Graphics, Inc. als eine Basis für das VRML-Format. Dieses Format unterstützt die vollständige Beschreibung von dreidimensionalen Szenarien mit gerenderten Objekten, Lichtquellen, Oberflächentexturen und realistischen Effekten. Gavin Bell von Silicon Graphics paßte das Inventor File Format den Bedürfnissen von VRML an und Silicon Graphics stellte das neue Format ohne Einschränkung der Öffentlichkeit zur Verfügung. Auf dem dritten WWW-Kongreß in Stuttgart standen damit schon erste VRMLViewer bereit, sowie der VRML 1.0 Final Draft. Auf dem ersten VRML-Kongreß 1995 stellten unter anderen Sun und Microsoft Konzepte für VRML97 vor, das Rennen machte der Vorschlag Moving Worlds von SGI, Sony, Worldmaker und anderen. 1996 war VRML 2.0: Moving Worlds fertiggestellt, das aufwendige Möglichkeiten zu Animation und Interaktion vorsieht. Mehr dazu in Kapitel 6: Weitere Möglichkeiten von VRML 2.0. Noch im selben Jahr wurde VRML97 ISO-zertifiziert. 3 Hauptseminar Virtuelle Präsenz WS 2003/2004 3. Aufbau einer VRML-Datei Eine VRML 2.0 -Datei besitzt immer die Endung .wrl. Die Beschreibung einer dreidimensionalen Szene wird realisiert durch die Definition einer Menge von Objekten (oder Knoten) , sogenannten Nodes. Die Definitionen von Nodes sind umschlossen von geschweiften Klammern. Jeder Node besitzt sogenannte Fields , die die Eigenschaften des Objekts beschreiben. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #VRML V2.0 utf8 Gro up { c hildren [ Na vig ation In fo { headlig ht FA LS E } Direc tional Light { direc tion 0 0 - 1 } Trans fo rm { trans lation 3 0 1 c hildren [ Shape { geometry S phere { ra dius 2 } appear anc e A ppearan ce { material Material { dif fuseCol or 1 0 0 } # rot } } ] } Tra ns fo rm { tra ns lation 7 5 0 r otation 0 0 1 3.1 4 s c ale 1 2 1 c hildren [ Shape { geometry Bo x { } appea ra nc e Ap pearance { material Material { di ffuseC olor 0 0 1 } # bla u } } ] } ] } Beispiel 3.1 – eine einfache VRML-Szene 4 Hauptseminar Virtuelle Präsenz WS 2003/2004 An diesem ersten Beispiel ist schon deutlich der hierarchische Aufbau des VRMLFormats zu erkennen: Nach dem durch einen Gartenzaun eingeleiteten obligatorischen Kommentar #VRML V2.0 utf8 in der ersten Zeile folgt ein Group-Node. Der erste Knoten ist stets ein Gruppenknoten, d.h. alle anderen Knoten in der VRML-Szene werden innerhalb der geschweiften Klammern definiert und sind somit dessen Unterknoten (bzw Unterknoten der Unterknoten). Eingeleitet werden sie in Zeile 4 mit dem Schlüsselwort children Innerhalb der eckigen Klammern können nun beliebig viele Unterknoten definiert werden, auch Untergruppenknoten. Hier werden zunächst „globale“ Knoten definiert, wie zum Beispiel Informationen für den VRML-Viewer (mittels NavigationInfo) oder die Grundbeleuchtung der Szene (hier: DirectionalLight). Die Zeilen 8-23 bilden die erste Untergruppe, definiert durch einen Transform-Node. Transform ist abgeleitet vom Group-Node, erweitert mit der Möglichkeit, eine Verschiebung (translation), eine Drehung (rotation) und eine n Skalierungsfaktor (scale) anzugeben, die für die ganze Gruppe gültig sind . Zur näheren Erklärung: Die zweite Untergruppe, die in Zeile 24 ebenfalls mittels Transform beginnt, wird in den Zeilen 26-28 auf der x-y-Ebene verschoben, um die zAchse um ca. 180° (180° im Bogenmaß = Pi = 3.14...) gedreht und in y-Richtung um den Faktor 2 hochskaliert, sozusagen „gedehnt“. Der Shape-Node definiert ein geometrisches Objekt, seine n Fields werden Knoten übergeben, wie hier in unserem Beispiel dem Field geometry ein Sphere-Node bzw in der zweiten Gruppe ein Box-Node. Dem Field appearance wird ein AppearanceNode übergeben, welcher für das Erscheinungsbild des Objekts zuständig ist. Dieser wiederum besitzt ein Field material, dem ein Material-Node übergeben wird. Im Material-Node wird hier durch einen RGB-Wert eine Farbe definiert. 5 Hauptseminar Virtuelle Präsenz WS 2003/2004 Durch einen Gartenzaun wird ein Kommentar eingeleitet. Der Gartenzaun ist bis zum Ende der Zeile gültig. Werden einem Field keine Werte übergeben, d.h. wird ein Field bei einer Definition nicht erwähnt, werden Defaultwerte eingesetzt. So wird zum Beispiel die Box (in der zweiten Transform-Gruppe) mit den Default-Kantenlängen 1 1 1 initialisiert. Durch den Skalierungsfaktor 1 2 1 entsteht jedoch kein blauer Würfel, sondern ein Quader, bei dem eine Seitenlänge doppelt so lang ist wie die anderen zwei. Folgende Abbildung zeigt unser obiges Beispiel in einem VRML-Viewer (http://www.blaxxun.de). Die Perspektive wurde hierbei etwas gedreht, damit man auch den dreidimensionalen Charakter des Quaders erkennt. Abbildung 3.1 – das Resultat obigen Codes 6 Hauptseminar Virtuelle Präsenz WS 2003/2004 Durch dieselben Mittel ist auch die nächste Szene entstanden. Hier hat man zudem noch auf ein Konzept der Instanziierung zurückgegriffen: DEF und USE. 13 14 15 16 17 … DEF Pfos te n Shap e { geometry Cyli nder { ... } ... } 33 34 35 36 37 Trans fo rm { trans lation 2 0 0 c hildren USE Pfos ten } Beispiel 3.2 – Instanziierung mit DEF und USE Mit DEF weist man einem beliebigen Knoten einen Bezeichner zu, etwa definiert man einen Straßenpfosten durch einen Cylinder-Node und beliebig viele Feinheiten und gibt dem Objekt mit DEF Pfosten einen Bezeichner. Dieses Objekt kann später an beliebiger Stelle durch USE Pfosten wiederverwendet werden. So mussten in der folgenden Szene die Straßenpfosten nicht jedesmal neu definiert werden, es wurde pro Pfosten lediglich ein Fünfzeiler wie oben (Zeilen 33-37) benötigt. Auch die Autos wurden mehrfach instanziiert. Abbildung 3.2 – eine etwas komplexere Szene 7 Hauptseminar Virtuelle Präsenz WS 2003/2004 Ein weiteres Stilmittel in VRML ist die Simulation von Nebel bzw Rauch, dafür gibt es in VRML einen Knoten: Fog. Es kann eine Farbe angegeben werden, eine Sichtweite und die Art und Weise, wie der Nebel mit der Entfernung zunimmt (exponentiell / linear). Abbildung 3.3 – „Fog“ zur Simulation von Nebel oder Rauch Zwei weitere Hilfsmittel, die ich hier vorstellen möchte, sind der Background-Node und der Extrusion-Node. Background erzeugt quasi automatisch einen endlosen Untergrund, der zum Horizont hin dunkler wird, und einen endlosen Himmel (bzw eine Decke). Man gibt lediglich zwei Farben an, etwa wie im folgenden Beispiel grasgrün und himmelblau, und schon steht man – zumindest in seiner VRML-Szene – auf einer endlos langen grünen Wiese unter einem schönen blauen Himmel. Mit dem Extrusion-Node kann aus eine m zweidimensionalen Grundriss relativ einfach ein dreidimensionales Objekt geformt werden. So entsteht zum Beispiel ein Glaskelch wie in folgendem Beispiel aus seiner Grundfläche, den Skalierungsfaktoren für die verschiedenen Kelchsegmente und den Längen der Segmente. 8 Hauptseminar Virtuelle Präsenz WS 2003/2004 Abbildungen 3.4 – „Extrusion“ formt einen Kelch aus Glas 4. Interaktion Damit in einer Szene Objekte bewegt oder Schalter betätigt werden können, bedarf es ihr Interaktionselementen, welche die Eingaben des Benutzers etwa via Tastatur oder Maus empfangen und nach vorgegebenen Regeln die Szene verändern. Die Interaktion in VRML basiert auf Ereignissen (engl.: events). Manche Nodes können Events erzeugen, diese werden über eine vorgegebene Route an einen anderen Node (oder an mehrere) geschickt. Der Event wird von dem jeweiligen Node empfangen und er sorgt für die gewünschte Veränderung in z.B. seiner Erscheinung. Nodes, die Eingaben vom Benutzer empfangen und sie an andere Nodes der Szene weiterleiten, heißen Sensoren. Diese betrachten wir zunächst. 9 Hauptseminar Virtuelle Präsenz WS 2003/2004 Sensoren • Geometrische Sensoren: Geometrische Sensoren erzeugen Events, die auf einer Aktion des Benutzers beruhen. Diese können sein: - Anklicken eines Objekts, - Ziehen eines Objekts, - Drehen eines Objekts, - Bewegung des Avatars Es gibt für verschiedene Aktionen bestimmte Sensoren. Zum Beispiel sendet ein TouchSensor-Node einen Event, wenn der Benutzer ihn mit der Maus anklickt. Ein PlaneSensor dagegen sendet Events, wenn der Benutzer die linke Maustaste gedrückt hält und die Maus gewegt. Mit einem PlaneSensor lassen sich auf einer Ebene verschiebbare Objekte modellieren. Ein SphereSensor ermöglicht dreidimensionales Drehen von Objekten. Möchte man Events erzeugen, wenn der Avatar in eine vorgegebene Reichweite eines Objekts kommt, benutzt man einen ProximitySensor. Ein VisibilitySensor wird aktiv, sobald er für den Avatar aus dessen Position sichtbar ist. Dies kann zur Performanceerhöhung der Szene benutzt werden, indem man die Teile der Szene, die der Avatar gerade nicht sieht auch nicht berechnet bzw rendert. Bei großen Szenen, komplexen Objekten und aufwendigen Animationen kann sich das durchaus positiv bemerkbar machen. • Zeitliche Sensoren: Zeitliche Sensoren senden Events in bestimmten Zeitintervallen. Sie sind also unabhängig vom Benutzer. Zeitliche Sensoren – in VRML gibts es nur einen Typ, den TimeSensor – eignen sich besonders gut zur Modellierung von Animationen (siehe Kapitel 5). EventIn und EventOut Ein Node, der einen Event erzeugt, erzeugt einen EventOut. Ein Event, der empfangen wird, erzeugt bei dem jeweiligen Knoten einen EventIn. 10 Hauptseminar Virtuelle Präsenz WS 2003/2004 Die meisten Nodes haben EventIns definiert, somit können sie Events von anderen Nodes, die EventOuts produzieren, empfangen. Routing Ein Event muß von seiner Erzeugung durch z.B. einen TouchSensor zu dem Node, an dem das Ereignis „wirken“ soll, explizit geleitet werden. In VRML legt man dafür eine sogenannte Route. Diese Verbindung ist dann fest vorgegeben, d.h. verbindet man mit Zeile 55 des folgenden Beispiels einen Lichtschalter mit einer Lichtquelle, wird die Lichtquelle stets aktiviert, wenn der Schalter mit der Maus betätigt wird. 53 54 55 DEF Sc halter Touc hSe ns or { ena ble d TRUE } DEF Lic ht Dir ec tional Lig ht { on FALSE } RO U TE Sc halter.is Ac ti ve TO Lic ht.o n Beispiel 4.1 – Routing eines Events In der folgenden Beispielszene ist eine Ecke eines Zimmers zu sehen, in dem auf einem Schreibtisch eine Tastatur liegt, die durch anklicken und bewegen der Maus gedreht werden kann. Der Monitor daneben kann ebenso gedreht werden. Beide Objekte sind durch je einen CylinderSensor beweglich modelliert worden, sie sind um eine Rotationsachse drehbar gelagert. Mit einem Klick auf den Bildschirm ändert sich die Textur, man kann hier eine komplette Folienpräsentation in der VRML-Szene anschauen. Man hätte hier ebensogut auch einen Hyperlink auf eine beliebige Webseite einfügen können. Auf dem schwarzen Regal über dem Schreibtisch befindet sich ein HiFi-Receiver – ein einfacher schwarzer Quader, der schlicht mit einer Textur versehen wurde. Auf Knopfdruck – d.h. bei Anklicken mit der Maus – startet Musik, die aus dem kleinen gelben Würfel links im Schrank ertönt. Der Unterschied der Wegstrecke des Audiosignals zum linken zu der zum rechten Ohr wird in VRML berücksichtigt, somit kann man sogar durch reines Horchen die Musikquelle ausmachen, also herausfinden, woher die Musik kommt. 11 Hauptseminar Virtuelle Präsenz WS 2003/2004 Abbildung 4.1 – Szene mit Texturen und Interaktionselementen 12 Hauptseminar Virtuelle Präsenz WS 2003/2004 5. Animation Animationen weren in VRML modelliert, indem mithilfe eines Timers zwischen verschiedenen Werten interpoliert wird. So wird lediglich ein Startpunkt und ein Endpunkt benötigt, und der Interpolator kümmert sich zusammen mit einem TimeSensor um die Zustände (z.B. Koordinaten, Farbwerte, Skalierungsfaktoren,...) dazwischen. Folgendes Schaubild soll darüber Aufschluss geben, wie ein Startereignis (Trigger), ein Timer und ein Interpolator-Node (bzw eine Engine) eine bestimmte Eigenschaft eines Objekts (eines Targets) kontinuierlich ändern. Mit einem Mausklick wird die Animation gestartet. Ein Zeitstempel wird erzeugt und dem TimeSensor als Startwert übergeben. Von nun an erzeugt der TimeSensor in einem vorgegebenen Intervall Events, die an den Interpolator geleitet werden. Dieser ändert damit einen vorgegebenen Wert und schickt diesen an das Zielobjekt. Abbildung 5.1 – Animationsschema in VRML Das folgende Beispiel zeigt eine komplexere Animation, die sich jedoch wiederum ausschließlich aus einfachen Animationen wie oben beschrieben zusammensetzt. Es zeigt Floops, einen in VRML-Kreisen sehr populären Charakter, der mit dem Benutzer das „Hütchenspiel“ spielt. Er steckt eine Kugel unter eines von drei Hütchen, verschiebt diese auf einem Tisch und der Benutzer muß am Ende raten, unter welchem Hütchen sich die Kugel befindet. Floops’ Bewegungen sind fließend und menschlichen Bewegungen nachempfunden. Während er die Hütchen mischt, redet er und am Ende stellt sich heraus, dass sich die Kugel unter keinem der drei Hütchen befindet, sondern Floops zaubert sie hinter seinem Kopf hervor... 13 Hauptseminar Virtuelle Präsenz WS 2003/2004 Abbildung 5.2 – Floops 14 Hauptseminar Virtuelle Präsenz WS 2003/2004 6. Weitere Möglichkeiten von VRML 2.0 Die Möglichkeiten von VRML 2.0 gegenüber dem ersten VRML Final Draft machen die Sprache sehr mächtig. Zum einen lassen sich eigene Nodes definieren mittels PROTO, es ist möglich, Skripten zu verwenden, und das External Authoring Interface ermöglicht es, VRML in Java-Code einzubinden. Prototyping mit PROTO Ähnlich wie bei der Vererbung in objektorientierten Sprachen kann man sich eigene neue VRML-Nodes von bereits bestehenden ableiten bzw aus mehreren bestehenden Nodes zusammensetzen. Das folgende Beispiel definiert einen neuen Knoten „SphereCone“, der sich aus einer Kugel und einem Kegel zusammensetzt. Es werden eigene Fields definiert, die in der Definition verarbeitet werden. 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 PROTO Sph er eC one [ field SFFl oat ra dius 2.0 field SFFl oat hei ght 5.0 field SF No de s phe reA pp N UL L field SF No de c oneA pp N ULL ] { Trans fo rm { c hildren [ Shape { appear anc e IS s pher eAp p geometry Sphe re { r adi us IS radi us } } Shap e { appear anc e IS c oneAp p geometry Con e { h eight IS heig ht } } ] } } Beispiel 6.1 – Prototyping mit PROTO Verwendung von Skripten Ein in VRML 2.0 neu eingeführter Node „Script“ verweist auf eine URL , an der sich ein Programm oder ein Skript befindet. Das Skript kann auch direkt in der VRMLDatei stehen. Dieser Node besitzt bestimmte EventIns, die die Ausführung des Skripts veranlassen. Die Sprache des Skripts ist hierbei beliebig, lediglich der Webbrowser muß die Sprache erkennen. Das folgende Beispiel trägt zur Änderung der Textur auf dem Monitor in dem Zimmer aus Kapitel 4 bei. 15 Hauptseminar Virtuelle Präsenz 11 12 13 14 15 16 17 18 19 20 21 WS 2003/2004 DEF Powe rp ointle Sc ript { event In SF Time to uc h Time eventO ut SFInt3 2 w hic hC hoic e url "vrmls c ript: fu nc tion touc h Tim e( valu e, time) { if ( whic hCh oic e = = 3 ) whic h Ch oic e = 0; els e ++ whic hC hoic e; }" } Beispiel 6.2 – Verwendung eines Skripts In der folgenden Szene – ein VRML-Betrachter von BMW, bei dem man die Farbe des Fahrzeugs ändern, die Felgen austauschen und verschiedene vordefinierte Ansichten wählen kann – wurde das Menü mithilfe von Skripten realisiert. Abbildung 6. 1 – BMW-Betrachter (Menü mit Hilfe von Skripten) 16 Hauptseminar Virtuelle Präsenz WS 2003/2004 External Authoring Interface (EAI) Das EAI bietet eine Einbindung von VRML in Java -Applikationen. Es lassen sich Events aus Java an eine VRML-Szene schicken, als auch Events aus der Szene in Java empfangen. Dies wird ermöglicht durch Java -Klassen, die teils schon mit dem VRML-Viewer-Plugin ausgeliefert werden. Die Firma Blaxxun hat diese Möglichkeiten ergiebig genutzt, um eine Multiuser-VRML-Chat-Community zu implementieren. Dazu mehr im nächsten Kapitel. 7. Multi-User-Projekte Einige Projekte wurden mit VRML im Internet erschaffen, das größte ist wohl die Blaxxun Community. Die Münchner Firma hat in Java (mithilfe des EAI – siehe oben) einen Chat implementiert, in dem man sich in einer VRML-Welt aufhält und seine Chatpartner sieht, und mit ihnen, sowie auch mit der Welt interagieren kann. Hier besteht die Möglichkeit, seine eigenen Welten reinzuladen und für alle „Mitglieder“ der Community zugänglich zu machen. Man kann seine Welt auch multiuser-fähig in der eigenen Homepage verlinken. Abbildung 7.1 – Blaxxun Community 17 Hauptseminar Virtuelle Präsenz WS 2003/2004 Abbildung 7.2 – Blaxxun Community Abbildung 7.3 – Techuelife Island (auch in der Blaxxun Community) 18 Hauptseminar Virtuelle Präsenz WS 2003/2004 Eine andere VRML-Sparte sind Jobbörsen und Internet-Messen. Der Benutzer läuft mit seinem Avatar durch die Hallen der Messe, kann hier Neuigkeiten sehen und zum Teil ausprobieren, Kontakte knüpfen oder einfach mit anderen Benutzern plaudern. Es werden Termine festgelegt, an denen die Börse stattfindet. Ausserhalb dieser Zeiten sind die Hallen zwar zugänglich, aber „menschenleer“. Abbildung 7.4 – www.brennstoffzelle-hessen.de Eine große VRML-Jobbörse erreicht man zum Beispiel unter www.jobfair24.de. Quellen • Abbildung 6.1: http://www.blaxxun.de (->Unternehmen->Referenzen) • Abbildung 7.4: http://www.brennstoffzelle-hessen.de • Abbildungen 7.1, 7.2, 7.3: Blaxxun Community: http://www.blaxxun.com/vrml/home/ccpro.htm • Anhang: Übersicht über alle Nodes: http://i31www.ira.uka.de/docs/mm+ep/03_VRML/ 19