Volume-Based Ambient Occlusion

As a project in the course Technology for Advanced Computer Games, my friends and I implemented a Volume-Based Ambient Occlusion render pass on the GPU, as well as the voxel fragmentation of scene geometry into a Sparse Voxel Octree (SVO).

The AO is calculated in a fragment shader and uses a 3D texture filled with the geometry data. The texture is 512x512x512, which becomes the total resolution of the scene. When the geometry is being rendered, the volume data is used for the light calculations. We ray march the 3D texture to simulate outgoing rays from every fragment for the calculation of ambient occlusion.

The SVO is implemented on the CPU and can be used to visulize the 3D rasterization of the scene. However, as for now, it is not used for the AO calculations, which was our goal from the beginning.