Heightmap-basiertes Gelände mit einer Straße

12

Wie lässt sich ein Detail-Feature wie eine Straße in einem auf einer Höhenkarte basierenden Gelände am besten implementieren?

Bildbeschreibung hier eingeben

Update: Es ist ein bisschen schwer im Bild zu sehen, aber die Straße steigt von der Oberseite des Steinbruchs ab, um ihre Basis zu schaffen.

Adam Kane
quelle

Antworten:

14

Was bei Bildern großartig ist, ist, dass sie normalerweise bis zu 4 Kanäle (Rot, Grün, Blau und Alpha) einbetten. Da eine Höhenkarte nur eine Dimension benötigt, können Sie einfach den roten Kanal zum Speichern der Höheninformationen verwenden (Sie haben noch 256 Ebenen für die Höhe) und dann andere Kanäle für andere Zwecke verwenden (z. B. den grünen Kanal zum Kartieren der Straßen verwenden) , blauer Kanal für Wasser / Feuchtigkeit) etc ...

Auf diese Weise können Sie sicherstellen, dass beim Bauen Ihres Geländes die Zonen, in denen eine Straße gebaut werden soll, flach angezeigt werden, anstatt dem Höhengradienten zu folgen.

XGouchet
quelle
1
Ist es möglich, ein HDRI-Bild zu verwenden, um mithilfe von Gleitkommazahlen genauere Höheninformationen zu speichern?
Quazi Irfan
1
HDRI-Bild ist kein Dateiformat, sondern ein Konzept. Sie können jedoch bestimmte Dateiformate verwenden, um eine höhere Genauigkeit zu erzielen. Dies hängt hauptsächlich von Ihrer Hardware / Software ab, es gibt jedoch ein Float-RG-Image, das Sie entweder auf 32 oder 64 Bit speichern können. Unabhängig vom Format können Sie jedoch bei Verwendung von mehr Bits pro Kanal int-Werte immer in Gleitkommazahlen wie folgt konvertieren: f = (v / 256.0) wobei f Ihr Gleitkomma ist, v der aktuelle int-Wert
XGouchet
Ist es eine gute Idee, alle statischen Objekte einer Karte auf einer (Höhen-) Karte zu speichern? wie Vegetation, Laub, Haus? oder Zeiger, auf die ein anderes Objekt platziert wird? oder gibt es einen anderen weg?
Quazi Irfan
Ich würde nicht den genauen Ort, sondern nur eine Dichteinformation speichern und dann die Daten (Vegetation, Haus usw.) aus den Dichteinformationen generieren. Am besten platzieren Sie diese Objekte jedoch
manuell
1
@iamcreasy Sie können natürlich die Höhenkarte verwenden, damit Ihr Haus den Boden berührt, aber Sie müssen beschreiben, wie das Hausmodell aussieht (Wände, Türen, Möbel im Inneren), was nicht in Pixeln beschrieben werden kann. Außerdem geben nur die Pixelinformationen keine genaue Orientierung, sodass Ihre Häuser alle ausgerichtet sind (was nicht natürlich oder "hübsch" erscheint).
XGouchet
1

Die Art und Weise, wie ich das mache, besteht darin, die Heightmap (ich verwende beispielsweise Floats, 513 * 513) und die Splatmap (die "Steuertextur") zu trennen, die häufig eine größere Auflösung benötigen (ich verwende 32-Bit-BMPS, 512 x 512).

Die Höhenkarte erstellt das Netz (das Gelände, die Dreiecke).

Die Kontrollkarte erstreckt sich über das gesamte Terrain und jede ihrer Ebenen (RGBA) gibt an, wie viel Stein, Schotter, Straße usw. Sie auf dem Terrain sehen sollten.

Auf diese Weise können Sie einen Editor verwenden, um a) das Gelände zu erstellen und b) das Gelände zu malen (mit Rock, Dirt, Road usw.)

Machen Sie einen kurzen Blick auf 'painting heightmap', 'heightmap splatmap' und so weiter, um eine genauere Erklärung zu erhalten, oder laden Sie say Unity3D herunter, um herauszufinden, wie es in der 'Realität' funktionieren könnte.

Valmond
quelle