Tôi đã lập trình trong C ++ như một sở thích trong khoảng 4 tháng nay và tôi thực sự yêu thích việc tạo ra các công cụ bằng cách sử dụng voxels. Tôi đã viết một "trò chơi" (Không chỉ là một thử thách cá nhân, vì tôi thực sự chỉ làm địa hình, không chơi trò chơi) tạo ra một thế giới giống như Minecraft, nhưng gần đây tôi đã nghĩ đến việc cố gắng viết một trò chơi / thử thách / v.v. sử dụng thuật toán như Marching Cubes hoặc Dual Contouring và giảm kích thước voxel. Khi tôi viết dự án giống Minecraft của mình, tôi đã lưu trữ dữ liệu của từng khối trong một loạt các quần short không dấu (do đó cung cấp cho tôi tới 65536 loại khối khác nhau). Ngoài ra, để kết xuất, tôi chỉ lưu trữ một điểm (dưới dạng GLubyte) và một GLubyte khác để chỉ ra điểm nào trong số 6 mặt mà điểm được biểu thị. Sau đó, tôi kết xuất khuôn mặt bằng cách sử dụng một shader hình học.
Với dự án mới mà tôi đã nghĩ đến, điều tôi không thể nghĩ tới là làm thế nào tôi có thể lưu trữ đủ dữ liệu voxel để có voxels khoảng ~ 5cm hoặc 10cm so với các voxels cỡ 1m mà tôi có. Khi tôi kết xuất một khối 704x704x704, dự án cũ của tôi đã sử dụng khoảng 670 MB RAM. Nếu tôi thu nhỏ kích thước voxel xuống còn 10cm và giữ cùng khoảng cách kết xuất, đó sẽ là khoảng 649GB dữ liệu Voxel (giả sử 2 byte cho mỗi voxel và diện tích 7040 ^ 3 voxels). Có cách nào để tôi có thể lưu trữ dữ liệu voxel một cách hiệu quả hơn mà vẫn cho phép tôi một loạt các loại voxel khác nhau không?