HeightMap

Moderatoren: _509_, Philli, Mindwar

Gesperrt
_509_
Site Admin
Beiträge: 720
Registriert: Donnerstag 25. März 2004, 09:50

HeightMap

Beitrag von _509_ »

HeightMap

Definition HeightMap

Eine HeightMap ist ein Pixelbild (meistens quadratisch).
Aus den Werten dieses Bildes generiert das CB-Programm das Gelände.
Dieses Bild setzt sich aus Pixel zusammen, welche 256 unterschiedlíche Farb- bzw. Grau(stufen)werte haben können.
Damit CB eine HeightMap als solche erkennt, muss dem Namen der Bitmap "1." (z.B. 1.HS_heightmap.bmp) vorangestellt werden. Der Name selbst beinhaltet zumeist "heightmap", ist aber ansich völlig beliebig.
Diese Werte sind in sogenannten Farbtabellen definiert (s. Screenshot)

Bild
Screenshot Photoshop

Die Farben sind in der Tabelle von "0" bis "255" durchnummeriert (Indizierte Farben).

Jedem (Farb-)Wert in der Tabelle entspricht eine bestimmte Höhenangabe
in CB der des Geländes eines Venues.
Die GameEngine von Clusterball erzeugt das Gelände während des Spieles auf Grundlage einer solchen HeightMap mit 128 x 128 Pixel.
Entsprechend ist auch das Gelände in 128 x 128 Felder eingeteilt.

Code: Alles auswählen

Farbindex Farbwert(R G B) Höhenwerte (CB-Einheiten) Farbe

0         0   0   0       0 (Höhe InfinityMap)      Schwarz
128       128 128 128     16384                     Mittelgrau
255       255 255 255     32256 (Max. Höhe)         Weiss
In einer Farbtabelle mit Graustufen entspricht der Farbindex den RGB-Werten.
Deswegen spricht man auch vereinfachend von z.B. einem "Grauwert 128" bei RGB 128 128 128.

Dieses AnimatedGif soll der Veranschaulichung dienen.
Es werden immer nur Pixel eines einzigen Grauwertes dargestellt.
Analogie:
> Geländekarte - je näher Höhenlinien beieinander liegen, desto steiler das Gelände.
> Animation - je langsamer Konturlinien "wandern", desto steiler das Gelände.
Die in diesem Photoshop-Filter angezeigten Konturwerte entsprechen den Grauwerten
und damit den Höhen:

Bild
Screenshot Photoshop

Anm.: Bei dem höchsten Gelände der "alten" Venues in Ruhrmansk liegt der Grauwert bei 185.
Wie in der Animation zu sehen ist, ist in HelterSkelter bei 253 der höchste Geländepunkt erreicht.
Die maximale Höhe eines Geländes wird durch den Grauwert 255 definiert.
Bei einem Grauwert von 255 kann das Gelände gerade noch überflogen werden.


Bild
Original HeightMap HelterSkelter 4x vergrössert

TIP: Die HeightMap kann auch in 3D-Programmen verwendet werden, welche solch eine Funktion beinhalten. Z.B. um dort den Schattenwurf des Geländes oder anderer Objekte für die ColorMap zu berechnen.

TIP: Eine gute Alternative zu Bildbearbeitungsprogrammen, um Heightmaps zu erstellen:
hme


TIP: Für das Bearbeiten von HeightMaps in Bildbearbeitungsprogrammen:
(im Photoshop:) Als Zeichenwerkzeug eignen sich Pinsel (mit weichem Rand) und Stift.
Mit Farbverläufen (Gradienten) lassen sich am einfachsten gleichmässige Geländesteigungen erzeugen.
Als Bearbeitungswerkzeuge eignen sich "Weichzeichner", "Wischfinger", "Schwamm", "Abwedler" und "Nachbelichter",
sowie die Filter zum Weichzeichnen (z.B.: Gaußscher Weichzeichner)
und alle unter dem Menü "BILD" zu findenden Funktionen in "Einstellungen".



LockMap

Die Lockmap ist ein Pixelbild vom Typ *.bmp mit Indizierten Farben (8 Bit).
Ihre Abmessungen entsprechen denen der HeightMap.
Damit CB eine LockMap als solche erkennt, muss dem Namen der Bitmap "3." (z.B. 3.HS_lockmap.bmp) vorangestellt werden. Der Name selbst beinhaltet zumeist "lockmap", ist aber ansich völlig beliebig.

In diesem Bitmap wird durch Farben bestimmt, wo und wie die Geländeeigenschaften sein sollen.
Weiss - Gelände ist sichtbar / Kollision
Rot - Gelände nicht sichtbar / Keine Kollision (durchfliegbar)
Blau - Gelände sichtbar / Keine Kollision
Grün/schwarz - Bislang hat niemand herausgefunden, was diese Farbe bewirkt.

Wirklich genau lassen sich Geländeöffnungen nicht damit erzeugen
(Es spielt eine Rolle, ob Pixel an Positionen mit geraden oder ungeraden Zahlen plaziert werden).
Die blauen Ränder werden teilweise zur Korrektur gebraucht.
Wie das genau funktioniert, müsst Ihr schon selbst ausprobieren!

Die Bildfolge zeigt in 4facher Vergrösserung
> nur die HeightMap
> die HeightMap mit den roten und blauen Feldern der LockMap (Geländeöffnungen)
> Farbumkehrung der HeightMap
> nur die LockMap

Bild

TIP: Das menschliche Auge ist besser in der Lage geringe Helligkeitsunterschiede im hellen, als im dunklen Bereich zu unterscheiden. Zur Bearbeitung der HeightMap die Farben zu invertieren ist oftmals von Vorteil!

Anm.: Der Kanal wurde nicht durch die HeightMap erzeugt, sondern durch Anwendung der LockMap (Geländeausschnitt) und einem Objekt.
Die CB-Engine wäre damit nicht klargekommen (->Abnormal Termiation) und manche Kanten wären gezackt.
Um die Bewegungsfreiheit unterhalb des Geländes einzuschränken, werden Objekte (wie in HelterSkelter) oder Bahnen mit geschlossenen Profilen (wie in PolePosition) benötigt.
Das Gelände ist einseitig (von unten nach oben) durchfliegbar.



Terrain-Abmessungen

Um ein Grössenverhältnis zwischen dem Gleiter, der ja immer gleich gross ist, und dem restlichen Venue zu erhalten, wurde von folgender Annahme ausgegangen:
Die Breite des GleiterCockpits (gemessen an den unteren Ecken Cockpit-Inlet) : 94 CB-Einheiten. Auch im Vergleich zu CB-Renderings entsprechen

96 CB-Einheiten = 1,5 m


Daraus ergeben sich folgende Abmessungen des Geländes:

Bild
Schematische Geländedarstellung

In X- und Y-Richtung hat das Gelände die Abmessungen von 128 x 2028 = 262144 CB-Einheiten
Umrechnung in Meter: (262144/96) x 1,5 = 4096 m

In Z-Richtung (Höhe):
Von einer Graustufe zur nächsten besteht ein Unterschied von 128 CB-Einheiten.
Damit kann das Gelände maximal 255 x 128 = 32640 CB-Einheiten hoch sein (510 Meter).
Beispiel:
In der HeightMap wird der Grauwert 10 (20) verwendet -> Das Gelände ist 1280 (2560) CB-Einheiten hoch.

Terragen: die HeightMap muss 129 x 129 Pixel betragen.
Die Geländeabmessungen müssen dort trotz des einen Pixels mehr eingestellt werden auf 4096 x 4096 m.
Im Terragen werden die 128 Felder durch 129 Punkte (einen Anfangspunkt und die 128 abschliessenden Punkte) definiert.

CB: die Map ist zwar 128x128
- genutzt werden aber nur 127x127 - muss beim "linken" und "unteren" Rand der HeightMap berücksichtigt werden!
hinzukommt, dass CB den oberen und rechten Rand intern um ein Pixel ergänzt!!!


Problematisch

Das Venue HelterSkelter ist als Beispiel zur Erläuterung der Problemzonen von Geländen gut geeignet, weil es CB soweit ausreizt, das es gerade noch so keine Abnormal Termination gibt.
Zum einen durch extrem steile Hänge an Berg, Vulkan und Damm.
Ausschnitte aus dem Gelände (Kanal und Tunnel).
Scharfe Geländekanten (Fliegenfalle, Damm)

Vereinfachend kann zur Geländegestaltung gesagt werden:
Je mehr Erhebungen ein Gelände aufweisst,
je grösser die Höhenunterschiede der Erhebungen sind
und je steiler die Hänge dieser Erhebungen sind,
desto eher kommt die CB-GameEnigne damit nicht mehr klar (->Abnormal Termination).

Geländebesonderheiten
> Senkrechte Gelände"wände" sind nicht möglich.
> Abkantungen (wie bei dem Damm) können nur parallel zu den Geländekanten bzw. -achsen glatt dargestellt werden oder in Richtung der in der Abbildung "Schematische Geländedarstellung" gestrichelten Linien (Kanten der Dreiecksflächen).
Kurz: Zur Darstellung von pyramidenförmigen Geländeerhebungen ist die HeightMap nicht geeignet.
> Zu steile Hänge
Folgende Fehler können auftreten, wenn in der HeightMap benachbarte Pixel einen zu grossen Werteunterschied aufweisen:
- Gelände ist zu sehen, aber durchfliegbar
- Gelände ist nicht sichtbar, aber die Kollision findet statt.
- Die Darstellung des Geländes kann wechseln. Flächenecken scheinen in der Höhe zu verspringen.
In HelterSkelter betragen die Wertunterschiede an steilen Hängen ca. 30, manchmal auch ca. 40.
Bei grösseren Unterschieden verursacht CB gerne ATs.
Ausserdem unschön: Je steiler ein Gelände verläuft, desto mehr wird die ColorMap (wird von oben auf das Gelände projeziert) "gestreckt".
> Hügel, Gruben und Gräben
CB berechnet das Gelände aufgrund der HeightMap eines Venues.
Zur Graphikbeschleunigung wird die Geländedarstellung mit zunehmender Entfernung zum Betrachter immer weiter vereinfacht. Dadurch entstehen die wechselnden Geländeformen bei Anflug.
Unangenehm fallen kleine bzw. schmale Geländeerhebungen und -vertiefungen auf, weil sich bei diesen die "Glättung" am schnellsten bemerkbar macht.


LINKS

Terragen-Plugins zur Erstellung von Height- und Colormaps
Empfehlenswert zur Erstellung von Heightmaps:
hme - Eine gute Alternative zu Bildbearbeitungsprogrammen, um Heightmaps zu erstellen"
TerraFormer2 ist ein Programm, mit dem man auch außerhalb von Terragen die Terraindateien bearbeiten kann. Es bietet einige Filter (u.a. Erosion) und mehrere Importfunktionen für Bitmaps..."
World Machine - Ein weiteres Tool um realistische Terrains zu erstellen
Interessant: 3DEM ist nun Freeware. Die aktuelle Version 16.6 kann auf der Seite von Visualizationsoftware runtergeladen werden. Mit 3DEM können Satellitenkarten in das Terragen *.ter Format umgewandelt werden.
Auch hier besteht eine Anwendungsmöglichkeit für VRML
Beispiel:
Bild
Screenshot - VRML-Viewer
Gesperrt