Höhenkarte, Voxel, Polygon (Geometrie) Gelände

15

In Bezug auf Heightmap-, Voxel- und Polygon-Terrains (Geometrie):

  1. Was sind die Hauptunterschiede zwischen all diesen drei?
  2. Können Sie mit Voxeln ein "glattes" Gelände bilden, ich meine, können Sie zum Beispiel mit Voxeln einen glatten Berg bekommen, oder Voxel sind auf Würfel beschränkt?
  3. Leistungstechnisch gesehen, eine Welt mit 2000x2000 Einheiten, was wäre schnelleres Heightmap-Terrain, Voxel-Terrain oder Polygon-basiertes, geometrisches Terrain? (Angenommen, es werden "angemessene" Leistungssteigerungen / Optimierungen für das Rendern für jede der Möglichkeiten vorgenommen.)
  4. Gibt es weitere Techniken zur Geländekreation?
  5. Gibt es gute Titel für jeden Typ?

PS: Auf Polygonen basierendes Gelände sollte vollständig nachgezeichnet sein, kein quadratisches Material.

Ruckmodus
quelle

Antworten:

30

Höhenkarten

Mit einer Höhenkarte speichern Sie nur die Höhenkomponente für jeden Scheitelpunkt (normalerweise als 2D-Textur) und geben Position und Auflösung nur einmal für das gesamte Quad an. Die Landschaftsgeometrie wird für jeden Frame mithilfe des Geometrie-Shaders oder der Hardware-Tessellation generiert. Höhenkarten sind die schnellste Möglichkeit, Landschaftsdaten für die Kollisionserkennung zu speichern.

Vorteile:

  • Relativ geringer Speicherbedarf : Sie müssen nur einen Wert pro Scheitelpunkt und keine Indizes speichern. Es ist möglich, dies weiter zu verbessern, indem Detailkarten oder ein Rauschfilter verwendet werden, um die wahrgenommenen Details zu verbessern.

  • Relativ schnell : Der Geometrie-Shader für Höhenkarten ist klein und läuft schnell. Es ist jedoch nicht so schnell wie Geometrie-Terrain.
    Auf Systemen ohne dreieckbasierte 3D-Beschleunigung sind Höhenkarten für den Strahlengang die schnellste Methode zum Rendern von Gelände. Dies wurde in älteren Spielen als Voxel-Grafik bezeichnet.

  • Dynamische LOD / Gelände : Es ist möglich, die Auflösung des generierten Netzes basierend auf der Entfernung von der Kamera zu ändern. Dies führt zu einer Verschiebung der Geometrie, wenn die Auflösung zu stark abfällt (um 0:40), kann jedoch für interessante Effekte verwendet werden.

  • Einfache Geländegenerierung / -erstellung: Höhenkarten können einfach erstellt werden, indem Rauschfunktionen wie fraktales Perlin-Rauschen und Höhenkarten-Editoren schnell und einfach kombiniert werden . Beide Ansätze können kombiniert werden. Sie sind auch einfach in einem Editor zu bearbeiten.

  • Effiziente Physik : Eine horizontale Position wird (normalerweise) direkt auf eine bis vier Positionen im Speicher abgebildet, sodass Geometriesuchen für die Physik sehr schnell sind.

Nachteile:

  • Genau eine Höhe pro x / y-Koordinate : In der Regel dürfen keine Löcher im Boden oder überhängende Klippen vorhanden sein.

  • Weniger Kontrolle : Sie können die genaue Höhe jedes Punktes nur kontrollieren, wenn die Rastergröße mit den Texturkoordinaten übereinstimmt.

  • Artefakte : Wenn sich die vier Scheitelpunkte, die ein Untervierfach definieren, nicht auf derselben Ebene befinden, wird die Aufteilung zwischen den beiden Scheitelpunkten sichtbar. Dies geschieht normalerweise auf steilen Klippen mit Kanten, die keiner Hauptrichtung folgen.

Höhenkarten sind bei weitem die effizienteste Methode zum Rendern von Gelände. Sie werden in vielen neueren Spielen verwendet, die sich nicht auf erweiterte Geländefunktionen verlassen und über große Außenbereiche verfügen. Wikipedia hat eine Liste der Programme, die Height , aber ich bin nicht sicher , ob das bedeutet , sie nur , um sie als Ressourcen verwenden oder auch für Rendering, also hier ein paar Spiele , die sind wahrscheinlich , sie zu benutzen:

  • Nur Ursache 2: Regionen werden in quadratischen Sektoren geladen und es gibt keine Löcher im Gelände. In der Demo gibt es ein tiefes Loch mit gestreckten Dreiecken an den Rändern, wo normalerweise ein Gebäude wäre. (Der Bereich ist normalerweise nicht zugänglich, aber es gibt Modifikationen, um einige der Einschränkungen der Demo zu beseitigen ...)

  • Sims 2 ( vielleicht ): Nachbarschaftsgelände wird als Höhenkarte geladen, aber es gibt Löcher, in denen Grundstücke (Baustellen) platziert werden. Es gibt jedoch typische Artefakte, wenn Sie an vielen Stellen Klippen anlegen, und es ist ziemlich mühsam, einem Haus einen Keller hinzuzufügen (und die Klippe unter einer Veranda zu verstecken).

  • Spiele mit der Source-Engine von Valve: Rechteckige Pinsel (statische Geometrie) können ein Gelände mit Höhenangabe aufweisen. In diesen Spielen werden die üblichen Macken oft mit anderen Pinseln oder Requisiten versteckt.

Ohne einen Blick auf die Shader ist es nicht sicher zu sagen, da jedes Heightmap-Terrain als Mesh gerendert werden kann.

Voxel

Voxel-Gelände speichert Geländedaten für jeden Punkt in einem 3D-Raster. Bei dieser Methode wird immer der größte Speicherplatz für aussagekräftige Oberflächendetails verwendet, auch wenn Sie Komprimierungsmethoden wie dünne Octrees verwenden.

(Der Begriff "Voxel-Engine" wurde häufig verwendet, um eine Methode zum Durchstreifen von Geländehöhenkarten zu beschreiben, die in älteren 3D-Spielen üblich ist. Dieser Abschnitt gilt nur für als Voxeldaten gespeichertes Gelände.)

Vorteile:

  • Fortlaufende 3D-Daten : Voxel sind so gut wie die einzige effiziente Möglichkeit, fortlaufende Daten zu verborgenen Geländemerkmalen wie Erzadern zu speichern.

  • Leicht zu ändern : Unkomprimierte Voxeldaten können leicht geändert werden.

  • Erweiterte Geländefunktionen : Es ist möglich, Überhänge zu erstellen. Tunnel sind nahtlos.

  • Interessante Geländegenerierung : Minecraft überlagert dazu Rauschfunktionen und Steigungen mit vordefinierten Geländeeigenschaften (Bäume, Dungeons). ( Weitere Informationen finden Sie in Terrain Generation, Teil 1 in Notchs Blog. Ab dem 05.8.2011 gibt es keinen zweiten Teil.)

Nachteile:

  • Langsam : Um Voxeldaten zu rendern, müssen Sie entweder einen Raytracer verwenden oder ein Netz berechnen, beispielsweise mit marschierenden Würfeln (es treten Artefakte auf). Benachbartes Voxel ist für die Netzerzeugung nicht unabhängig, und die Shader sind komplizierter und erzeugen normalerweise komplexere Geometrien. Das Rendern von Voxeldaten mit hohem LOD kann sehr langsam sein.

  • Riesige Speicheranforderungen : Das Speichern von Voxeldaten beansprucht viel Speicher . Aus diesem Grund ist es oft nicht praktikabel, die Voxeldaten in den VRAM zu laden, da Sie kleinere Texturen verwenden müssten, um dies zu kompensieren, selbst auf moderner Hardware.

Es ist nicht praktisch, Voxel für Spiele zu verwenden, die sich nicht auf Voxelfunktionen wie deformierbares Gelände stützen, aber in einigen Fällen kann es interessante Spielmechanismen ermöglichen. Voxel-Engines sind in älteren Spielen häufiger anzutreffen , es gibt jedoch auch neuere Beispiele:

  • Atomontage-Engine : Voxel-Rendering.

  • Würmer 4: Verwendet "Pocken". Laut Wikipedia ist es eine Mischung aus Voxeln und Polygonen.

  • Minecraft: Verwendet Voxel, um das Gelände im RAM darzustellen, die Grafiken sind Polygon-Grafiken. Es ist jedoch meistens Software berechnet.

  • Terrarien: Ein Beispiel für 2D-Voxel. Ich weiß nicht, wie es rendert.

  • Voxel kombiniert mit Physik : Kein Spiel. aber es zeigt schön das Zerstörungspotential.

  • Voxatron : Ein Spiel mit Voxeln für fast alle Grafiken, einschließlich Menüs und HUD.

Maschen

Polygonnetze sind die flexibelste und präziseste Methode zum Speichern und Rendern von Gelände. Sie werden häufig in Spielen verwendet, in denen eine präzise Steuerung oder erweiterte Geländefunktionen erforderlich sind.

Vorteile:

  • Sehr schnell : Sie müssen nur die übliche Projektionsberechnung im Vertex-Shader durchführen. Ein Geometrie-Shader wird nicht benötigt.

  • Sehr präzise : Alle Koordinaten werden für jeden Scheitelpunkt einzeln gespeichert. Sie können also horizontal verschoben und die Maschendichte an Stellen mit feineren Details erhöht werden.

  • Geringe Auswirkung auf den Arbeitsspeicher : Dies bedeutet auch, dass das Netz normalerweise weniger Arbeitsspeicher benötigt als eine Höhenkarte, da Scheitelpunkte in Bereichen mit weniger kleinen Features dünner sein können.
    (Siehe Triangulated irreguläres Netzwerk auf Wikipedia).

  • Keine Artefakte : Das Netz wird so gerendert, wie es ist, sodass es keine Störungen oder seltsam aussehenden Ränder gibt.

  • Erweiterte Geländefunktionen : Es ist möglich, Löcher zu lassen und Überhänge zu erzeugen. Tunnel sind nahtlos.

Nachteile:

  • Schlechte dynamische LOD : Nur mit vorberechneten Maschen möglich. Dies wird "Sprünge" verursachen, wenn ohne zusätzliche Daten gewechselt wird, um alte zu neuen Eckpunkten abzubilden.

  • Nicht einfach zu ändern : Das Finden von Scheitelpunkten, die einem zu ändernden Bereich entsprechen, ist langsam.

  • Nicht sehr effizient für die Kollisionserkennung : Im Gegensatz zu Höhenkarten und Voxeldaten kann die Speicheradresse für einen bestimmten Ort normalerweise nicht direkt berechnet werden. Dies bedeutet, dass Physik und Spielelogik, die von der exakten Oberflächengeometrie abhängen, wahrscheinlich langsamer ausgeführt werden als bei den anderen Speicherformaten.

Polygon-Terrain wird häufig in Spielen verwendet, die keine großen offenen Flächen haben oder aufgrund mangelnder Präzision und Überhänge kein Heightmap-Terrain verwenden können. Ich habe keine Liste, bin mir aber ziemlich sicher

  • jeder 3D Zelda und

  • jedes 3D Mario Spiel

benutze das.

Andere Methoden

Es ist möglich, ein Terrain vollständig in der Shader-Pipeline zu erstellen. Wenn der Algorithmus nur im Fragment- / Pixelshader ausgeführt wird, kann die Detailgenauigkeit nahezu unbegrenzt sein, während die Auswirkung auf den Speicher nahezu Null ist. Die offensichtlichen Nachteile sind fast keine Kontrolle über die Form und Probleme, wenn die Kamera die ursprüngliche Renderoberfläche schneidet. Es ist immer noch nützlich in Weltraumspielen, in denen die Spieler nicht mit der Oberfläche eines Planeten interagieren. Parameteranimationen eignen sich am besten für diese Art von Gelände.

Es sollte möglich sein, die generierte Geländegeometrie von der Grafikkarte herunterzuladen, um sie für den Rest der Spiel-Engine zu verwenden, aber ich weiß nicht, wie die Leistung davon ist oder ob dies bisher getan wurde.

Fazit

Es gibt keine Methode, die für jedes Szenario gut funktioniert, aber es ist ziemlich einfach, eine für eine bestimmte Aufgabe auszuwählen:

  • Höhenkarten sind die beste Lösung, wenn Sie keine Überhänge oder Löcher in der Geländeoberfläche benötigen und physisches oder dynamisches Gelände verwenden. Sie sind skalierbar und funktionieren für die meisten Spiele gut.

  • Maschen haben die höchste Präzision und können Überhänge, Löcher und Tunnel beschreiben. Verwenden Sie sie, wenn Sie ein komplexes Gelände haben, das sich nicht oft ändert.

  • Voxel beschreiben sehr dynamisches Gelände mit vielen komplexen Merkmalen. Vermeiden Sie es, sie direkt zu rendern, da sie viel Speicher und Verarbeitung benötigen.

  • Andere Methoden sind möglicherweise besser als die oben genannten, wenn Sie nicht mit dem Gelände interagieren müssen oder sehr detaillierte Grafiken benötigen. Sie funktionieren normalerweise nur für sehr spezielle Szenarien.

Es ist möglich, verschiedene Methoden zu kombinieren, um Features aus mehreren zu erhalten, z. B. durch Tessellieren des Mesh-Terrains mit einer Höhenkarte, um die Detailstruktur einer Klippe zu verbessern.

Die dynamische Geländegenerierung wird häufig in der prozeduralen Raumsimulation verwendet und einige sind in den letzten Jahren sehr weit fortgeschritten . In den Foren dieser Projekte sollten einige Ressourcen zum Thema vorhanden sein.

Tamschi
quelle
3
Die Quell-Engine verwendet keine Höhenkarten für ihr Terrain. Sie verwenden tesselated Quads namens "Verschiebungen" developer.valvesoftware.com/wiki/Displacement
Tetrad
1
Das ist eine süße Antwort, würde eine +3 auf diese geben, wenn es möglich wäre. Vielen Dank für die ausführlichen Informationen, sehr geschätzt.
Joltmode
@Tetrad Verfügbare Auflösungen für Verschiebungen sind Zweierpotenzen (eine übliche Einschränkung für Texturpuffer). Die einzige pro Scheitelpunkt gespeicherte Koordinate ist die Höhe und die Geländehöhenkarten werden als tesselierte Quads gerendert. Das Wiki sagt auch, dass die Rendering-Kosten von Verschiebungen niedriger sind als die von regulärer Geometrie. Ich denke, es ist fair anzunehmen, dass es sich um dasselbe mit unterschiedlichen Namen handelt.
Tamschi
1
@NickWiggill Die Bedeutung von "Voxel" scheint sich in den letzten 10 Jahren ziemlich verändert zu haben. Ich gehe mit der aktuellen Wikipedia-Definition von Voxeln als Werte in einem regulären 3D-Raster . Der Eintrag bei Outcast erwähnt den Unterschied in der Bedeutung. Ich habe zu meiner Antwort hinzugefügt, um dies zu verdeutlichen.
Tamschi
2
Randnotiz: Das "Polygon-Terrain" wird in GIS auch " Triangulated Irregular Network " (kurz "TIN") genannt. und es ist in der Regel deutlich weniger speicherintensiv als eine Höhenkarte mit derselben effektiven Auflösung, da es nicht darum geht, unwesentliche Daten oder Orte aufzuzeichnen, an denen keine Daten vorhanden sind. Das erste Gothic-Spiel verwendete es (bei den anderen nicht sicher).
Martin Sojka
8

Ich möchte darauf hinweisen, dass sich keiner der von Ihnen genannten Begriffe gegenseitig ausschließt - Sie könnten sogar ein Voxel-basiertes Spiel haben, das Höhenkarten verwendet und mit Polygonen gerendert.

  1. Höhenkarten sind zweidimensionale Darstellungen der Höhe des Bodens an jedem bestimmten Punkt. Sie werden oft als Graustufenbilder gespeichert, wobei die Helligkeit die Höhe dieses Punktes darstellt. Voxel sind im Grunde eine 3D-Bitmap. Es gibt eine Vielzahl von Techniken, die zum Rendern eines Voxelraums verwendet werden.

  2. Sie können mit Voxeln ein glattes Gelände erstellen, das nicht auf Würfel beschränkt ist. Eine Möglichkeit besteht darin, einen Algorithmus wie Marschwürfel zu verwenden , der eine Voxeldarstellung in eine Polygonliste umwandeln kann.

  3. Der mit den wenigsten Dreiecken würde am schnellsten rendern: 3

  4. Fraktale Algorithmen wie Perlin-Rauschen können verwendet werden, um Landschaften mit vielen
    Details zu erstellen . Parametrische Oberflächen wie Noppen können verwendet werden, um ein glattes Gelände mit geringen Anforderungen an die dauerhafte Lagerung zu schaffen.

  5. Delta Force ist ein altes Spiel, das Voxel verwendet. Minecraft verwendet möglicherweise Voxelspeicher, um die Landschaft darzustellen (unsicher). Sacrifice by Shiny ist ein Spiel, bei dem Höhenkarten eine gute Wirkung erzielen. Die meisten Spiele mit Landschaften verwenden Geometrie-Terrains.

CiscoIPPhone
quelle
1
Eine Anmerkung zu Punkt 3: Während sich die GPU nur um die Anzahl der Polygone kümmert, gibt es immer noch die Seite der Geometrieerzeugung. Das Generieren von Geometrie für ein Voxelfeld ist normalerweise ein langsamerer Prozess (Blöcke / Marschwürfel sind beide komplexere Prozesse) als Höhenkarten-Terrain (was ein einfacher Prozess ist) oder polygonbasiert (was offensichtlich bereits Geometriedaten sind). Bearbeiten: Dies hängt auch davon ab, ob das Gelände deformierbar sein soll.
Michael
Für den 3. Punkt ... Nun, die Höhenkarte muss noch bearbeitet werden und formt sich erst dann zu einer Geometrie, oder? Wenn man das bedenkt, wäre ein Polygonnetz ein bisschen schneller? Können Sie einige der Techniken zum Rendern von Voxeln erläutern?
Joltmode
2
Sie können einen Geometrie-Shader verwenden, um das Netz aus einer Höhenkarte zu generieren. Auf diese Weise speichern Sie nur die Höhenkarte und Parameter wie Position und Auflösung, während die Geometrie für jeden Frame in der Shader-Pipeline generiert wird. Es ist schneller als Würfel marschieren und langsamer als ein Polygonnetz. Der Vorteil von Heighmaps ist der geringe Speicherverbrauch: Nur etwas mehr als ein Drittel dessen, was ein Mesh benötigen würde. Der Nachteil ist, dass es nicht so flexibel ist (keine kleinen Details, keine Überhänge). Sie können das Detail des generierten Netzes dynamisch anpassen, dies führt jedoch zu einer Verschiebung der Geometrie.
Tamschi
@Tamschi, wenn du dem nur eine Antwort geben würdest, genau das, wonach ich gesucht habe. :)
joltmode
@ Tom Ich werde sehen, ob ich das formatieren kann, und noch ein paar Beispiele finden.
Tamschi