Radiance Cascades in Unreal

It seems this is a wildly-different way of calculating lighting. It also seems somewhat-performant, and from the demo’s I’ve seen and played with VERY convincing lighting. ‘Radiance’ certainly describes it, the way the saturation/glow of the lighting changes over distance.

Is this a thing that might be brought to Unreal Engine?

This popped up on the Lumen thread a while back. Definitely interesting stuff. Not sure how it might impact UE - if at all - but I can’t help but wonder how it would compare. Maybe eventually someone will build a plugin

That’s my thought too. It’s not so much too-good-to-be-true but compared to the way lumen, et-al work one does just-wonder how well it would perform, comparatively.

Making a plugin is beyond my skills, however. :smiley:

EDIT: the thought in the back of my head is if this is magic-shoe-polish it seems to be, is the effort on something like Lumen largely wasted?

one thing that stands out is that it’s only 2d. add a 3rd dimension and you’ll have a load more of computation. hmm

1 Like

The only 3D implementation of Radiance Cascades that I have seen has been by the original author (Alexander Sannikov) on his Youtube channel, and while it works I find it really hard to draw any conclusions from it, especially since it’s primary use case is in a top down game which has different requirements than a third/first person game.

Just to provide some additional context, there’s been discussion in Godot’s HDDAGI PR about somehow “augmenting” HDDAGI with Radiance Cascades (no idea how that’s supposed to work) and the Radiance Cascade author had this to say:

Upgrade SDFGI to HDDAGI by reduz · Pull Request #86267 · godotengine/godot · GitHub
…First, I never pitched 3d RC as the ultimate GI solution. I never even pitched it as a good GI solution. I wouldn’t even call it practically viable by my standards, to be honest. I’m just saying that it’s a direct improvement (in pretty much all parameters) over anything that has a regular grid (or nested grids) of radiance probes. DDGI for example.

Juan Linietsky (of Godot) also wrote about Radiance Cascades on Twitter recently:

x.com
There is still such level of hype about radiance cascades even a year after the announcement.

The problem is, this technique, as great as it is, does not do what most people thinks it does…

So, let me make it clear, for 2D its actually really useful due to how 2D works, but for 3D to me its a non starter for the most part. There are a lot of problems with it that are very hard to solve. The main issue is that, as it writes “by using the higher cascade probes to continue the ray” what this really means is that you have to interpolate the 8 nearby probes depending on the UVW coordinates inside of the octant.

In 3D this does not work as simple as in 2D, because to interpolate you need to have a means of occlusion (otherwise light will come through walls). To solve this you can prooobably raycast from bigger to smaller cascades, few rays and compute a general occlusion term. But at the smaller cascade size, you need to interpolate the pixel 3D position between the 8 neighboring probes anyway and you still need occlusion (else again, light coming through walls). This can probably be done in screen space, which may have artifacts (i don´t know)…

Additionally, there is another problem. Again because we have to interpolate and occlude the bigger cascades, if the space between them is too big, interiors will probably not get any lighting at all. This means the bigger cascade needs to have a limit. So at much, your whole system will likely have only 3, at much 4 levels of cascades, kind of limiting the technique usefulness. But, okay, if you have a level of a limited size, it can be made to work.

But what about open world?.. That’s another can of worms, because the memory required would be too big. Instead, you have to use cascading of radiance cascades for this! (basically running the whole thing several times at different sizes and interpolating). Or have them clip-map style, still really hard…

So, at the end of the day. My feeling is that this is a great technique for 2D, but extremely limited for 3D. The only way I can see it working is kind of as an extension to DDGI to give it more high frequency detail… but which you can still do in screen space… Ah but I know what you think, doesn’t Path of Exile use this in production? Yes, but they use it in screen space, which works because the game has a limited view range…

So, don’t be dissapointed, GI is like this, thousands of papers come out, but most have very limited use

I can’t really evaluate this criticism, this is all above my paygrade. Only offering it here because I found the discussions interesting.

Another interesting note, AMD recently released their GI with Brixelizer, which looks similar to how Lumen works (two level radiance caching, probes placed on depth buffer, traces a sparse distance field) while avoiding at least some of the drawbacks that Lumen currently has (precomputed card positions being required for generating surface cache, no SDFs for skeletal meshes, etc) so clearly Epic isn’t alone in thinking this is a good approach.

2 Likes

Figured I’d bump this as there are now a couple of 3D implementations of Radiance Cascades on ShaderToy (by “Mathis”):

1 Like

“Lumen in the world of Nanite” shipped with Lumen Screen Probe Hierarchy, which is very similar to radiance cascades. It sets up a probe hierarchy in screen space and connects probes. We moved away from it towards screen probes+ world space probes as it allowed for more caching and was less expensive. This code was deleted, but you can find it in older releases.

5 Likes