People often think voxels take a lot of storage. Let's compare a smooth terrain. Height map vs voxels. Height map: 16bit 8192x8192 = 128MB Voxels: 4x4x4 brick = uin64 = 8 bytes. We need 2048x2048 bricks to cover the 8k^2 terrain surface = 32MB. SVO/DAG upper levels add <10%
The above estimate is optimistic. If we have a rough terrain, we end up having two bricks on top of each other in most places. Thus we have 64MB worth of leaf bricks. SVO/DAG upper levels don't increase much (as we use shared child pointers). Total is <70MB. Still a win.
Each brick has uint64 voxel mask (4x4x4) and 32 bit shared child data pointer (can address 16GB of voxel data due to 4 byte alignment). A standard brick is 12 bytes. Leaf bricks are just 8 bytes, they don't have the child pointer (postfix doesn't cripple SIMD coherence).
The interesting realization is that octtree stores bits recursively in tree levels. If each level stores 4x4x4 bricks, you get 2 bits of precision per level. Thus 8 levels = 16 bits of precision in height. But the high bits are shared between lots of voxels.
Correction: I am talking about 4x4x4 trees, not 2x2x2 (oct) trees here. A standard oct-tree of course splits each region to two in each axis, adding one bit of precision for each coordinate.