3D-Lärm wird obligatorisch, wenn das Gelände Höhlennetzwerke und Überhänge benötigt.
Um eine Isofläche aus Dichteinformationen zu extrahieren, sind die 2 beliebtesten Techniken Marching Cubes (MC) und das neuere Dual Contouring (DC). Die benötigte Datenstruktur ist je nach gewählter Methode sehr unterschiedlich.
Wie bereits erwähnt, ist der Artikel zu GPU Gems 3 von Geiss ein sehr lehrreicher Ausgangspunkt für das Verständnis und die Implementierung von MC-Terrains auf der GPU.
Da die Dichtedaten von MC-Voxeln nur an den Rändern von Voxeln verbleiben können, kann der klassische MC das Volumen konturieren, ohne scharfe Kantenmerkmale beizubehalten. DC hat diesen Nachteil nicht, da die Dichteinformationen als 3D-Punkt (QEF-Minimierer) ausgedrückt werden, der sich an einer beliebigen Stelle im Voxel befindet, plus dem Vorzeichen an jeder Ecke.
Andererseits leidet MC nicht unter sich selbst schneidenden Flächen, da alle erzeugten Dreiecke in ihren entsprechenden Voxeln eingeschlossen sind, während DC zusätzliche Berechnungen benötigt, um Schnittpunkte zwischen erzeugten Flächen zu verhindern. DC-Autoren haben dieses Problem in einer verbesserten Version ihres Algorithmus behoben.
http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf
http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf
Dieser Kollege schlägt auch einen wahrscheinlich saubereren Ansatz vor, der auf einer konvexen / konkaven Analyse basiert, um Selbstüberschneidungen zu vermeiden. Er verwendet auch bessere Quad-Splitting-Regeln, um die Ausrichtung der Kante zu erhalten:
http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf
Der Classic MC ist auch nicht sofort "rissfrei" und erfordert möglicherweise ein Riss-Patching, wenn er auf uneingeschränkten Octrees ausgeführt wird. DC leidet nicht unter diesem letzten Problem.
Hier ist eine schöne und vollständige Übersicht über die meisten Maschenextraktionstechniken:
http://www.cs.berkeley.edu/~jrs/mesh/
Ein Octree / Voxel-Ansatz ist an sich "CSG-freundlich", was es einfacher macht, eine ordentliche, vollständig "zerstörbare" Strategie auf Spielebene zu planen, aber wenn man all dies in einem Spiel implementieren muss, muss die Octree-Tiefe auch stumpf sein -abhängig.
Wenn das gesamte Material in den Speicher passt oder korrekt gestreamt wird, können die Daten auch zum Rendern von AO und zum Berechnen von Physik / Kollisionen verwendet werden.
In diesem speziellen Beispiel schätze ich, dass er den z-Wert verwendet hat, um zu bestimmen, um welche Art von Material es sich handelt: Grundgestein, Stein, Schmutz oder Luft.
quelle
Minecraft verwendet den Marschwürfel-Algorithmus, um 3D-Gelände zu generieren. Ich verstehe das nicht, tut mir leid. Ich bin mir nicht sicher, wovon Notch sprach, als er die Perlin Noise-Funktion erwähnte - vielleicht ein Keim für den Marschwürfel-Algorithmus. Mehr Infos hier:
Und ein großartiger GPU Gems-Artikel, wenn Sie sich für Marching Cubes interessieren:
quelle
quelle