Dokumentation GOTHIC
Tutorial: Outdoor-Level
Autor: Markus Kark Version: 19.Juli 2001

Inhalt: Zum Index


Hinweis: Einige Bilder werden verkleinert dargestellt. Ein Mausklick reicht, und das Bild erscheint in voller Größe!

1. Einleitung

In diesem Tutorial wird die Erstellung eines Gothic-Levels - ein sogenanntes ZEN - vorgeführt. Es werden Grundlagen im Umgang mit 3D Studio MAX 3.1 vorausgesetzt. Die Unit-Einstellung von 3D Studio sollte auf cm sein.

Benötigte Software:

  • GOTHIC MOD Development Kit
  • modifizierte 3DS-Exporter aus dem Dev Kit (den alten Exporter überschreiben!!!)
  • 3D Studio MAX 3.1

2. Modellierung eines einfachen Levelmeshes

Aller Anfang ist schwer, und deswegen fangen wir mit etwas leichtem an. Ein einfacher Outdoor-Level für Gothic. Zunächst starten wir 3D Studio, mit dem wir unsere 3DS-Datei - das Levelmesh - erstellen werden.

  • a) Wir beginnen mit einer einfachen Plane mit den Massen 1000x1000, sowie einer Grid-Unterteilung von 3x3. Diese plazieren wir so, das sie genau im Koordinatenursprung liegt. Das stellt nachher den Boden unseres Levels dar.


  • b) Wir collapsen die Plane zu einem EditableMesh Objekt und öffnen den Material-Editor. Dort erstellen wir im ersten Slot ein Standard-Material mit dem Namen BODEN. In den Diffuse-Slot des Materials legen wir eine Bitmap. Im Dialogfeld wählen wir uns nun eine Textur aus dem GOTHIC MOD Development Kit\3DS MAX Stuff\Level-Texturen Verzeichnis aus, und zwar OtFlTile01.tga.

    Wir aktivieren das Kästchen "Show Map in Viewport' und weisen der Plane das Material zu. Auf den Modifier Stack legen wir noch einen UVW Map Modifier, Planar mit den Massen 200x200. Die Plane sollte jetzt in etwa so aussehen.

    Dies reicht auch schon für den ersten Test unseres Levels aus.


  • c) Nun exportiert man die Datei über File\Export.... Wir wählen als Dateityp 3DS aus als Speicherpfad GOTHIC\_WORK\DATA\MESHES\LEVEL\ auswählen. Als Namen für das 3DS nehmen wir MyLevel.3ds.

    Die Option Preserve MAX Texture Coordinates muss aktiviert sein, da sonst die Texturierung nicht korrekt übernommen wird.

    ansch

Wir haben nun ein einfaches Level-Mesh erzeugt und können es nun ins ZEN-Format umwandeln. Den Level sollten wir zusätzlich noch als MAX-Datei sichern.




3. Erstellung eines ZENs

Nun kommt der Schritt vom 3DS-File zum ZEN, dem Gothic-eigenen Level-Format (siehe hierzu auch ZenGin-Doku). Dazu benötigen wir den Gothic-Level Editor SPACER. Zunächst öffnen wir den zSpy (VERZEICHNIS) um Debug-Informationen erhalten zu können, falls beim Editieren des Levels Fehler auftreten. Danach starten wir den SPACER über die Gothic-Starter.

  • a) Als ersten Schritt laden wir nun unser 3DS über File/Open Mesh....

    und wählen aus GOTHIC\_WORK\DATA\MESHES\LEVEL\ die Datei die wir vorhin exportiert haben MyLevel.3ds


    b) Nach dem Laden muss das Mesh kompiliert werden, damit es angezeigt wird. Hierzu whält man aus dem Menü 'World' den Punkt 'Compile World'. Im folgenden Dialog stellt man die Eninge-Auswahl auf Outdoor, Editor-Mode aktiv und wählt den Button COMPILE.

    Das kann je nach Grösse des Levels und Kapazität des Rechners einige Zeit dauern.

    Jetzt wird unser Level auch im 3D-View angezeigt.Über die Cursor-Tasten kann man die Kamera bewegen.


    c) Jetzt speichern wir das Level-Mesh wieder. Es wird wieder ein 3DS gespeichert, aber es enthält diesmal die speziellen Material-Informationen für die Engine (Soundgeräusche, Opazität der Materialien usw.). In diesem Fall haben wir aber keine Materialdefinitionen angelegt. Im Menü File wählen wir nun Save Mesh... und überschreiben die alte 3DS-Datei MyLevel.3ds. Der 3DS-Export Vorgang kann eine Weile dauern, je nach Grösse und Komplexität des Meshes.


  • d) Jetzt muss der Spacer über den Befehl File/Reset "rebootet" werden. Dann wählen wir aus dem File-Menü wieder den Punkt Open Mesh... und laden unser neues 3DS-File MyLevel.3DS. Diesmal wird das Mesh wieder kompiliert, ABER der Editor-Modus wird im Dialog deaktiviert. Somit erzeugen wir kein 3DS File mehr sondern ein ZEN.

    In der 3D Ansicht hat sich augenscheinlich zu vorher nichts verändert.Es wird weiterhin "nur" die texturierte Fläche angezeigt.


  • e) Nun müssen wir noch einen Startpunkt zCVobStartpoint setzen. Hierzu gehen wir ins Fenster 'Objects' und selektieren aus der Liste den Eintrag 'zCVobStartpoint'.

    Dann klicken wir mit der rechten Maustaste in den 3D-View und wählen aus dem Kontextmenü 'Insert (zCVovStartpoint)'.

    Damit haben wir einen Startpunkt in den Level gesetzt.

    Jetzt verschieben wir diesen Startpunkt noch ein wenig, so das er ungefähr so sitzt wie auf dem unteren Bild. Hierzu selektieren wir das zCVobStartpoint Objekt im 3D-View und wählen 'Move selected vob' aus der rechten Toolbar aus (oder wahlweise die Taste 'M' drücken). Jetzt können wir das ausgewählte Objekte mit den Cursortasten ,den Tasten 'A' und 'Y' verschieben, und mit dem Sechser-Block (Einfg,Entf,Pos1,Ende,PageUp, PageDn) rotieren.


  • f) Jetzt können wir unseren Level mal ausprobieren. Hierzu wählen wir aus dem 'File'-Menü den Unterpunkt 'Save ZEN'.(Zu den Dateiformaten siehe auch Hinweise zu Spacer-Dateiformaten)

    Im Dialog darauf speichern wir den Level im Ordner GOTHIC\_WORK\DATA\WORLDS\ unter dem Namen MyLevel.zen. Als Dateiformat nehmen wir Compiled ZEN (ascii).


Somit hätten wir unser erstes eigenes ZEN geschaffen. Jetzt wollen wir uns doch auch einmal umschauen. Ist zwar noch nicht viel zu sehen, aber das werden wir später noch eingehender behandeln. Wir können den Spacer jetzt beenden.

WICHTIG:Nach dem Compile erzeugt der Spacer erneut ein 3DS. Er legt es aber im Ordner GOTHIC\_WORK\DATA\MESHES\ ab. Hier ist Handarbeit angesagt, und es sollte von dort in den Ordner LEVEL verschoben werden und man muss das alte überschreiben.

4. Erster Testlauf

Um den Level jetzt starten zu können, benutzen wir den Gothic-Starter. Zur Benutzung des Start-Programms siehe Der GothicStarter

Wir können uns nun unseren Level anschauen. Dazu müssen wir im GothicStarter. Nach dem Laden sollte es ungefähr so aussehen.

Sieht ein bisschen leer und dröge aus, wie ? Aber daran werden wir im nächsten Abschnitt was ändern..




5. Ein Portalraum

Jetzt werden wir erstens unseren Level ein wenig grösser machen, 10x10 ist ja ein bisschen wenig, und zum anderen werden wir einen Portalraum in diesen Level modellieren.

  • a) Zuerst starten wir wieder 3D Studio MAX und laden unsere Level-Datei wieder ein (na ? abspeichern vergessen ? In diesem Fall nochmal von vorne anfangen :) ).

    Jetzt vergrössern wir erstmal den Level indem wir die 4 Eckpunkte weiter auseinander ziehen, bis unser Levelmesh in etwa so aussieht.


  • b) Nun verziehen wir die innersten 4 Punkte (die in der Mitte diese Quad bilden) so wie auf dem Bild unten angegeben. Dies stellt die Ausgangsbasis für den Portalraum dar.


  • c) Jetzt modellieren wir erstmal die Aussenseite des Portalraums zurecht wie auf der folgenden Abbildung (ein einfaches Extrudieren um ca. 300-350 Units des Quads reicht da aus).


  • d) Mit Hilfe von Divide Edge und Verschieben von Vertices erzeugen wir in der langen Wand ein Quad, das uns später als Durchgang in den Innenraum dienen wird.


  • e) Nun wirds hart... :). Wir extrudieren jetzt ausgehend von unserem "Durchgang" den Innenraum des Portalraumes. Zunächst selektieren wir die beiden Triangles (oder das Quad) die den Durchgang bilden. Diesen extrudieren wir ca. 50.0 Einheiten nach innen.

    Dann extrudieren wir die Fläche erneut um 1 Einheit nach innen, dies wird die erste grosse Innenwand werden. Dann skalieren wird die Fläche in der Breite und verziehen die 4 Eckpunkte so, das sie ein Rechteck bilden (s. Abbildung).

    Und nochmal wird die selektierte Fläche nach innen extrudiert. Jetzt erkennt man bereits denn Innenraum. Sie sollte soweit extrudiert werden, das wir ungefähr überall die gleiche "Mauerdicke" haben.

    Damit hätten wir unseren ersten Schritt zum Portalraum getan. Der Raum selbst ist fertig. Es ist darauf zu achten, das wie in der Zengin-Dokumentation zum Portalraum, keine Polygone oder Vertices die "Aussenwand" unseres Raumes durchdringen. Jetzt können wir auf das gesamte Objekt einmal den UVW-Map Modifier anwenden, und zwar als Box-Mapping.

  • f) Jetzt kommt der Trick mit den Portalen. Wir müssen 2 Polys in den Durchgang ziehen, der die Aussenwelt vom Portal trennen soll. Hierzu bauen wir ein Polygon mit dem Befehl 'Create' in den hinteren Teil unseres Durchgangs.

    Dieses Poly bekommt ein besonderes Material zugewiesen, das es als Portal-Polygon klassifiziert. Wir erstellen im Material-Editor ein Standard-Material mit dem Namen P:_ROOM1 (zur Nomenklatur von Portal-Polygon siehe ZenGin-Doku). Während das Portal-Polygon noch selektiert ist, wird das Material diesem Sub-Object zugewiesen (3D Studio erstellt automatisch intern ein Multi-Material für das gesamte Mesh).

    Um das Polygon für die andere Seite des Portals zu erzeugen, klicken wir einfach bei gedrückter SHIFT-Taste und aktiviertem Move-Modus in 3D Studio auf das P:_ROOM1-Polygon und wählen im Dialog "Clone to Element" aus und flippen dieses neue Polygon. Dann erstellen wir ein weiteres Standard-Material, diesmal mit dem Namen P:ROOM1_ und weisen es dem nach innen zeigenden Portal-Polygon zu.

    Jetzt sollten noch die Vertices der Polygone verschmolzen werden. Am einfachsten geht das, indem man im Vertex-Modus aus dem Menü Edit/Select All auswählt und dann in der Toolbar Weld Selected. Damit das Portal-Polygon auch richtig "funktioniert" muss es planar sein. Daher wählen wir im Polygon-Modus den Button Make Planar (sofern das Portal-Polygon noch selektiert war).

    g) So sollte es dann abschliessend aussehen. Jetzt können wir die MAX-Datei wieder speichern und ein neues 3DS-File für unseren Level exportieren. Wir überschreiben einfach das alte 3DS-File im GOTHIC\_WORK\DATA\MESHES\LEVEL\-Verzeichnis.

Anmerkung: Damit im Level später die Portalpolygone nicht bunt schimmern, wenn man sich weiter von ihnen entfernt, kann man den Materialien der Portale auch noch eine Diffuse-Bitmap zuweisen. Von der Optik her eignet sich OC_W_FARDOOR_128.TGA, die sich im selben Verzeichnis befindet wie die Boden-Textur.

6. Einfügen von Objekten

Wir brauchen nun wieder den Spacer, um unser neues Level-Mesh in das ZEN-File was wir im ersten Schritt erstellt haben einzubinden. Dies geht auf folgende Weise:

  • a) Im Menü File wählen wir die Option Open ZEN.... Im folgenden Dialog stellen wir den Dateityp auf World uncompiled(*.zen). Das führt dann dazu, das beim Einladen des ZENs nicht die Mesh-Daten aus dem ZEN sondern aus dem entsprechenden 3DS gelesen werden.

  • b) Nach dem Laden als Uncompiled ZEN erscheint der Dialog für Compiled World automatisch. Hier deaktivieren wir die Option Editormode und wählen Compile.

  • c) So sieht dann der Level mit dem neuen Mesh aus. Wie man sieht, werden die Polygon-Portale nicht angezeigt. Das ist auch gut so, denn dann haben wir alles richtig gemacht. :)

  • d) Damit der Level nicht wieder so unglaublich laaaaaangweilig ist, werden wir nun noch ein Objekt setzen. Und zwar eine Bank. Vor dieses schmucke 1-Raum-Eigenheim, was wir da aus dem Boden gestampft haben. Als erstes aber, verschieben wir den Startpunkt wieder ein wenig, wir wollen ja nicht direkt im Haus anfangen. Also, zCVobStartpoint selektieren, M für Verschieben drücken und das Objekt vor die Hütte manövrieren.

  • e) Jetzt werden wir unsere Bank plazieren. Dazu begeben wir uns zum Objects-Fenster. Hier öffnen wir die Liste die mit oCVob(abstract) beschriftet ist. Dann hangeln wir uns über oCMOB hinunter bis zu oCMobInter. Das ist es, was wir haben wollen. Wir selektieren den Eintrag mit einem Linksklick.

    Dann klicken wir wie beim Startpunkt ein paar Seiten vorher mit der rechten Maustaste in den 3D-View und wählen Insert (oCMobInter). Dies erzeugt eine Koordinaten-Axis mit dem Vermerk 'oCMobInter' im Fenster.

    Nun mussen wir noch ein paar Felder im Objects-Fenster füllen. Siehe hierzu folgende Abbildung:

    Für den Eintrag unter visual: wählt man den Menüpunkt aus, und sucht dann über den Button File das entsprechende File heraus. In diesem Fall findet man es unter GOTHIC\_WORK\DATA\ANIMS\MDS_MOBSI\ und es hat den Namen BENCH_1_NC.MDS. In dem Ordner befinden sich noch weitere Objekte. Man kann sowohl Mesh-ASCIIs, Mobsi-MDS und 3DS-Files als Visual angeben.

    Nach einem Klick auf Apply werden die Daten aus der Eingabemaske verarbeitet und nach kurzer Ladezeit, sollte ungefähr so etwas im 3D-View erscheinen (ausser man hat natürlich ein anderes Visual ausgewählt).

    Jetzt sollten wir die Bank auch noch an eine passende Stelle manövrieren. Hierzu benutzen wir wieder die Taste M und schieben unsere Bank mit vereinten Kräften Richtung Häuschen und auf den Boden zu. Fertig.

Jetzt haben wir unseren Level um einen Portalraum erweitert und ein Objekt eingefügt. Zeit, uns das mal wieder im Spiel anzugucken. Diesmal gucken wir aber, das es nicht mehr so dunkel ist. Wir wählen aus dem Menü World den Punkt Compile Light und aktivieren das Vertexlighting only. Das geht schnell und sieht ok aus, zumal wir ja noch keine Lichtquellen gesetzt haben.

Danach können wir wie gehabt den Level speichern, als Compiled ZEN(ascii). Und nicht vergessen, das 3DS aus dem GOTHIC\_WORK\DATA\MESHES\-Verzeichnis hinterher wieder in den LEVEL-Unterordner zu kopieren. :)