He estado programando en C ++ como un pasatiempo durante aproximadamente 4 meses, y realmente me encantó crear cosas usando voxels. Escribí un "juego" (más que solo un desafío personal, ya que realmente solo hice el terreno, sin juego) que generó un mundo parecido a Minecraft, pero recientemente he estado pensando en intentar escribir un juego / desafío / etc. que utiliza un algoritmo como Marching Cubes o Dual Contouring y reduce el tamaño del vóxel. Cuando escribí mi proyecto similar a Minecraft, almacené los datos de cada fragmento en una matriz multidimensional de cortos sin firmar (lo que me dio hasta 65536 tipos de bloques diferentes). Además, para renderizar, solo almacené un punto (como GLubyte) y otro GLubyte para indicar cuál de las 6 enfrenta el punto representado. Luego rendericé la cara usando un sombreador de geometría.
Con el nuevo proyecto en el que he estado pensando, lo que no puedo entender es cómo puedo almacenar suficientes datos de vóxel para tener vóxeles alrededor de ~ 5 cm o 10 cm en comparación con los viejos vóxeles de 1 m que tenía. Cuando rendericé un área de bloques de 704x704x704, mi antiguo proyecto usaba alrededor de 670MB de RAM. Si redujera el tamaño del vóxel a 10 cm y mantuviera la misma distancia de representación, eso sería alrededor de 649 GB de datos de vóxel (suponiendo 2 bytes por vóxel y un área de 7040 ^ 3 vóxeles). ¿Hay alguna forma de que pueda almacenar los datos de vóxel de una manera más eficiente que todavía me permita una amplia gama de diferentes tipos de vóxel?