人们通常认为体素占用大量存储空间。让我们比较一下平滑地形。高度图与体素。高度图:16 位 8192x8192 = 128MB;体素:4x4x4 块 = uin64 = 8 字节。我们需要 2048x2048 块砖来覆盖 8k^2 的地形表面 = 32MB。SVO/DAG 上层增加 <10%
上述估计是乐观的。如果地形崎岖,大多数情况下我们最终会将两块砖块叠放在一起。因此,我们总共有 64MB 的叶砖块。SVO/DAG 上层不会增加太多(因为我们使用了共享子指针)。总计不到 70MB。仍然很成功。
每个砖块都有一个 uint64 体素掩码(4x4x4)和一个 32 位共享子数据指针(由于 4 字节对齐,可以寻址 16GB 的体素数据)。标准砖块为 12 字节。叶砖块只有 8 字节,它们没有子数据指针(后缀不会影响 SIMD 一致性)。
有趣的实现是,八叉树以树级递归方式存储位。如果每级存储 4x4x4 个块,则每级可获得 2 位精度。因此,8 级 = 16 位高度精度。但高位由许多体素共享。
更正:我这里说的是 4x4x4 树,而不是 2x2x2 (八叉树)。标准的八叉树当然会将每个区域在每个轴上拆分成两个,从而为每个坐标增加一位精度。