Global Illumination alternatives

The first version I made was placing Virtual Point Lights by ray tracing through the distance field scene. The result was unstable placement, no diffuse color, but a very small number of resulting VPLs to do lighting with so it was fast. It was ~6ms in a Fortnite level on an AMD 6870.

This version is working toward something more general purpose. Surfels (oriented disks) are generated to represent meshes, including diffuse color. They are treated as VPLs in order to transfer their lighting to pixels on the screen. This version is much slower because the number of VPLs needed is based on the surface area of the scene, instead of the projected area of the light. However it sets the framework for diffuse GI from multiple light sources and even multi-bounce GI, whereas the previous version could only do single bounce. This one is ~17ms in a Fortnite level on AMD 6870. The main optimization missing is creating a hierarchy of Surfels, and only lighting from the top of the hierarchy if that Surfel is far away.

There are still a lot of problems to solve - improving bounce distance, over-occlusion indoors, some leaking, point and spot lights, overall performance, etc.