Dies hängt von der von Ihnen verwendeten räumlichen Unterteilungsmethode ab, obwohl alle Unterteilungsmethoden (wie jede Komprimierungsmethode) aufgrund von Datenstruktur-Overheads und anderen logischen / mathematischen Faktoren letztendlich dort eingesetzt werden, wo keine weitere Komprimierung stattfinden kann. Ein Beispiel finden Sie in Oktrees. Für jeden Knoten im Octree muss ein Zeiger auf seine übergeordneten und / oder untergeordneten Knoten beibehalten werden (abhängig davon, wie Sie Ihre Datenstrukturarchitektur ausführen), um eine sinnvolle Durchquerung zu ermöglichen. Jede Baumstruktur kann n untergeordnete Elemente enthalten. Je niedriger das Verhältnis 1: n ist, desto effizienter wird der gewonnene Speicherplatz und desto größer ist der Overhead beim Durchqueren von Bäumen, da Sie mehr Ahnenknoten haben müssen, um die gleiche Anzahl von Blattvoxeln zu enthalten (in Ihrem Fall ungefähr 510 Billionen) davon die Oberfläche darstellend).
In Anbetracht dessen, dass in Ihrem Fall die Hauptprobleme die Speicherkosten und das Rendern des gesamten Planeten (oder von Teilen davon) aus angemessener Entfernung sind, gibt es keine Datenstruktur, die ich über einen Octree empfehlen würde. Mipmapping ist eine Notwendigkeit: 12,8 Millionen Meter Durchmesser bei der nächsthöheren Potenz von 2 sind 2 ^ 24 = 16,8 Millionen. Das Durchqueren von 24 Octree-Ebenen würde eine gigantische Menge an Verzweigungen bedeuten - sehr teuer für GPUs und CPUs gleichermaßen. Aber wenn Sie die Dinge richtig machen, müssen Sie immer nur ein paar Level gleichzeitig durchqueren. Angesichts des Platzbedarfs gibt es jedoch nur wenige Alternativen (siehe unten).
Die Mipmapping-Funktionen von Octrees machen es zu einem unglaublich leistungsstarken Tool für große Volumes, wie Sie es beschreiben. Im Gegensatz zu allen anderen bekannten Unterteilungsmethoden (mit Ausnahme von KD-Bäumen) hält der Octree die Unterteilung pro Ebene minimal, was bedeutet, dass die visuellen und physischen Unterschiede zwischen den Mipmap-Ebenen ebenfalls minimal gehalten werden, was bedeutet, dass die Granularität beim Gehen und Gehen viel feiner ist den Baum runter.
Wenn Sie andererseits eine Welt generieren möchten, in der die hierarchische Gitterdurchquerung auf ein Minimum beschränkt ist, müssen Sie den Platz austauschen, um die Geschwindigkeit zu erhöhen.
Apropos ideales 1: n-Verhältnis: In dieser Hinsicht gibt es keine feinere Struktur als den kd-Baum. Wenn sich das Octree für jede Achse in 2 teilt, was zu 2 ^ 3 = 8 einzelnen untergeordneten Zellen führt, teilt sich der kd-Baum genau einmal pro Unterteilungsebene. Das Problem dabei ist, dass Sie eine Hyperebene auswählen müssen, nach der geteilt werden soll, und diese Hyperebene kann um eine der drei Achsen ausgewählt werden. Obwohl es räumlich optimal ist, erschwert es 3D-Durchquerungen (z. B. bei Raymarches, eine grundlegende Aufgabe bei der Verwendung von Octrees für die Physik oder beim Rendern) erheblich als bei einem Octree, da eine dynamische Struktur vom Typ Portal aufgezeichnet werden muss Schnittstellen zwischen einzelnen kd-Baumknoten.
RLE ist ein anderer Ansatz zur Komprimierung, aber in vielerlei Hinsicht schwieriger auf ein Problem wie dieses anzuwenden (bei dem die Operationsbasis sphärisch ist), da die RLE-Komprimierung eindimensional ist und Sie die Achse auswählen müssen, in der sie arbeitet Planet könnte man die Polarachse wählen, aber jede Einzelachsenwahl würde bestimmte Probleme mit Durchquerungen für Rendering und Physik mit sich bringen, wenn aus bestimmten nicht optimalen Winkeln gehandelt wird. Natürlich können Sie RLE auch in 3 Achsen gleichzeitig ausführen, wodurch sich die Speicherkosten verdreifachen, oder in 6 Achsen (-x, + x, -y, + y, -z, + z) als weitere Optimierung.
Also, um deine Frage zu beantworten (oder nicht!)
Ich werde gehe nicht direkt in der Beantwortung , welche Art von Hardware, aber ich denke , es bei der Suche von einer Octree Perspektive beginnt Ihr eine Vorstellung davon zu geben , was in der Tat möglich ist , auf welcher Art von Hardware. Ich würde Sie ermutigen, diesen Weg zu gehen. Wenn Sie wirklich wissen möchten, ist es möglicherweise am einfachsten, einen einfachen, spärlichen Octree zu implementieren(siehe Laines Artikel in den Referenzen) und platzieren Sie eine Kugelschale aus Oberflächenvoxeln darin und sehen Sie, wie die resultierende Raumnutzung ist. Steig von dort auf. Sehen Sie, wie weit Sie kommen können, bevor Ihr Systemspeicher leer wird. Dazu müssen Sie keinen Renderer schreiben, es sei denn, Sie möchten eine Visualisierung. Beachten Sie auch, dass dies am besten auf der CPU erfolgt - GPUs verfügen im Großen und Ganzen nicht über die Speicherkapazität, um Probleme dieser Größenordnung zu lösen. Dies ist einer der Gründe, warum Intel auf massiv parallele Prozessoren umsteigen möchte: Die Vorteile von GPGPU, die in dieser Hinsicht besser sind, können auf einen weitaus größeren Speicherplatz angewendet werden, ohne dass es zu Engpässen bei Systembussen kommt. Es gibt wahrscheinlich andere hier oder auf mathematik.stackexchange.com,
Sicher, in Bezug auf Ihre unendliche Sichtentfernungsanforderung, aber die Frage lautet immer: "Wie viele Details in welcher Entfernung?". Das Rendern von unendlichen Details würde unendliche Ressourcen erfordern. Hier kommt das Mipmapping mit variablen Szenen ins Spiel. Denken Sie auch daran, dass alle Datenstrukturen einen Kompromiss zwischen Geschwindigkeit und Raum darstellen oder umgekehrt. Das bedeutet weniger / langsameres Rendern, wenn Sie eine größere Welt bei gleichem Engineering-Aufwand wünschen.