Download

Global Illumination alternatives

Hi guys,
I just started getting interested in this fantastic realtime world coming from a vfx background (and having to wait for renders hours per frame)

I browsed the forum a bit and aside from Lionhead’s effort to include LPV in this release I didn’t see much work from others, just a lot of complaints about the lack of SVOGI (which was looking very good btw)

So, I just wanted to get out a list of alternative algorithms that I found online, hoping that someone with programming experience, access to the source and a lot of spare time can implement something the way lionhead did.
So far the most interesting stuff I found is this:

Delta Radiance Transfer
Modular Radiance Transfer
Deferred irradiance volumes
This guy who has something nice going but I don’t really understand what’s going on

Those are just a couple of papers I stumbled on the internet. Usually I find offline rendering stuff (like path-tracing etc) to document myself, but all this realtime thing has gotten my ears whizzing!
Of course anyone is welcome to add his findings.

One thing I wanted to know is, is there any research on faking a path tracing algorithm using GPU particles? Since unreal engine can manage a lot of those easily and they can bounce, and seeing that the rendering engine uses a deferred path, would it be possible to just use those and let them illuminate at each bounce while losing energy? Also, why not store light afterwards in something like a voxel grid for the indirect bounces and let particles illuminate every cell while they traverse it? this way you could emulate participating media and volumetrics.

Just thoughts tho, I love the looks you can get now, especially the reflection system. I was astounded when I saw Remember me use it on the UE 3, and I’m glad you picked up from there and refined that.

Cheers!

I’d love to see something along the lines of Ubisoft’s deferred radiance transfer volumes, which looks like it’s largely the same thing as the deferred irradiance volumes you linked above. It’s limited to only bouncing light from static level geometry (as opposed to a dynamic actor that may pass through a light source), but being largely precomputed means it runs. It was already used in Far Cry 3 on last-gen 6 year old consoles and had support for all lights (as opposed to just the main directional sun/moon) on PC hardware, so it’s obviously feasible in fully shipped titles and not just reserved for tech demos. From what I’ve seen of their new Snowdrop engine, it looks like they’re using the same thing.

Personally getting something up and running that can work with all light types would be fantastic and would allow for time of day changes in addition to dark corridors that could have bounce light reflected back from smaller dynamic point/spot lights.

I actually found interesting, implmenetation of LPV, based on Octree. It supports multiple bounces from muliple light sources, and it is bit faster than normal LPV technique.

Also LPV can be extended to support SubSurface lighting and glossy reflections. More over it support fully dynamic scenes. Overall while it have probably bit lower quality than Radiance Transfer techniques, it is more flexible in terms of what you can do with it.
And there is already implementation in place, all it needs is to be finished.

http://www.jiddo.net/index.php/projects/other-projects/80-thesis-octree-lpv

nvidia GI works paper: http://on-demand.gputechconf.com/gtc/2014/presentations/S4552-rt-voxel-based-global-illumination-gpus.pdf (not sure how different it is from SVOGI)

It is vxelizing scene and 'LODing it in diffrent way than svogi, reducing amount of memory needed. Though honestly 2.5GB of memory and 7ms render time is still quite huge.

I could personally live with the 7ms render time, but most consumer systems quite simply don’t have the kind of muscle to use such a technique.

Epic is, hopefully, working on light propagation volumes. Which is just about the fastest actually “global” global illumination technique available, and its shortcomings, such as lacking GI to and from distant areas, can hopefully be overcome.

The problem with just about all the papers you linked are… well all realtime GI has multiple problems. It’s an NP Hard or rather O(n)squared problem, meaning there’s basically no way to really hack around it and just make it fast. And so there are tradeoffs, like excessive light leaking (which doesn’t look good) static environments only (not ideal for many reasons), lack of specular information (really not good with UE4’s physically based metals) and etc. Including usually “it takes up a heck of a lot of time.” I don’t think I’ve seen a game use absolutely any of the linked papers, often for multiple of the above reasons and others.

LPV is nice because, while there’s light leaking, if you’re clever enough you can make it “manageable” to where it’s not too bad. And there’s a lot of other tradeoffs, not really workable for highly dynamic objects, light has a “latency” or rather the GI has lag time, and etc. etc. But for most game scenarios it’s a “good enough” solution. And since GI is so hard (literally by definition) “good enough” is about as well as we may get done for this entire generation.

Never the less it would be nice to have GI Works in. Even if not for entire GI, it would nice for indirect shadowing and ambient.
Calculating those is fairly efficient and not memory intensive, and it can add a lot of visual fidelity to scene.
Especially, when your scene is more closed or dense populated by objects. Doesn’t mean it have to be inside building, but lots of foliage or building close to each other.

Indirect shadowing, help a lot with breaking flat look, adding much more sense of depth to entire image and proper ambient term, help with normal maps being to dark under certain directional light angles.

Waiting for more info about possible integration.

Not sure I follow. Haven’t you guys tried the Dynamic Global Illumination from Lionhead? While not perfect, it’s a good work in progress.

We tried, but NVIDIa solution also provide Indirect Shadows (Ambient Occlusion), and higher quality specular reflections.

Both solutions have it’s merits, I would rather prefer LPV for diffuse and glossy reflections because it is much more efficient, but having GI Works just for ambient occlusion would be great and would nicely fix most apparent LPV shortcomings.

@iniside, have you seen Naughty Dog’s imperfect shadow maps applied for dynamic indirect shadows? *Check TLoU for instance.
Actually, it hurts when devs still stick to AO and fake indirect shadows instead of researching other methods like the one mentioned above.

GI Works provide real Ambient Occlusion (indirect shadowing). So I don’t know where do you see any issues ?

Nautghy Dog solution is static and by that, not really comparable to real time solution like Voxel AO.

The thing is that, I just can’t understand what AO and indirect shadowing have in common besides the fact that AO makes a fake CONTACT shadow (although, it’s still an indirect shadow, yes).
AFAIK, AO can’t provide actual shadows, it just fakes them. And one more question: how can imperfect shadow (ISM) maps be static?

Yet again, any criticism is welcomed, of course I might be wrong about that (I know not that much of AO, but I really think ISM are dynamic).

I don’t say that Imperfect Shadow Maps are static, but from last paper I read, I gathered that Naugthy Dog solution was static.

As for AO and Indirect Shadows. These terms are used pretty interchangeable, that is why there is clear distinction between various xxxxAO techniques (which are usually screen space approximated), and just AO (which is not approximated but calculated from all geometry).

My bad if it caused confusion.

Nvidia’s solution doesn’t work with large game areas. Even for a relatively small area it eats ram like you wouldn’t believe. Besides, this is just a less advanced version of what Epic already tried (hey they already did cascaded voxel level of detail!) and concluded it wasn’t really fast and flexible enough to bring in, especially not with the Xbox One.

Now Voxel Cone Tracing is a really great idea, and I’ve actually been working on… well getting them to work myself along with many others. Maybe soon it will be practicable, but it’s not right now and Epic tried quite hard to get it so.

Edit- Imperfect shadow maps are awful. Super light leaky, SUPER high performance hit, depending on how you sample it gets super “poppy” with lights and/or shadows popping in and out.

Here are some more rendering research paper(some of it is real-time stuff):

http://people.mpi-inf.mpg.de/~ritschel/

Making Imperfect Shadow Maps View-Adaptive: High-Quality Global Illumination in Large Dynamic Scenes
Bent Normals and Cones in Screen-space
Real-Time Screen-Space Scattering in Homogeneous Environments

From what I gathered it usees different way of LODing (cascading ?) voxel, in scene, so it actually uses far less of them than original technique, which was also developed at NVIDIA by Cyril Crassin.

And from slides it you can read that rendering indirect shadows takes only 3ms. For me it is perfectly acceptable.

Right, that’s point I’ve totally missed! I really forgot about various AO techniques assuming AO as ‘geometry-only’ thing.

Indeed, now the point is that would be great if Epic find it applicable, too. (*Because, you know, large user community, various PC hardware, including middle-budget PCs, etc.)

CRYENGINE now primarily uses cubemaps from environment probes to handle GI. They even suggest you turn off traditional LPV GI.

Can such a system be implemented into UE4?

Intel just released a paper on a very efficient version of SVOGI: