Я программирую на C ++ как хобби уже около 4 месяцев, и мне действительно нравится создавать вещи с использованием вокселей. Я написал «игру» (больше, чем просто личный вызов, так как на самом деле я занимался только ландшафтом, а не геймплеем), в котором появился мир, похожий на Minecraft, но недавно я подумывал о попытке написать игру / вызов / и т.д. который использует алгоритм, такой как Marching Cubes или Dual Contouring и уменьшающий размер вокселя. Когда я писал свой проект, похожий на Minecraft, я сохранял данные каждого чанка в многомерном массиве шорт без знака (таким образом, у меня было до 65536 различных типов блоков). Кроме того, для рендеринга я сохранил только одну точку (как GLubyte) и другой GLubyte, чтобы указать, какая из 6 граней представляет точку, представленную. Затем я отрисовал лицо с помощью геометрического шейдера.
Что касается нового проекта, о котором я думал, то, что я не могу обернуть вокруг себя, это то, как я могу хранить достаточно данных о вокселях, чтобы иметь воксели размером ~ 5 см или 10 см по сравнению со старыми вокселями размером 1 м, которые я имел. Когда я рендерил область блоков 704x704x704, мой старый проект использовал около 670 МБ оперативной памяти. Если бы я сократил размер вокселя до 10 см и сохранил то же расстояние рендеринга, это было бы около 649 ГБ данных вокселей (при условии 2 байта на воксель и площадью 7040 ^ 3 вокселей). Можно ли как-то более эффективно хранить данные вокселей, которые по-прежнему позволяют мне широкий спектр различных типов вокселей?