As pessoas costumam pensar que voxels ocupam muito espaço de armazenamento. Vamos comparar um terreno plano. Mapa de altura vs. voxels. Mapa de altura: 16 bits 8192x8192 = 128 MB. Voxels: bloco 4x4x4 = uin64 = 8 bytes. Precisamos de 2048x2048 blocos para cobrir a superfície do terreno de 8k^2 = 32 MB. Os níveis superiores de SVO/DAG adicionam <10%.
A estimativa acima é otimista. Se o terreno for acidentado, acabamos tendo dois tijolos um sobre o outro na maioria dos lugares. Portanto, temos 64 MB de tijolos-folha. Os níveis superiores de SVO/DAG não aumentam muito (já que usamos ponteiros filhos compartilhados). O total é <70 MB. Ainda assim, uma vitória.
Cada bloco possui uma máscara de voxel uint64 (4x4x4) e um ponteiro de dados filho compartilhado de 32 bits (pode endereçar 16 GB de dados de voxel devido ao alinhamento de 4 bytes). Um bloco padrão tem 12 bytes. Blocos folha têm apenas 8 bytes e não possuem o ponteiro filho (o postfix não prejudica a coerência SIMD).
O interessante é que octtree armazena bits recursivamente em níveis de árvore. Se cada nível armazena blocos 4x4x4, você obtém 2 bits de precisão por nível. Portanto, 8 níveis = 16 bits de precisão em altura. Mas os bits mais altos são compartilhados entre vários voxels.
Correção: Estou falando de árvores 4x4x4, não de árvores 2x2x2 (oct). Uma árvore oct padrão, é claro, divide cada região em duas em cada eixo, adicionando um bit de precisão para cada coordenada.