As I am currently still working on this project there are a variety of features left to implement. In terms of global illumination specific features, I have planned to use an irradiance probe-based method to cache the radiance coming from a direction at any point inside an area. This is done by uniformly placing irradiance probes in a grid. The information gathered by the probes is written to a texture using octahedral mapping. Octahedral mapping will be used as it has less warping than other methods such as cube maps. The cached values can then be accessed with a big O notation of O(1) greatly speeding up global illumination calculations. Monte Carlo integration will then be used to collect the irradiance over a hemisphere at each point being rendered allowing real-time performance.
One change not specific to global illumination that I will be implementing is I will be switching to a bindless architecture. This architecture is ideal for raytracing as all resources must be available at all times due to the application not knowing which object will be intersected by the ray next. An advantage of a bindless architecture is that it greatly reduces overhead as the resources don't need to be bound every frame. A disadvantage is that it can make debugging shaders harder as there is an extra layer of abstraction between the resources and the geometry. This can be negated by using PIX to ensure the application is accessing the correct descriptors.