In previous months I've posted several simple volume lighting tests. The screen shots were taken in my global illumination lightmap renderer so the results were fairly basic. I wanted to try using light volumes on a more complicated scene so I blew the dust off an old deferred render testbed and modified it to work with light volumes.
I was about to build my own environment but remembered that Crytek had released their cracking version of the Sponza model so that's the model you see here. The model is largely unchanged although I've left out a few objects. The plants for one, mainly due to no alpha support in my render engine. I've also added some paper lanterns and a second UV channel for the ambient occlusion maps (see
previous post).
Light volume generation
As before, a rough GI solution was first generated for the scene. This solution was then sampled to create the light volume textures. The rough solution, consisting of about 15 512x512 light maps and the light volumes took about 4 minutes to compute.
Screenshots taken from my GI light-map / light-volume renderer
Placing the light volumes was tricky, care needs to be taken that no sample point falls outside the scene or can “see” through to areas it shouldn't. The mid level floor and vaulted ceilings in particular took a few tries to get right. I used two volumes in this scene. It may have been possible to use just one but I wanted to attempt a scene with multiple volumes.
The smaller volume is 8x8x32 and the larger is 32x17x64
Scene rendering with light volumes
The deferred renderer I'm using renders in the following stages.
1. Render compressed view space normals, material roughness and depth to G-Buffer.
2. Render dynamic scene lights to light buffer.
3. Render volume lighting to light buffer.
4. Render final geometry using light buffer.
It wasn't hard to add an extra lighting stage to incorporate light volumes. The extra stage functions much like the existing light buffer stage. Geometry representing the light volume is drawn to the screen and the relevant area of the volume can then be sampled. Below is a breakdown of the lighting stages.
Static ambient occlusion (rendered offline in my lightmap renderer)
Dynamic direct light
Light volume ambient diffuse and specular
Final light buffer
As mentioned in the original paper (see references section) the light volume can also provide local environment specular. I initially underestimated this effect but it certainly makes a difference, especially in areas untouched by direct light. The images below show the effect well. A fresnel term also makes a big difference here, note the increased reflections on the wall in the second image.
In addition, a couple of images showing ambient specular and ambient diffuse in isolation.
Finally, two videos of the scene under seperate lighting conditions.
References / Links
Gamefest 2010, Lighting Volumes
HDR the Bungie way
Engel's Prepass Renderer (SIGGRAPH 2009)
Updated Crytek sponza model