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

Documentos relacionados