On pense souvent que les voxels occupent beaucoup d'espace de stockage. Comparons un terrain lisse. Carte de hauteur vs voxels. Carte de hauteur : 16 bits 8 192 x 8 192 = 128 Mo. Voxels : 4 x 4 x 4 briques = uin64 = 8 octets. Il nous faut 2 048 x 2 048 briques pour couvrir la surface de terrain de 8 k² = 32 Mo. Les niveaux supérieurs SVO/DAG ajoutent moins de 10 %.
L'estimation ci-dessus est optimiste. Sur un terrain accidenté, nous nous retrouvons généralement avec deux briques superposées. Nous avons donc 64 Mo de briques feuilles. Les niveaux supérieurs SVO/DAG n'augmentent pas beaucoup (car nous utilisons des pointeurs enfants partagés). Le total est inférieur à 70 Mo. C'est quand même une victoire.
Chaque brique possède un masque de voxel uint64 (4x4x4) et un pointeur de données enfant partagé de 32 bits (permettant d'accéder à 16 Go de données voxel grâce à un alignement sur 4 octets). Une brique standard fait 12 octets. Les briques feuilles ne font que 8 octets et ne possèdent pas de pointeur enfant (le suffixe ne compromet pas la cohérence SIMD).
Le constat intéressant est qu'Octtree stocke les bits de manière récursive dans les niveaux de l'arbre. Si chaque niveau contient 4x4x4 briques, on obtient 2 bits de précision par niveau. Ainsi, 8 niveaux = 16 bits de précision en hauteur. Cependant, les bits les plus élevés sont partagés entre de nombreux voxels.
Correction : Je parle ici d'arbres 4x4x4, et non d'arbres 2x2x2 (oct-tree). Un oct-tree standard divise bien sûr chaque région en deux sur chaque axe, ajoutant ainsi un point de précision pour chaque coordonnée.