Voxel Cone Tracing in OpenGL for rendering fully dynamic realtime global illumination

The goal of this thesis was to implement a lighting algorithm capable of rendering global illumination in real-time speed, which also is particularly suited for highly dynamic scenes. To achieve this, existing versions of the relatively novel Voxel Cone Tracing algorithm were used as reference.


Realistically looking and accurate lighting algorithms which calculate global illumination effects are computationally expensive and therefore not suitable for real-time applications. In contrary, fast algorithms have to dismiss the simulation of global illumination or rely heavily on pre-calculations, which make them less practicable for dynamic scenes.
In order to create a lighting algorithm which satisfies all the desired attributes, namely real-time speed, approximation of global illumination and suitability for dynamic scenes, an adapted version of the relatively novel Voxel Cone Tracing algorithm, described in [1], was implemented in C++, OpenGL and GLSL. Furthermore, two other implementations of Voxel Cone Tracing from NVIDIA and Q-Games, stated in [2] and [3], were used for reference.
The newly written implementation in this thesis uses, like others, a hierarchical voxel data structure and the usual five steps of voxelization, light injection, propagation, cone tracing and final lighting. In addition it also features multiple point-, spot- and directional lights. To cope with highly dynamic scenes, no pre-computations are done, everything is calculated each frame. Another important aspect of the implementation are the numerous parameters which allow fine-granular customizations for different scenes.


As it turned out, the algorithm was a good choice and the implementation fulfills all the desired properties, although there are some problems with artifacts left, which lower the visual quality. The approximation of the indirect diffuse light diffuse light can be approximated very well and the computation times are relatively fast, depending of the various parameters. This applies also for highly dynamic scenes as there is no performance drop.
The following diagram shows the computation times of each algorithm step compared over three different test scenes with moderately chosen parameters like e.g. 32 voxels per dimension and a final resolution of 1280x720. The used graphics card was a NVIDIA GeForce GTX 1060.

The following picture shows the indirect lighting share of the Sponza test scene. The voxel patterns are clearly visible.

This implementation is a good base for further work and could be improved through a number of enhancements, mainly in the field of interpolation and filtering to reduce those voxel patterns. Also obvious and relatively simple additions would be e.g. soft shadows, specular indirect light and refraction.


Full version of the bachelor thesis (German only)


[1] Crassin, C. et al. (2011). Interactive indirect illumination using voxel-based cone tracing: An insight. In ACM SIGGRAPH 2011 Talks, SIGGRAPH 11, pages 20:120:1. ACM. Link

[2] Panteleev, A. (2014). Practical real-time voxel-based global illumiantion for current gpus. GPU Technology Conference. Link

[2] McLaren, J. (2015). The technology of the tomorrow children. Game Developer Conference. Link


This original work is copyright by University of Bremen.
Any software of this work is covered by the European Union Public Licence v1.2. To view a copy of this license, visit eur-lex.europa.eu.
The Thesis provided above (as PDF file) is licensed under Attribution-NonCommercial-NoDerivatives 4.0 International.
Any other assets (3D models, movies, documents, etc.) are covered by the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit creativecommons.org.
If you use any of the assets or software to produce a publication, then you must give credit and put a reference in your publication.
If you would like to use our software in proprietary software, you can obtain an exception from the above license (aka. dual licensing). Please contact zach at cs.uni-bremen dot de.