Venho programando em C ++ como hobby há cerca de 4 meses e adorei criar coisas usando voxels. Eu escrevi um "jogo" (mais do que apenas um desafio pessoal, como realmente fiz o terreno, sem jogabilidade) que transformou um mundo semelhante ao Minecraft, mas recentemente estive pensando em tentar escrever um jogo / desafio / etc que usa um algoritmo como Marching Cubes ou Dual Contouring e reduz o tamanho do voxel. Quando escrevi meu projeto parecido com o Minecraft, armazenei os dados de cada parte em uma matriz multidimensional de curtos não assinados (resultando em 65536 tipos de blocos diferentes). Além disso, para renderização, armazenei apenas um ponto (como um GLubyte) e outro GLubyte para indicar qual dos 6 enfrenta o ponto representado. Renderizei a face usando um sombreador de geometria.
Com o novo projeto em que estou pensando, o que não consigo entender é como posso armazenar dados voxel suficientes para ter voxels em torno de ~ 5cm ou 10cm em comparação com os voxels antigos de 1m. Quando renderizei uma área de blocos de 704x704x704, meu projeto antigo usava cerca de 670 MB de RAM. Se eu reduzisse o tamanho do voxel para 10 cm e mantivesse a mesma distância de renderização, seriam cerca de 649 GB de dados do Voxel (assumindo 2 bytes por voxel e uma área de 7040 ^ 3 voxels). Existe alguma maneira de armazenar os dados do voxel de maneira mais eficiente que ainda permita uma ampla variedade de tipos diferentes de voxel?