Se suele pensar que los vóxeles ocupan mucho espacio de almacenamiento. Comparemos un terreno liso. Mapa de alturas vs. vóxeles. Mapa de alturas: 16 bits 8192x8192 = 128 MB. Vóxeles: bloque 4x4x4 = uin64 = 8 bytes. Necesitamos 2048x2048 bloques para cubrir la superficie del terreno de 8k^2 = 32 MB. Los niveles superiores de SVO/DAG añaden <10 %.
La estimación anterior es optimista. Si el terreno es irregular, terminaremos teniendo dos bloques superpuestos en la mayoría de los lugares. Por lo tanto, tenemos 64 MB de bloques de hojas. Los niveles superiores de SVO/DAG no aumentan mucho (ya que usamos punteros secundarios compartidos). El total es <70 MB. Aun así, es una victoria.
Cada bloque tiene una máscara de vóxel uint64 (4x4x4) y un puntero de datos hijo compartido de 32 bits (puede direccionar 16 GB de datos de vóxel gracias a la alineación de 4 bytes). Un bloque estándar tiene 12 bytes. Los bloques hoja tienen solo 8 bytes; no tienen el puntero hijo (postfix no afecta la coherencia SIMD).
Lo interesante es que Octtree almacena bits recursivamente en niveles de árbol. Si cada nivel almacena bloques de 4x4x4, se obtienen 2 bits de precisión por nivel. Por lo tanto, 8 niveles = 16 bits de precisión en altura. Sin embargo, los bits altos se comparten entre muchos vóxeles.
Corrección: Me refiero a árboles 4x4x4, no a árboles 2x2x2 (oct). Un árbol oct estándar, por supuesto, divide cada región en dos en cada eje, añadiendo un bit de precisión por cada coordenada.