Ich programmiere seit ungefähr 4 Monaten in C ++ als Hobby und ich habe es wirklich geliebt, Dinge mit Voxeln zu erstellen. Ich habe ein "Spiel" geschrieben (eher eine persönliche Herausforderung, da ich wirklich nur das Terrain, kein Gameplay) habe, das eine Minecraft-ähnliche Welt geschaffen hat, aber kürzlich habe ich darüber nachgedacht, ein Spiel / eine Herausforderung / etc. Zu schreiben Dabei wird ein Algorithmus wie Marching Cubes oder Dual Contouring verwendet und die Voxelgröße reduziert. Als ich mein Minecraft-ähnliches Projekt schrieb, speicherte ich die Daten jedes Blocks in einem mehrdimensionalen Array von nicht signierten Kurzschlüssen (wodurch ich bis zu 65536 verschiedene Blocktypen erhielt). Außerdem habe ich zum Rendern nur einen Punkt (als GLubyte) und einen anderen GLubyte gespeichert, um anzugeben, welche der 6 Flächen dem dargestellten Punkt zugewandt ist. Ich habe das Gesicht dann mit einem Geometrie-Shader gerendert.
Bei dem neuen Projekt, über das ich nachgedacht habe, kann ich mich nicht darum kümmern, wie ich möglicherweise genug Voxeldaten speichern kann, um Voxel von etwa 5 cm oder 10 cm im Vergleich zu den alten 1 m großen Voxeln zu haben, die ich hatte. Als ich einen Blockbereich von 704 x 704 x 704 gerendert habe, hat mein altes Projekt etwa 670 MB RAM verwendet. Wenn ich die Voxelgröße auf 10 cm verkleinern und den gleichen Renderabstand beibehalten würde, wären das etwa 649 GB Voxel-Daten (unter der Annahme von 2 Bytes pro Voxel und einer Fläche von 7040 ^ 3 Voxeln). Gibt es eine Möglichkeit, die Voxeldaten effizienter zu speichern, sodass ich immer noch eine Vielzahl verschiedener Voxeltypen habe?