Saya sudah pemrograman di C ++ sebagai hobi selama sekitar 4 bulan sekarang, dan saya benar-benar suka membuat barang menggunakan voxel. Saya menulis "permainan" (Lebih dari sekadar tantangan pribadi, karena saya benar-benar hanya mengerjakan medan, tidak ada gameplay) yang menjadikan dunia seperti Minecraft, tetapi baru-baru ini saya telah berpikir untuk mencoba menulis permainan / tantangan / dll yang menggunakan algoritma seperti Marching Cubes atau Dual Contouring dan mengurangi ukuran voxel. Ketika saya menulis proyek mirip Minecraft, saya menyimpan data masing-masing bongkahan dalam array multidimensi celana pendek yang tidak ditandatangani (sehingga memberi saya 65536 jenis blok berbeda). Selain itu, untuk rendering, saya hanya menyimpan satu titik (sebagai GLubyte) dan satu lagi GLubyte untuk menunjukkan yang mana dari 6 yang menghadap titik yang diwakili. Saya kemudian membuat wajah menggunakan geometri shader.
Dengan proyek baru yang telah saya pikirkan, hal yang tidak dapat saya lewati adalah bagaimana saya bisa menyimpan cukup data voxel untuk membuat voxel sekitar ~ 5cm atau 10cm dibandingkan dengan voxel berukuran 1 m yang saya miliki. Ketika saya membuat blok seluas 704x704x704, proyek lama saya menggunakan sekitar 670MB RAM. Jika saya mengecilkan ukuran voxel menjadi 10cm dan menjaga jarak render yang sama, itu akan menjadi sekitar 649GB data Voxel (dengan asumsi 2 byte per voxel dan area 7040 ^ 3 voxel). Apakah ada cara saya dapat menyimpan data voxel dengan cara yang lebih efisien yang masih memungkinkan saya berbagai jenis voxel?