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.