Tiled Resource? Array of Texture3D? Efficient TSDF Volume with less memory footprint
Tiled resources does look like a good candidate.
You could map all empty voxels to a single (dummy) tile containing your special 'empty' value.
Do note that the tiled resources API can be tricky to work with because of the page sizes (and the differences between the different tiers).
The tile size is the same across all the tiers (64KB). The shape of the tile is defined too.
I've some experience using huge 2DArray and 3D textures on my ray tracing Minecraft project and can confirm that the Tiled Resources API is useful in substantially reducing the memory footprint of these large textures. That said, you need to be able to find coherent regions of the texture that will all be able to map to the same tile. "Free space" (air, in the case of Minecraft) can be not backed by any physical memory on some GPUs and to a dummy 'zero' tile on others.
You weren't quite clear on what the bit depth of your texture is, but you're looking at regions of around 32x32x32 for a 16 bit texture.If you can find lots of 32x32x32 regions that are all the same, then by all means use Volume Tiled Resources. Be aware though that you will not find support for this on any AMD GPU that currently exists and only on NVIDIA Maxwell GM2xx and above. I think Intel's support started at Skylake.
Thanks Guys,
So it seems Tiled Resource would definite help to reduce memory requirement. But does it allow efficient update (I mean some of my previous frame empty tile will become non-empty and some non-empty tile may become empty...) ? I may need to familiarize myself with Tiled Resource, but just want to get some feeling before I dig in.
Thanks
Yup, you can update the contents of individual tiles as well as change the mappings between virtual and physical memory to change a subset of the whole texture's mappings on the fly.