Erstellen von Elevated Mesh Szenerien - ein Tutorial

insbesondere für Benutzer von FSRail

von Burkhard Renk

Vorweg: Das Folgende ist das Ergebnis eines Lernprozesses, der bei weitem nicht abgeschlossen ist. Ich wurde von vielen Freunden gebeten, soviel wie ich weiß, denke und vermute aufzuschreiben wie möglich. Einiges mag sich später als falsch erweisen - es irrt der Mensch, solang er strebt.

Mit dem Erscheinen von FS2000 hat sich die Geländestruktur vollständig geändert. Anstatt flacher Kacheln -Tiles genannt, auf denen sich dreidimensionale Objekte erheben können, besteht der Grund nun aus einem im dreidimensionalen Raum aufgehängtem Netz, dem "Elevated Mesh". Wenn im folgendem von "Mesh" geredet wird, meine ich genau dies. Um einen Vergleich mit dem Bau von Modellbahnen zu ziehen: FS5-FS98 bauten auf flachen Brettern, FS2K-FS??? bauen frei im dreidimensionalen Raum.

Praktisch alle Zusätze, die es für FS5, FS95 und FS98 gab, sind dadurch obsolet geworden. Sobald es sich um Grundszenerie handelt, gibt es keine Möglichkeit eines Patches oder Updates, es muß von Grund auf neu gebaut werden. Das war schnell klar. Um den Übergang einfacher zu machen, gab Microsoft die "Flatten"-Befehle mit, die es erlauben, eine gewisse Fläche auf einer definierten Höhe platt wie eine Briefmarke zu machen. Das sieht dann zwar nicht echt aus, erlaubt aber wenigstens, die alten 3D-Objekte, Flughäfen, Häuser, 3D-Berge, FS98-artiges-Mesh auf diese Ebenen zu setzen und so die alten Zusätze weiter zu verwenden. Die meisten Zusätze, die heute in den Geschäften zu kaufen sind, benutzen diese Technik und damit FS2000 als nicht anderem als einem langsamen FS98-Emulator, der, wenn es hoch kommt, wenigstens 16bit Texturen darstellt.

Sehr schnell war klar, daß die in FS98 vorhandenen Befehle für das Netz (TexRelief...) für das neue Netz nicht benutzt wurden. Welche Dateien die Netzinformation enthalten, und wie sie aufgebaut sind, ist unbekannt. Ich vermute, es sind die Dateien unter \scenedb\. Weder gibt es zur Zeit ein Tool, daß diese lesen kann, noch kann man diese schreiben oder verändern. Es wurde bekannt, daß dieses Mesh auf Höhenpunkten im Abstand von etwa 1 km beruht. Wenn man weiß, daß die einzigen frei weltweit verfügbaren digitalen Höhendaten im 30-Sekunden-Raster existeiren, welches etwa 900 m entspricht, ist davon auszugehen, daß diese auch für das FS2000-Mesh verwendet wurde.

So vergingen die ersten Monate des Jahres 2000 mit Probieren, was man mit dem Flatten erreichen kann. Zaghafte Modifikationen des Terrains konnte man durch Elevation Polygone erreichen.

| Größtes Problem ist oft die grobe Auflösung des Netzes. Zwischen zwei 900m entfernten Höhenpunkten ist viel Platz, da paßt ein steiler Felsen und ein tiefes Tal rein. Gerade die langgezogenen, tiefen Täler sind ein besonderes Problem - man sehe sich den Rhein oder den Nil im FS2000 an. Ob die Meshpunkte unten im Tal oder oben auf den Bergen liegen, ist bei steilen Kanten rein zufällig, und dazwischengelegte Vierecke müssen wild im Raum springen. Mit einem 1-km Netz kann man nur Objekte, die viel größer als 1 km sind, also mindestens 5km, sinnvoll formen. Dieser Auszug aus FSMesh - ein Teil des Rheintals - zeigt die Wurzel des Problems. Man sieht die Netzpunkte des 30-Sekunden Netzes, die Höhe ist in Farben kodiert. Blau ist unter 100m, braungrün oberhalb 400 m. Bei genauer Betrachtung sieht man den blauen Streifen des Rheins. Wenn man aber nun sich überlegt, was irgendein Algorithmus aus diesen wenigen Information macht, ist klar, daß kein ordenlich geformtes Tal entstehen kann - es ensteht eine Hügellandschaft mit eingesprengten Seen auf unterschiedlicher Höhe. Da hilft alles Schimpfen auf die "böse Microsoft" nichts - aus den Daten ist nicht mehr zu holen.

Die Situation änderte sich im Sommer 2000. Microsoft veröffentlichte - in der Reihe der SDK (Software Developper Kit?) - den Terrain SDK. Wer hoffte, daß darin Information zu finden sei, die es erlaubt, die Mesh-Dateien zu lesen, war enttäscht. Der SDK bestand aus vier kleinen Programmen und einem Tutorial, daß beschreibt, wie man diese nutzt. Im folgenden gehe ich davon aus, daß der Leser sich diese Tools geladen hat und für eigene Experimente zur Verfügung hat. FSRail und FSMesh-Benutzer sollten sie in das ..\Terrain - Verzeichnis kopieren. Die folgende Tabelle beschreibt die 4 Programme - für weitere Details muß man das SDK-Tutorial lesen.

Programm | Eingabedateien | Ausgabedateien | Funktion
resample.exe | DEM-Datei INF-Datei | TMF-Datei | Ein DEM, dessen Eigenschaften in der INF-Datei beschrieben werden, wird gelesen und in eine TMF-Datei umgewandelt. Die Auflösung der TMF-Datei wird mit dem Parameter LOD in der Inf-Datei festgelegt.
tmfcompress.exe | TMF-Datei | TMF-Datei | Eine TMF-Datei wird komprimiert. Ich habe den Eindruck, daß dabei benachbarte kleine Flächen gleicher Ausrichtung zu größeren zusammengefaßt werden.
tmfmerge.exe | mehrere TMF-Dateien | TMF-Datei | Faßt mehrere TMFs zusammen. Von mir bisher nicht benutzt.
tmf2bgl.exe | TMF-Datei | BGL-Datei | Vor den TMF-Block wird ein BGL-Kopfteil geschrieben - diese Datei kann FS2000 benutzen.

| Zur Erklärung: DEM heißt wohl Digital Elevation Map und ist ein Feld von Höhenangaben im festen Raster. TMF ist ein Terrain Mesh File und ist eine Art DEM plus zusätzlicher Information plus zusätzlicher eingebauter Komprimierungsoption. Die nebenstehende Tabelle ist dem SDK entnommen und zeigt die Bedeutung des Parameters LOD. Die CPU-Last und der Speicherverbrach vervierfacht sich bei Erhöhung von LOD um 1, falls nicht die meisten Flächen bei dem Kompression zusammengefaßt werden können.

Das Erstellen von Mesh-Szenerie geht damit wie folgt:

- Zu einem DEM schreibt man eine INF-Datei, die seine Lage, Auflösung, Format usw. beschreibt. Dies ist eine reine Text-Datei.
- Mit "resample.exe beispiel.inf" wandelt man diese um in eine TMF-Datei.
- Mit "compress beispiel.tmf beispiec.tmf" komprimiert man diese.
- Mit "tmf2bgl beispiec.tmf beispiel.bgl" erzeugt man eine BGL-Datei.

Also ist alles, was man braucht, ein DEM. Das ist auch eigentlich kein Problem. Bekanntlich ist die Welt der EDV und des Internets streng demokratisch und besteht aus 51 Regionen. Für alle 50 US-Bundesstaaten gibt es höherauflösende DEMs (im 15-Sekundenraster oder im 5-Sekundenraster.) Zum Ende des Sommers gab es dann auch für die meisten dieser 50 Staaten breits hochauflösende Szenerien, die zu fliegen eine große Freude ist - wenn die Hardware mithält - und die zeigen, was in der Terrain-Maschine von FS2000 steckt.

Ein Vergleich der mit dem SDK erzeugten BGLs mit Dateien von der FS2000-CD scheint nahezulegen, daß das SDK-Mesh eine andere Struktur als das CD-Mesh hat, das CD-Mesh also nur eine vorübergehende Notlösung war - vielleicht wurde es deshalb nie dokumentiert?

Noch offene Fragen? Ach ja, die 51. Region namens Rest der Welt. Wer so glücklich ist, in einem US-verwalteten Land zu leben, z.B. Guam, hat auch kein Problem. Und - gibt es ausserhalb überhaupt noch echte Menschen? Kann doch nicht sein, daß eine DEM-Datei von 5 Sekunden Auflösung pro GradxGrad 5000 britische Pfund kostet.

Es gab verschiedene Versuche, höherauflösende Daten zu bekommen, aber sie scheinen für Europa nicht zu existieren, oder sie sind Verschlußsache. Die Endeavour hat im letzten Winter die ganze Erde im 1-Sekunden-Raster vermessen, bis diese Daten analysiert sind, wird es 5 Jahre dauern. Und ob es sie dann frei gibt? Es gibt in Deutschland DHM-Dateien im 100m - Raster, aber ich kann nicht sagen, wie man dan diese kommt.

Also muß man aufgeben oder sich was einfallen lassen. Die Idee, die ich hier vorstellen möchte, ist die folgende: Es gibt im Buchhandel preiswerte CDs mit hochauflösenden topografischen Karten. Im Maßstab 1:50000 sind 2 cm=1km oder 1 pixel=ca.10m. Das ist genauer als die Endeavour Daten, und jetzt verfügbar. Also muß ein Weg gefunden werden, die Höheninformation aus dieser Quelle in DEM-Form zu bringen. Dabei liegt die Höheninformation meistens in Form von Höhenlinien vor, plus einiger Gipfel.

Nun besaß FSRail bereits einen Weg, Information von Hintergrundbitmaps in Form bunter Marker zu vektorisieren. Es war nicht viel neuer Code nötig, um mit dem gleichen Interface trigonometrische Punkte, die aus geografischer Breite, Länge und Höhe bestehen, mit einem Mausklick erzeugen zu könnnen. Diese Punkte - als Vektoren unabhängig von jedem Gitter, können ein Gelände genau beschreiben. Sie sind Bestandteil des FSRail-Codes, werden mit diesem abgespeichert. Je mehr man davon legt, umso genauer beschreibt man das Terrain.

Ein Rechenalgorithmus berechnet dann aus diesen Vektoren ein neues DEM, dieses wird zusammen mit der dazugehörigen INF-Datei gespeichert. Die Programme aus dem SDK verwandeln dieses DEM in eine BGL-Datei.

| Schon der allererste Versuch war verblüffend. Hiefür hatte ich das Flußufer mit blauen Fähnchen markiert, entlang des Ufers trigonometrische Punkte von 67m Höhe gelegt, die für dieses Tal characteristische 200m - Höhenlinie sowie einige Berggipfel in Form von trigonometrischen Punkten eingetragen, ein 256x256 DEM erzeugt, die Flußpolygone zwischen den Fähnchen nachgezogen, die MS-Szenerie ausgeschaltet - fertig. Ein paar Stunden Arbeit (nach den vielen Programmierstunden für das Programm). Einen wesentlich größeren Ausschnitt gibt es - mit fahrenden Zügen im Flußtal - unter www.fsrail.com zum Laden.

Einige Tips:

Will man eine Fläche exakt eben haben, z.B. um ein Grundpolgon oder eine Bahnlinie ohne hohen Damm oder einen Flughafen ohne Flatten zu legen, sollten die diese Fläche umgebenden trigonometrischen Punkte dicht beisammen liegen - dichter als der Abstand zu nächsten Höhenlinie. Eine hohe DEM-Auflösung macht nur dann Sinn, wenn wirklich viel dichte Information vorhanden ist. Bei 512x512er DEM und 6000 trigonometrischen Punkten dauert die Berechnung des DEM etwa 5 Minuten auf meinem System. |

Eine wesentlche Einschränkung: Mesh-Szenerien kann man nach meinem Wissen nicht ersetzen, wähend FS2000 läuft. Versuche, es doch zu tun, werden bei Windows 98 in der Regel mit Reboots im abgesicherten Modus bestraft - und dann war das Schicksal noch immer gnädig mit einem.

Um diese Funktionen zu nutzen, sollten sich die vier Programme des Terrain SDK im Verzeichnis ..\terrain befinden. Wir editieren die Datei Terrainmaker.bat und setzen die Pfade richtig.

Die Mesh-Funktionen von FSRail sind im Menü "Mesh" zusammengefaßt.

- Höhenwert wählen. Die folgenden trigonometrischen Punkte werden mit diesem Wert erzeugt. Der Bitmapmodus erzeugt trigonometrische Punkte, bis wieder die Farbe eines Markers gesetzt wird.
- Trigonometrischen Punkt setzen. Im Normalmode einzelne trigonometrische Punkte setzen.
- FS DEM berechnen. Ein neues DEM namens ..\terrain\terrain.dem und eine Informationsdatei ..\terrain\terrain.inf werden erzeugt.
- Im Normalmodus erlaubt ein Rechtsklick auf einen trigonometrischen Punkt, diesen zu verändern.
- Im Bitmapmodus erlaubt ein shift/Linksklick, den zuletzt gesetzten trigonometrischen Punkt wieder zu löschen. Ein strg-Linksklick erlaubt. ihn zu verschieben.

Ein mit FS DEM erzeugtes DEM kann dann mit Hilfe der SDK Werkzeuge in Szenerien verwandelt werden. Wenn Sie die DEMs behalten wollen, benennen sie diese von Hand um.

Nun ist FSRail dazu gedacht, neben dem Speicherfresser FS2000 gleichzeitig laufen zu können. Eine Erweiterung von FSRail auf 1024x1024er Mesh hätte seine Größe fast verdoppelt. Eisenbahnen in so schwierigem Gelände werden eh meistens kleiner als 20x20 Minuten pro Szenerie sein, sodaß 512x512 ein DEM besser als 4 Sekunden erzeugt - genug für Thunderbird und Pentium IV. Deshalb entschied ich mich, für den Entwurf größerer Meshs ein separates Programm - entrümpelt von allem "Eisenbahnballast" - in der Entwicklung abzuzweigen - FSMesh.