Voxel Cone Tracing Global Illumination in OpenGL 4.3
Here is an implementation of global illumination (GI) using voxel cone tracing, as described by Cyril Crassin et al. in Interactive Indirect Illumination Using Voxel Cone-Tracing, with the Crytek Sponza model used for content.
This demo served both as a means to familiarize myself with voxel cone tracing and as a testbed for performance experiments with the voxel storage: plain 3D textures, real-time compressed 3D textures, and 3D textures aligned with the diffuse sample rays were tested. Sparse voxel octrees were not implemented due to time constraints, but would have been nice to have as a baseline reference. Compared to SVO in the context of voxel cone tracing (as opposed to ray casting, where SVO is a clear winner), 3D textures allow for easier filtering, direct lookups without evaluating the octree structure, and potentially better cache and memory bandwidth utilization (depending on cone size and scene density). The clear downside is the space requirement: 3D textures can’t scale to larger scenes or smaller, more detailed voxels. There may be ways to work around this deficiency: sparse textures (GL_AMD_sparse_texture), compression, or hybrid schemes that mix tree structures with 3D textures.
You can download the demo from this link.
The zip file includes the binaries files as well as the source code (Visual Studio 2010 project).
The demo requires the OpenGL 4.3 support. On my GTX 680 with R310.70, the demo runs at around 30 FPS:
Visualization of the voxels