http://wdune.ourproject.org/docs/usage_docs/dune_de_tutorial.html
Downloaden Sie die neuste Version von "dune/white_dune" (zur Zeit 0.29beta) von http://wdune.ourproject.org/
white_dune ist ein Programm, um VRML97/VRML2-Dateien zu verändern oder zu
erstellen.
In der Beschreibungssprache VRML (Virtual Reality Modelling Language)
werden 3D-Graphikobjekte ("Nodes", Knoten) in einer Baumstruktur
("Scenegraph", Szenengraph) dargestellt. Dazu kommen noch Nachrichtenwege
(ROUTEs) zwischen den einzelnen Knoten um das Laufzeitverhalten
festzulegen.
Im VRML-Editor "dune" wird versucht, diese Informationen vollständig in
einer graphischen Oberfläche darzustellen.
Neben diversen Toolbars für Icons und Nachrichten besteht "dune" im
wesentlichen aus 5 Fenstern. Ausser dem "3D Preview" Fenster lassen
sich die Fenster über den Menüpunkt
"View" angepasst an den jeweiligen Arbeitsschritt
ein- und ausschalten.
Dune ist noch in der Entwicklungsphase und es läuft noch nicht so
stabil, wie es sollte.
Wenn dune abstürzt, ist dann die bisherige Arbeit verloren ?
Nein, nicht automatisch.
"dune" versucht noch, das
VRML97 File kurz vor dem Absturz zu speichern. Wenn das erfolgreich ist,
wird dune unter Linux/UNIX/MacOSX so etwas wie
Internal Crash ! Try to save Files attempt to write file to /home/someone/.dune_crash_NUMBER_NUMBER.wrl write sucessfulin die Standartfehlerausgabe des dune starteten Fensters und auf die Systemkonsole (z.B. das Fenster der "xconsole" Anwendung) schreiben.
Wenn der Fehler, der zum Absturz geführt hat, die interne Datenstruktur
im Programm beschädigt hat, kann diese Methode versagen.
In diesem Fall lohnt es sich nach temporären Daten (".dune_*") im
Verzeichnis der VRML-Datei zu suchen, die bei der Ausführung von
File->Preview oder File->Textedit entstanden sind.
Diese Dateien werden bei einem normalen Programmende gelöscht, nicht
aber bei einem Programmabsturz.
Wenn umfangreiche VRML-Dateien bearbeitet werden, kann das Arbeiten in
white_dune sehr mühselig werden, weil zum Beispiel der RouteView
überfüllt und dadurch sehr unübersichtlich geworden ist.
Als Ausgleich besitzt white_dune die Möglichkeit, den VRML-Knoten
"Inline" zu benutzen. Damit kann man umfangreiche VRML-Dateien in einem
einzigen VRML-Knoten verpacken.
So kann es zum Beispiel sehr sinnvoll sein, Objekte für den Hintergrund
oder ein starres, umfangreiches Objekt, das bei einer Animation bewegt
werden soll, in einer eigenen Datei zu verpacken.
Eine Reihe von CAD- bzw. 3D-Modeller-Programmen unterstüzen diese
Arbeitsweise, indem sie eine Option anbieten, nur selektierte oder nicht
versteckte 3D-Objekte als VRML-Datei zu exportieren.
Zum Beispiel unterstützt der freie 3D-Modeller
Wings3D den Export von selektierten 3D-Objekten.
Die Benutzung des "Inline" Knotens ist auch der Schlüssel, um
verschiedene Werkzeuge gleichzeitig als 3D-Modeller einzusetzen, ohne
dass nach jedem Veränderungsschritt umfangreiche Arbeiten anfallen,
um die VRML-Datei der Gesamtwelt auf den neuesten Stand zu bringen.
Wenn Sie 3D-Daten besitzen,
versuchen Sie jetzt VRML97/VRML2 Dateien aus Ihrem Lieblings-3D-Programm
zu exportieren, oder erzeigen Sie schnell einige kleine VRML-Dateien.
Achten Sie darauf, dass möglichst wenige Flächen
(Polygone) erzeugt werden. Oft unterstützen die neusten Versionen
der fortgeschrittenen 3D-Modeller die Reduzierung von Flächen als
Arbeitsschritt oder beim Export.
Wenn es der Modeller erlaubt, sollten Sie in diesem Modeller
mehrere 3D-Objekte erzeugen und einzeln in VRML-Dateien exportieren.
Wenn Sie gerade keinen 3D-Modeller zur Hand haben, können Sie die
VRML Dateien des Wings3D-Beispiels für
Vordergrund und
Hintergrund oder einfach
white_dune selbst benutzen. Mit dem Menüpunkt
Create -> Shape -> Sphere
können Sie zum Beispiel eine Kugel zu erzeugen.
Danach benutzen Sie File -> Save As... , um das Objekt in ein
VRML-File zu exportieren.
Starten Sie jetzt white_dune und benutzen Sie
Create -> WWW -> Inline, um ihre VRML-Dateien als "Inline"-Knoten
einzufügen.
Bei der Benutzung des Inline Knotens muss unbedingt darauf geachtet werden, dass sich eine Datei nicht selbst inlined (auch nicht indirekt). In diesem Fall fordern die meisten Werkzeuge beim Laden der Datei immer mehr Speicher an (weil sich die Datei immer wieder selbst lädt) und stürtzen irgendwann ab. Sollte das bei white_dune passieren, muss man entweder das "Limit number of loaded inlines" beim Options -> Preferences... Dialog auf niedrige Werte zu setzen, oder die ge-inline-te Datei umbenennen, um das Problem reparieren zu können.
Benutzen Sie den Menüpunkt Actions -> Show Polygons/Primitives in StatusBar um zu überprüfen, ob Ihr 3D-Objekt zu viele Flächen hat. Wenn Ihre Graphikkarte keine 3D-Beschleunigung hat, sollte Ihr 3D-Objekt weniger als einige Tausend Polygone umfassen.
Sie werden feststellen, dass Sie ihre 3D-Objekte innerhalb white_dune
noch nicht bewegen können.
Dazu benötigen Sie einen Transform-Knoten, den Sie mit
Create -> Grouping Node -> Transform erzeugen können.
Der Transform-Knoten ist in VRML für Verschiebung, Drehung,
Skalierung usw. von starren Körpern zuständig. Das lässt
sich z.B. im
VRML97 Standard
http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html#Transform
(zu erreichen über den Menüpunkt Help -> Transform
bei angewähltem Transform-Knoten) nachlesen.
Um Festzulegen, für welches 3D-Objekt ein Transform-Knoten zuständig
ist, muss man andere VRML-Knoten in sein Icon im SceneTree schieben.
Wählen Sie den Transform-Knoten im SceneTree Fenster an.
Beachten Sie, dass Sie jetzt im FieldView Fenster die Werte der Felder
dieses Transformknotens verändern
können,
auch durch Verschieben der Maus im FieldViewFenster bei festgehaltener
Maustaste.
Benutzen Sie (immer noch bei angewähltem Transform-Knoten) den
Menüpunkt Actions -> Animate . Daraufhin erscheint ein
Dialogfenster
in dem Sie neben der Animationsdauer (und ggf. der Zeitquelle) auch
das die Ziel-Felder (bzw. EventIn ("Eingabenachricht")) des Ziel-Knotens
(hier Transform) auswählen können.
Die Felder "set_translation" und "set_rotation" beschreiben Verschiebung
und Drehung und sind identisch zu den Feldern "translation" und "rotation"
im FieldView Fenster.
Um mit diese Daten mit der Maus im 3DView Fenster eingeben zu
können, benötigen Sie die Einstellungen der Menüpunkte
Mode -> Move bzw. Mode -> Rotate . Benutzen Sie jetzt
Mode -> Move für Verschiebungen.
Klappen Sie ggf. mit View -> Channel View das ChannelView
Fenster auf und klicken Sie auf den PositionInterpolator Knoten im SceneTree
Fenster.
Animation bedeutet, dass sich Werte (zum Beispiel für Verschiebung,
aber auch Drehung, Farbe, Transparenz, Lichtstärke usw.) mit der
Zeit ändern. Im ChannelView Fenster bedeutet die Position des
blinkenden schwarzen Balken die Zeit, die farbigen Linien den sich
ändernden Wert.
Benutzen Sie zwei mal
Create -> Shape -> Box . Jetzt liegen 2 Objekte genau
übereinander.
Klicken Sie im Scene Tree Fenster auf das "Plus"-Zeichen beim Appearance
("Erscheinung") eines dieser Objekte und wählen Sie den Material
Knoten an, der für Farbeffekte zuständig ist.
Ändern Sie die Farbwerte für das Feld "diffuseColor", zum Beispiel
über den Menüpunkt Actions -> Color Circle .
Schieben Sie jetzt das eine Objekt etwas nach Oben und betrachten Sie
die resultierenden Effekte.
Wie Sie sehen, erzeugen 2 nah aufeinanderliegende Flächen bei
Echtzeit-3D-Verfahren Probleme. Diese Probleme kommen auch bei anderen
Programmen vor, zum Beispiel in 3D-Computerspielen oder im 3D-Fenster
eines Movie-3D-Modellers.
Allerdings können diese Probleme beim Movie-Modeller ignoriert
werden: beim langwierigen Bilderzeugungsschritt ("rendern") eines
Movie-Modellers wird sehr genau berechnet, welche der beiden Flächen
vorne liegt und in der Bilderfolge des Endprodukts ist nichts von
Z-Fighting Problemen zu entdecken.
Anders bei VRML, bei dem die Bilderzeugung im VRML-Viewer ebenfalls
über ein Echtzeit-3D-Verfahren funktioniert, bei der ein Bild in
ca. 1/25 Sekunde gerendert werden muss. Benutzen Sie
File -> Preview , um Ihre VRML-Datei mit Hilfe eines
VRML-Browser-Plugins zu betrachten.
Das Z-fighting Problem ist sehr tückisch, da seine Auswirkungen von
der verwendeten Software (VRML-Viewer und Graphiktreiber) und von
der verwendeten Hardware (Graphikkarten mit 3D-Beschleunigung) abhängen
können.
Schieben Sie die beiden Objekte weit genug auseinander.
Benutzen Sie den Menüpunkt Create -> Sensor -> SphereSensor
um einen Kugelsensor einzufügen.
Verschieben Sie jetzt den SphereSensor in einen Zweig des Scenengraphen,
der zur einen Box gehört,
und suchen Sie im RouteView Fenster nach dem Transform-Knoten der anderen
Box. Im RouteView Fenster werden angewählte Knoten blau beschriftet
Legen Sie jetzt eine Route von SphereSensor.rotation_changed nach
Transform.set_rotation
Leider ist "dune/white_dune" nur ein VRML Editor und noch lange kein
vollwertiger VRML Browser. Für Interaktionen muss man auf einen
"richtigen" VRML Browser zurückgreifen:
Benutzen Sie File -> preview um einen VRML Browser zu starten.
Der Wechsel des Cursors zeigt eine Interaktionsmöglichkeit an,
so dass Sie mit Klicken und Ziehen der Maus in die Welt eingreifen
können.
Für später: Eine Liste mit Beispielen über einfache Interaktion findet sich in http://wdune.ourproject.org/docs/typical_vrml_examples/index.html
"dune/white_dune" ist hat auch einige einfache NURBS modeller Features.
NURBS ist Bestandteil einer VRML-Erweiterung (ISO/IEC 14772:2002),
aber nicht Teil des "klassischen" VRML97 (ISO/IEC 14772:1997) und
wird deswegen nicht von allen VRML-Viewern unterstützt.
Unter anderem unterst¨tzt der VRML-Viewer COVER keine NURBS.
Da bei NURBS-Flächen die Polygonreduktion sehr einfach ist
und white_dune die Konvertierung von NURBS- zu normalen
IndexedFaceSet-(Mesh-)Objekten beherrscht, ist NURBS für den
nächsten Absatz von Bedeutung.
Erzeugen Sie eine Nurbsfläche entweder mit den Menüpunkten
Create -> VRML 200x -> NurbsSurface -> Plain/Box/Sphere/Cone/Cylinder
oder konvertieren Sie ein entsprechdes angewähltes
Box/Sphere/Cone/Cylinder (oder NurbsCurve) Objekt mit dem
Menüpunkt Actions -> Convert to NurbsSurface .
Am sinnvollsten ist der Einsatz von symetrischer Modellierung: die eine Seite
des Objekts soll so aussehen, wie die andere Seite.
Benutzen Sie dazu den Menüpunkt Actions -> X symetric modelling
Wenn dieser Menüpunkt aktiviert ist, wird jede Bewegung von den
Kontrollpunkten (den weissen Kästchen) der einen Seite
auf die andere Seite übertragen,
Für später: Eine Einführung zum Thema NURBS finden Sie unter
http://wdune.ourproject.org/docs/usage_docs/dune_de.html#nurbs.
Weitere Informationen zum Arbeiten mit NURBS in "dune/white_dune" finden sich
unter
http://wdune.ourproject.org/docs/usage_docs/dune_de.html#nurbssymetric
Klicken Sie den NurbsSurface Knoten an und verändern Sie die
Felder u/vTesselation
Ausser sehr kleinen Werten
sollten Sie auch grosse Werte ausprobieren. Die Anzahl der Polygone
liegt ungefähr bei "uTesselation * vTesselation".
Probieren Sie aus, wie es beim Verschieben des Objekts ruckelt, wenn
diese Werte in der Grössenordung von einigen 100 bzw. 1000 liegen.
Speichern Sie jetzt Ihr VRML File (am Besten nach "C:\temp") mit
dem Menüpunkt File -> save as.
Wenn eine NURBS Form zu einer mesh (IndexedFaceSet in VRML)
konvertiert wird, werden bei grossen uTesselation/vTesselation Werten
unnötigerweise sehr viele Daten erzeugt.
Das Speichern solche einer Mesh würde dazu führen, dass sehr viele
Daten geschrieben und damit (besonders beim Schreiben auf ein M$Windows
Netzlaufwerk) Ihre Geduld auf eine zu harte Probe gestellt werden würde.
Automatische Konversion von NURBS zu IndexedFaceSet treten auf bei der
Benutzung von
File -> Export as... -> pure VRML97
oder bei einem
unbedachter Klick auf den Menüpunkt File -> Preview
wenn im Dialog Options -> Preview Settings... das Flag
pure VRML97 angeklickt ist
(was gebraucht wird, wenn Ihr VRML Browser nicht ISO/IEC 14992:2002
(VRML97 Amendment 1) unterstützt).
White_dune unterstützt 3D-modelling, die auf der sogenannten
"superformula" ("Superformel") basiert.
Diese Formel wurde vor einigen Jahren von einem Biologen gefunden und
kann benutzt werden, um n-symetrische Formen zu erzeugen, die Dingen aus der
Natur wie Blumen, Blaettern, Insektenkörper, Muscheln
oder Seesternen ähnlich sehen.
Diese Formen
wurden alle mit dem SuperShape PROTO erzeugt.
Superformula basierte Formen sind nicht von sich aus Teil von VRML97,
sondern sind über ein PROTO (selbst definierter VRML Knoten)
mit Scriptcode ("scripted PROTO") implementiert.
Verbreitete 3D Modelling Programme wie catia, 3D Studio Max, Cinema4D, maya,
formZ, blender usw. besitzen die Möglichkeit VRML97 zu exportieren (oder
zumindest konvertierbare Dateiformate zu schreiben). Allerdings wird man
mit den Resultaten nicht immer wirklich glücklich, Spötter reden
von "schwarzen Löchern aus maya".
Der Grund dafür hat nicht unbedingt mit Programmfehlern zu tun. Man
sollte sich
immer vor Augen halten, dass viele dieser Programme nicht primär zur
Erzeugung von Echtzeit-3D-Daten gedacht sind, sondern z.B. zur Erzeugung
von Movie-Daten, so dass an einem Bild Minuten/Stunden (oder mehr) gerechnet
werden kann. So gibt es in diesen Programmen Effekte wie zum Beispiel
"richtige" Mehrfachspiegelungen,
die auf einem normalen Rechnersystem nicht innerhalb einer 1/25 Sekunde
berechnet werden können.
Die entsprechenden Materialeigenschaften können daher nicht so einfach
in ein Echtzeit-3D-Format übersetzt werden.
Erzeugen Sie ein (einfaches ?) VRML File mit einem anderen 3D Modeller
(z.B. Wings3D, Art of Illusion, ac3d, maya, usw...).
Benutzen Sie den Menüpunkt File -> Import, um das 3D Modell
in Ihre 3D Welt einzufügen.
Die meisten 3D Modeller exportieren lediglich IndexedFaceSet Knoten
(aus Einzelflächen zusammengesetzte Körper)
für die Geometrie.
Im einfachsten Fall liegen nur die "rohen" Geometriedaten vor:
Im Notfall können Sie versuchen, diese Situation zu erreichen, indem
Sie alle anderen Knoten in einem VRML File löschen.
Klicken Sie auf den "Shape" Knoten und benutzen Sie Create ->
Material/Texture -> Appearance
Klicken Sie auf den "Appearance" Knoten und benutzen Sie Create ->
Material/Texture -> Material
so dass Sie die Farbe des gesamten Objekts (nicht die Farbe der einzelnen
Polygone wie mit dem Color Knoten) verändern können.
Um ein Bild (Textur) auf das Objekt zu kleben,
klicken Sie auf den "Appearance" Knoten, benutzen Sie Create ->
Material/Texture -> ImageTexture
und wählen Sie eine Bilddatei aus. Der VRML Standard fordert
ausschliesslich
die Unterstützung der offenen Bildformate ".jpg" und ".png", bei anderen
Bildformaten kann es zu Problemen kommen.
Häufig werden Textur-Dateien (auch MovieTexturen (.mpeg (MPEG1)) zwar
exportiert, aber mit einem falschen oder ungeeigneten Pfad. Wird die VRML Datei
an eine andere Stelle kopiert, kann der Pfad ungültig werden.
Wird die VRML Datei auf einen UNIX/Linux-basierten Webserver übertragen,
erweisen sich Laufwerksbuchstaben, Leerzeichen und nicht ASCII Buchstaben
(wie z.B. Umlaute) im Pfad (und Dateinamen) als echtes Problem.
Die wenigsten Handlingprobleme ergeben sich, wenn man alle Dateien
in den gleichen Pfad wie die VRML Datei kopiert und mit dem Menupunkt
Actions -> Set Path of all URLs to alle Pfade mit dem relativen
Pfad . ("." bedeutet aktueller Pfad) ersetzt.
Wenn Sie Pech haben, wurde das Objekt mit der
falschen Seiteninformation exportiert.
Ändern Sie die Felder "ccw" ("andere Seite") oder
"solid" ("einseitig"/"zweiseitig") um das Problem zu lösen.
Vorsicht bei zweiseitigen dünnen Körpern, da dann
aufgrund von Z-fighting/"dünne Wand"-Problemen die Rückseite
"durchscheinen" kann. Benutzen sie "solid TRUE".
Um Kanten verwischen zu lassen, können Sie das Feld "creaseAngle"
benutzen. Dazu muss der Winkel der Kante im Bogenmass (1.57 sind ungefähr
90 Grad, 3.14 ("Pi") sind ungefähr 180 Grad) kleiner als der
"creaseAngle" Wert sein.
Das Verwischen von Kanten erlaubt es, das Aussehen von 3D-Objekte mit
sehr wenigen Flächen stark zu verbessern.
3D-Objekte mit sehr wenigen Kanten sind für eine hohe
Darstellungsgeschwindigkeit bei
Echtzeit-3D sehr wichtig.
Einige 3D-Modeller mit VRML-Export haben das Problem, dass Sie den
Drehpunkt eines Objekts (symbolisiert durch ein Dreibein oder durch 3 farbige
Ringe in white_dune, Feld Transform.center) weit entfernt vom Objekt selbst
anordnen.
Üblicherweise ist dabei der Drehpunkt im Nullpunkt der VRML-Welt
angeordnet.
Versucht man dann, das Objekt über seinen Transformknoten zu drehen,
können schon kleine Drehwinkel dazu führen, dass das Objekt seinen
Platz verlässt. Besonders bei grossem Abstand zum Nullpunkt kann
diese Orbitbewegung um den Nullpunkt fäschlich als Verschiebungsbewegung
wahrgenommen werden. Ähnliche Effekte lassen sich auch beim
Vergrössern/Verkleinern erzielen.
Die Lage des Drehpunkts wird durch das Feld "center" des Transformknotens
bestimmt.
Ausser über den Fieldview kann das Feld "center" auch im 3D-Preview
Fenster gezielt verändert werden, indem man den Menüpunkt
Mode -> Center benutzt und das Dreibein im 3D Fenster benutzt.
Allerdings hat die Veränderung des Wertes für "center" auch Auswirkungen auf die Drehung und die Skalierung des Körpers. Die Reihenfolge der Graphikoperationen in VRML ist so festgelegt, dass bei einer Drehung ungleich Null (bzw. einer Skalierung ungleich Eins) eine Verschiebung des Drehpunkts im 3D-Preview Fenster dazu führen kann, dass der Körper dem Drehpunkt auszuweichen scheint.
Um dieses Problem zu vereinfachen wurde in white_dune ein Menüpunkt
Actions -> Set center to (need Transform ->Shape ->geometry) ->
mid of boundingBox eingeführt.
Dabei muss ein Geometrie-Knoten (zum Beispiel IndexedFaceSet, PointSet,
Box usw.) angewählt werden, der in einem Shape-Knoten enthalten ist,
welcher wiederrum in einem Transform-Knoten enthalten ist.
Bei Ausfürung des Actions -> Set center to... Befehls wird
dann der Drehpunkt in den Mittelpunkt des Kastens gelegt, der den
Geometrie-Knoten umschliesst.