What's the story behind Light Propagation Volumes in UE4?

So I’ve been doing some research regarding real time Global Illumination in UE4 and it has lead me to this livestream discussion that briefly goes into detail about LPV.

Correct me if wrong but LPV was considered when Microsoft and Lionhead were looking to integrate it with their games and so Epic went with this?

I know Epic was working on their own GI solution before it got scrapped (SVOGI) so now I’m wondering the following:

  1. Did LPV integration (into UE4) come after svogi was scrapped, or was it being developed alongside it?
  2. Did integration take a long time or was it really easy to to implement?
  3. Besides LPV and SVOGI, did Epic consider any other global illumination solutions?
  4. LPV is currently restricted to directional lights only. I understand the performance reasons behind this but if you ignore performance for a moment, would it be easy to make other lights also cast real time GI?
  5. What happened to Ambient Occlusion? Is this just a LPV limitation, or was it possible to have it calculate bounces between objects?

I appreciate all or any answers. I’m switching over to using LPV’s now instead of lightmass baking, so knowledge of how this technique came into being is essential to me.

I tried GI on a space station scene I made. Everything seemed to work, except reflections (which makes sense). So the downside to GI in Unreal at the moment is it will really only work well on, e.g. handpainted textures or a scene that involves no metal reflections. It of course means that you have to decide against PBR materials, which is kind of a bummer. The upside is that lightmap UVs tend to work much better than in Unreal Engine 3 and cause less (or mostly: no) errors in U4.

SVOGI was good, but it was very slow. I’m wonderin what the Octane plugin for U4 will bring, because I used Octane for rendering before and it is awesome! I wouldn’t recommend using GI in Unreal 4 at this time, but definitely keep things checked. I’d really love to know if Octane is actually meant to work in realtime (games), or if it is just a render solution for static images and slow moving cameras (for ArchViz) for example.

I don’t know what caused them to integrate LPV, the quality is so poor that it’s almost useless. If you’re doing an exterior scene then it can work OK, but that’s because most of the lighting you see is from direct illumination. On interiors where you see the LPV effect better it doesn’t look so good, and the resolution is very poor. I’m sure there are other methods they have considered and are probably still looking into ideas from time to time. I wouldn’t be surprised to see a good dynamic GI solution integrated into the engine in a year or two once the average GPU is powerful enough to support it.

I don’t know if AO works with LPV enabled, but it’s definitely in the engine.

As far as Octane goes, it is not designed for realtime use, the main purpose of those types of renderers is that you get a very quick test render so that you can see what things look like while you’re working before you commit to anything. As far as what that means for UE4, the speed gets much slower when you add more lights/geometry/reflections so it wouldn’t scale well for games in the first place, but it’s not designed to work while all the other components of a game is running at the same time. It’s likely the only use for Octane in UE4 is to use UE4 to setup static image renders. It’s probably not even useful for giving a preview before running lightmass because the way it processes materials and lighting is going to be very very different from what Lightmass does.

Are you sure it doesn’t work with PBR? I did a quick test and I’m still seeing reflections for both metal and non-metal. SSR is also cranked to the max.

http://i.minus.com/iyp2MeqST0wCI.png

http://i.minus.com/i2SSTmjn3MHmI.png

In Lionhead’s blog, they also mention they get physically based reflections. The only thing not integrated in UE4 is Sky Light Injection with Directional Occlusion (unless that was the Distance Field Ambient Occlusion which came after the fact).

Ouch, 10fps loss with such simple objects?

I guess this PBR GI might work in your scene, because it has a blueprint sky, which is procedurally generated. I also didn’t try using a custom cubemap for reflections, in my project, because I couldn’t figure out how to capture (and output) one in U4. I can confirm that it didn’t work “out of the box” for me, as you can see in my WIP thread:

The first images use GI and there is no reflection on the gold at all. Once I changed to lightmaps and baked the scene, everything was there (although still needs tweaking).
I’d suggest to try this in a scene with your own sky, but I’m puzzled it works at all, in your scene. Lionhead have their custom setup for Unreal 4. I think if physically based reflections worked in U4, Lionhead wouldn’t have to write their own LPV . I’d be interested to see GI work. However, I’m pretty happy working with lightmaps, since I don’t have open world environments in my project.

I did another test. Level was created from scratch with no default blueprint. Only one directional lightsource with no skylight or sphere reflection actor and LPV toggled.

I’m still getting reflections.

I think it might have been your material. Any metal with a base color of black wont reflect anything. It has to use a PBR metal value that UE4 understands.
To prove this, I changed the material to a black one and there were no reflections, with or without LPV.

Well, if I changed the reflection color to white/brighter the diffuse got completely washed out. The question is can you make it work and look right? I found that I needed a completely metallic surface (since it is gold), but I got no reflections then. Of course it is a bit difficult with a space scene anyway, since there is not much to reflect (unless I put a planet up close). My problem was getting the gold to actuallly look like gold when GI was on. I found no way to do this in my scene.