This approach offers huge performance gains over the approach in the previous video of the other deferred rendering technique (20,000 culled lights in the scene @ 50-60fps).

Demo of tiled frustum light culling using an OpenCL kernel that divides the screen up into 32x32 pixel tiles. For each tile, the kernel then finds the minimum and maximum Z depth of the pixels in that tile through a reduction.

With this information, a bounding frustum is created for each tile and each point light's position + attenuation (affected area) in view space is then culled against this frustum.

The idea is that you can then get a list of all the lights that are affecting each tile, cutting down on the number of fragments you need to process for shading. An OpenCL kernel calculates diffuse and specular lighting which are later composited in a fragment shader with post-processing applied for DOF + shadow blending.

Debug view of the buffers used for light culling - Abedo/Shadows, View Space Normals, Diffuse Lighting, Specular Lighting, SSAO, Min Z for each tile (Max Z is also calculated, but not displayed in this debug view), Light "heat map" showing number of lights affecting each tile (provides a visual idea of how much processing each tile will need to perform, not actually used for rendering - just an illustration of the light culling).

Jump to 00:30 to see the different buffers!

Loading more stuff…

Hmm…it looks like things are taking a while to load. Try again?

Loading videos…