I am playing with ideas to represent world geometries. Playing with deformable voxels as "surface nets", I finally implemented a deformable recursive grid to store the voxels.
I guess the idea is really close to brick maps as for example, exposed by Cyril Crassin in his nice Ph.D. here.
The idea is super simple: this is just a grid of grid of .... of voxels.
Anyway, the code is here for those who want to look at it:
(look for brick something)
One of the interestings parts is obviously to raytrace this thing. Ray tracing a grid is super simple as exposed by Amanatides here. Extending it to recursive grid is as simple as some c++ template horror and tracking both tmin and tmax while recursing (see "intersect" function).
with the depth map as it is raytraced:
Native C has been compiled with gcc 4.7 and the JS versions with emscripten.
Here are the performance:
Native C: 919,000 ray/s
Firefox nightly: 148,000 ray/s
Firefox nightly + asm.js: 508,000 ray/s
Chromium 25: 111,000 ray/s
asm.js proves to be super efficient and as advertised, I got 50% of native performance.
Obviously, native code is not using any SIMDified code so, in practice, the gap is still much larger. Also, for JS versions, multi-threaded code will only work with webworkers which will only support message passing. This may bring some extra hit compared to a regular shared memory implementation.
Anyway, this is still really encouraging!