Algorithmus: Highmap shift

Lesezeit: 3 Minuten

Eine sinnvoller Filter speziell zur Anpassung von High-Maps ist das Verschieben der Minimal- und Maximal-Werte (Schwarz bis Weiß) des Bildes. So kann ich zwei später High-Maps addieren, die unterschiedliche Höhenskalierungen haben.

Im Artikel Mission on Mars: UV-Map generieren addiere ich zu meiner Sandstruktur ein paar Unebenheiten. Dazu verschiebe ich zwei Highmaps in den Bereich 0 – 250 bzw. 0 – 5.

Anschließend addiere ich diese Maps und erhalte eine wohlgeformte Highmap von 0 bis 255. Hier erst mal das Verschieben (Shifting).

Grundsätzliches

Einer High-Map sieht man ihre Höhe ja nicht an. Addiere ich zwei Highmaps, die unterschiedliche Höhenskalierungen haben, so ist ggf. eine Map der anderen anzupassen.

Die seamless-Eigenschaft bleibt erfreulicherweise erhalten, da lediglich pixelweise die Graustufen verschoben werden.

Die Verschiebung funktioniert nur auf Graustufen-Bildern.

Ablauf

Standard ist eine Farbverteilung von 0 (ganz unten) bis 255 (ganz oben).

Der Algorithmus findet Minimum und Maximum des Bildes und passt diese Werte einem parametrierten Intervall an. Das gefundene Minimum im Bild wird auf den übergebenen unteren Wert des Intervalls gesetzt. Das Maximum vice versa. Die Zwischenwerte entsprechend skaliert.

Implementierung

Zwei Parameter:

  • Intervall (default: 0 bis 255) low, high

Anwendung

Anwendung auf mein Wolkenbild mit Seed 6:

HighmapShift 0, 255

HighmapShift 0, 127

HighmapShift 127, 250

Weiterführende Links

Diese nützliche Verschiebung dient mir speziell beim nächsten Algorithmus sehr: dem Addieren zweier Highmaps – Operation: Highmap addieren.

PHP-Code

Wie gewohnt die Klasse im Source-Code:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.