Sto programmando in C ++ come hobby da circa 4 mesi e mi è davvero piaciuto creare cose usando voxel. Ho scritto un "gioco" (più che altro una sfida personale, dato che ho fatto solo il terreno, nessun gameplay) che ha reso un mondo simile a Minecraft, ma recentemente ho pensato di provare a scrivere un gioco / sfida / ecc. che utilizza un algoritmo come Marching Cubes o Dual Contouring e riduce le dimensioni del voxel. Quando ho scritto il mio progetto simile a Minecraft, ho archiviato i dati di ogni blocco in un array multidimensionale di short senza segno (dandomi così fino a 65536 tipi di blocchi diversi). Inoltre, per il rendering, ho memorizzato solo un punto (come GLubyte) e un altro GLubyte per indicare quale delle 6 facce rappresentava il punto. Ho quindi reso il viso usando uno shader di geometria.
Con il nuovo progetto a cui ho pensato, la cosa su cui non riesco a capire è come posso archiviare abbastanza dati voxel per avere voxel di circa 5 cm o 10 cm rispetto ai vecchi voxel da 1 m che avevo. Quando ho eseguito il rendering di un'area di blocchi di 704x704x704, il mio vecchio progetto utilizzava circa 670 MB di RAM. Se riducessi la dimensione del voxel a 10 cm e mantenessi la stessa distanza di rendering, sarebbero circa 649 GB di dati Voxel (ipotizzando 2 byte per voxel e un'area di 7040 ^ 3 voxel). Esiste un modo per archiviare i dati voxel in modo più efficiente che mi consenta ancora una vasta gamma di diversi tipi di voxel?