Wenn ich in Unity 3D (prozedural generierte Voxellandschaften mit Würfeln) mit der Erstellung von minecraftish / lego-Weltlandschaften herumspiele, stelle ich fest, dass die für diese Landschaften erstellten Maschen viel Speicherplatz beanspruchen. Das Netz besteht derzeit nur aus Eckpunkten für die sichtbaren Seiten eines Würfels. Die Speichernutzung für ein komplexes Terrain kann 6-700 Megabyte betragen.
Diese Netze könnten optimiert werden, aber ich bemühe mich, einen anständigen Algorithmus zu finden, um dies zu tun.
Der Algorithmus muss berücksichtigen, dass Sie keine Blöcke mit unterschiedlichen Geländetypen "zusammenführen" möchten. Ich denke, ein wirklich einfacher Anfang könnte sein, einfach alle Blöcke entlang einer Achse zu verarbeiten und zusätzliche Sweeps für die anderen beiden Achsen durchzuführen.
Ich muss die Maschenform beibehalten, dh keine Zusammenführung von Scheitelpunkten bis zu dem Punkt, an dem der leere oder feste Raum geändert wird. Der Grund dafür ist, dass es möglicherweise Kreaturen / etc gibt, die noch durch das Netz navigieren müssen. Ich kann also nicht einfach ein wirklich detailarmes, verzerrtes Netz erstellen.
Irgendwelche Gedanken / Vorschläge / Tipps dazu?
quelle
Antworten:
Meine Frage ist:
Warum brauchst du das Netz selbst, um Kreaturen zu bewegen?
Können Sie die Pfadberechnung nicht mit einer 3D-Matrix von IDs durchführen?
Ich denke, Minecraft verwendet eine 3D-Matrix mit 4-Bit-PR-Block. Außerdem werden nur Kreaturen mit einem bestimmten Radius um den Spieler simuliert.
Sie können Ihre Chunks in einer Oc-Tree-Struktur speichern, in der jeder Chunk komprimiert wird.
Wenn Sie die komprimierten Daten im RAM behalten, können Sie sie bei Bedarf recht schnell dekomprimieren.
quelle
Wie wäre es mit einem Octree, um das Gelände zu speichern?
ZB Luft = kein Knoten, alle anderen Geländetypen hätten einen Knoten mit dem Geländetyp.
Beim Einfügen / Entfernen von Knoten können Sie überprüfen, ob alle acht untergeordneten Knoten in dem geänderten Baumpfad denselben Terain-Typ haben, und sie bei Bedarf zusammenführen. Auf diese Weise würden große Blöcke desselben Materials nur einen Knoten belegen.
quelle
Erstellen Sie die Cubes nur für Teile der Geometrie, die der Player sehen kann? Das wäre mein erster Schritt. Abhängig von der Größe Ihres Geländes muss nicht die gesamte Welt geladen / gezeichnet / sichtbar / was auch immer sein.
quelle