Screen Space Global Illumination (SSGI)

So this is really cool. I’ve been wondering whether this would be possible for a long time, since it’s a seemingly natural analogue to screen space reflections (albeit a worst case with rays traveling in every direction). I started playing around with this, and the results are indeed pretty similar to static indirect light in cases where everything is onscreen. I’ve got a bunch of thoughts, but since I’ve made no effort to look into how this particular implementation works, they may turn out to be stupid thoughts:

-Is there (or could there be?) any pre-filter/blur of the buffer that’s being sampled from, to reduce noise? It occurs to me that this might actually work with SSR as well, at least for surfaces

-Is it possible to make this effect only apply to dynamic lights, or to be toggled on a per-light basis? From my limited test, it seems like the SSGI only falls back to baked lighting for rays that “miss” the render target*, but I haven’t found a way to make a static light used baked lighting exclusively. This would be super useful in situations where most of the lights are baked, since SSGI still doesn’t perfectly match the quality of baked lighting.

-In the same vein as how SSR and reflection captures are mixed, it would be really neat for this to be able to fall back to these localized diffuse captures in situations where baked lighting isn’t practical.

I’m hoping that this will at least reduce the number of games where even extremely bright flashlights inexplicably fail to produce any bounce lighting.

*(edit) Actually, apparently it just applies the SSGI on top of the static indirect light. I thought this behavior was “incorrect,” but as long as the indirect occlusion component is applied to the baked lighting before the additive bounce light, the overall should be (roughly) conserved. Being able to apply the effect more selectively still seems like it would be extremely valuable.

I also notice that SSGI respects the “indirect lighting intensity” post-process value, meaning it can be used as a replacement for SSAO without any bounce lighting by setting the value to 0.