views:

3512

answers:

4

I have reading a lot about the potential use of sparse voxel octrees in future graphics engines.

However I have been unable to find technical information on them.

I understand what a voxel is, however I dont know what sparse voxel octrees are or how are they any more efficient than the polygonal techniques in use now.

Could somebody explain or point me to an explanation for this?

+6  A: 

Here's a snippet about id Software on this subject.

id Tech 6 will use a more advanced technique that builds upon the MegaTexture idea and virtualizes both the geometry and the textures to obtain unique geometry down to the equivalent of the texel: the Sparse Voxel Octree (SVO).

It works by raycasting the geometry represented by voxels (instead of triangles) stored in an octree.

The goal being to be able to stream parts of the octree into video memory, going further down along the tree for nearby objects to give them more details, and to use higher level, larger voxels for further objects, which give an automatic level of detail (LOD) system for both geometry and textures at the same time.

Also here's a paper on this.

Found more information in this great blog entry.

Well, voxels alone are not that interesting, because for any reasonably detailed modeled, you would need extremely huge amounts of voxels (if using an uniform grid).

So, a hierarchical system is needed, which brings us to octrees. An octree is a very simple spatial data structure, which subdivides each node into 8 equally large subnodes.

A sparse octree is an octree where most of the nodes are empty, similar to the sparse matrices that you get when discretizing differential equations

Ólafur Waage
i read that before but that really doesnt give any hard technical details. like what is 'sparse' about the trees? why octree and not binary tree or 'hexa' tree?
pdeva
Updated with a paper on this.
Ólafur Waage
They are called octree because the space is divided into 8 equally sized subspaces each time.
schnaader
Schnaader - yes but why 8, why not any other number. Olafur - nice paper but it does not seem to describe sparse voxels.
pdeva
CynicismRising
pdeva: Look at the papers/presentation linked in the blog post -- the GigaVoxel paper and the "Beyond programmable shading" presentation have all the "hard technical" data you are looking for.
Anteru
A: 

I'm interested in the details too. The most interesting aspect of sparse voxel octrees is the way pointers are ommited somehow, resulting in an astonishing compact datastructure; I read somewhere each voxel takes about 2 or 3 bits on average. That's mighty compact, enabling huge environments to be modelled with unique color&geometry for every square inch of the terrain (or other model).

So IMHO the real question is : What datastructure does idTech6 use for "sparse voxel octrees" to reach these data-densities?

PatrickvL
The 2-3 bit is due to RLE compression etc. Basically, for each voxel, you can store a bit vector which child is valid, and then the child offsets in the file. This gives you already quite compact storage. Then you can still do RLE, as many children will be more or less equal. For details, look into the "Beyond programmable shading" presentation, they provide the exact bit counts there.
Anteru
+1  A: 

actually, the 1.15 bits make me suspect they just store things sequentially, in some brilliantly simple way. that is, if they're only storing the volume data and not things like colour or texture data as well.

think about it like this: 1 voxel only needs to be 1 bit: is it there or is it not there? (to be or not to be, in other words :P). the octree node it's in is made of 8 voxels and a bit to store whether the thing contains anything at all. that's one bit per voxel plus one per 8. 1 + 1/8 = 1,125. add another parent node with 7 siblings and you get 1 + 1/8 + 1/8/8 = 1,140625. suspiciously close to the 1.15 they mentioned. although i'm probably way off, it may give someone some clue.

Martijn Dekker
A: 

I don't know what exactly a Sparse Voxel Octree (SVO) does, but what an octree is: It's can be used space subdivision. You can visualize this in 2d with a quadtree, see this book

Nils