AMD FidelityFX™ Brixelizer GI is a compute-based real-time dynamic global illumination solution built upon the sparse distance fields from AMD FidelityFX™ Brixelizer.
It provides you with denoised indirect diffuse and specular lighting outputs that you can composite into your final lighting output.
AMD FidelityFX™ Brixelizer is a library that generates sparse distance fields for triangle geometry in real-time for efficiently tracing rays against your scene.
It works with both static and dynamic geometry and provides a shader API to trace rays against the distance field. It generates cascades of sparse distance fields around a given position and each cascade is split into 64x64x64 voxels.
If a voxel intersects any geometry, it generates a local distance field within the voxel. These local distance fields are known as Bricks.
A top-down view of two AMD FidelityFX™ Brixelizer cascades containing geometry.
A visualization of a slice from the brick atlas 3D texture.
Final lighting output of a 3D scene.
SDF debug visualization of a 3D scene.
Algorithm overview - Brixelizer GI
AMD FidelityFX™ Brixelizer GI is a simplified implementation of AMD GI-1.0.
It takes in the G-Buffer resources of your application alongside the output resources from AMD FidelityFX™ Brixelizer to generate Diffuse and Specular GI outputs.
Due to the lack of material information in the distance field from AMD FidelityFX™ Brixelizer, we maintain an internal radiance cache which is populated by the previous frames’ lighting output.
Including just direct lighting will result in 1-bounce diffuse GI, whereas including the composited output from the previous frame gives you multiple bounces effectively for free.
Left: Radiance cache with one bounce, right: Radiance cache with multiple bounces.
JPG (1600x899)
JPG (1600x900)
Next we spawn screen probes on the visible surfaces in the depth buffer and shoot rays using AMD FidelityFX™ Brixelizer and sample the radiance cache for shading.
These screen probes are then used to feed a world space irradiance cache that stores spherical harmonics probes for each valid brick.
Visualization of screen probes.
Visualization of the irradiance cache.
Finally the outputs are resolved and denoised, leaving you with a Diffuse GI and Specular GI output that you can composite into your final lighting.