Thursday, December 10, 2009

SVO path tracer WIP

Inspired by the recent flood of real-time path tracers (both commercial and non-commercial:

V-Ray RT,
mental images iray,
Nvidia Optix,
Caustic's Brazil RT,
David Bucciarelli's SmallptGPU OpenCL path tracer (http://davibu.interfree.it/opencl/smallptgpu/smallptGPU.html),
albertoven's Raydiant (albertoven.com),
mxadd CUDA path tracer (http://mxadd.org/CenterFrame.php?wherejump=projects),
javor's CUDA path tracer (http://javor.tech.officelive.com/tmp.aspx))

and the promise of infinite geometry by using voxel rendering, I decided to take the best of both worlds and write an SVO path tracer as a hobby project ;-). My goal is to make a very simple demo showing a Cornell box with a SVO voxelized Stanford Dragon in it, interactively path traced (brute force calculated unbiased indirect lighting) with CUDA (or OptiX, if it's easy enough to implement SVO raycasting). The whole scene must fit in video memory, no streaming (yet), because the path tracing algorithm would badly choke.

I also want to do a comparison between a polygon version and an SVO version of the aforementioned scene, hoping to demonstrate that path tracing voxels is much faster than path tracing polygons, due to the much simpler ray-voxel intersection calculation and automagic multiresolution benefits (see Cyril Crassin's "Beyond triangles: gigavoxels effects in videogames").

I'm still in the research phase, reading articles on (volume) path tracing and SVO (Cyril Crassin's Gigavoxels paper is extremely informative and I think you could just extend the raycasting to a path tracing approach). More to come soon.