Hi Unreal Developers!
I created a blog post explaining how you can use real-time area lights inside light propagation volumes and together with that a video showcasing LPV area light injection in action inside the Elemental Demo.
is the video:
While working on this I had some ideas on how we could improve LPV. Since my knowledge of the engine code is currently not enough to integrate it myself, I hope sharing it with the community might
start an interesting thread and maybe eventually someone from the community, or maybe even Epic, could implement it, if any good ideas come to life.
Most of you probably know that point and spot lights are not supported with LPV. is an example of a green colored spotlight inside a light propagation volume:
And is the same images, only now there is light injected into the LPV from an invisible area light with the same color as the spot light:
This already lights op the scene very well dynamically. The only problem is that it doesn’t take the color from the wall into account, which is the most important part about global illumination. So what if
we make every object in the scene an area light, and it uses the base color as injected emissive color multiplied with the brightness and color of the light and in the end multiplied with the shadow map.
This way only the lit part of an object will emit light.
I could not make a good demo for this, since there is no shadow map available inside the material editor. But I kind of used the idea (except for the shadowing part) with the flags in my version of the Elemental demo:
As you can see, the pillar in the front has a bit of a red overlay. This comes from the red flag on the right of the screen that injects its red color into the LPV using an area light material. I also did this on the left side with the snow and ice.
This is the reason it looks more white/blue compared to the original demo. All this cost a lot of time to set up per object, but it would be easy to automate this.
The only thing missing is that the direction of the light is not changing the direction of the indirect lighting.
I also noticed that objects that have a completely different look on all side have a huge change of showing LPV artifacts, since not every little detail is picked up by the LPV rendering. Maybe it would be possible
to bake a volume texture per object during light baking, kind of like the distance field ambient occlusion, and use this info to inject every mesh into the lpv volume with the intensity based on how well the volume is lit.
Thanks for reading, I hope I gave some of you good ideas. Please let me know why you think this could work, or why it won’t work at all.
is my blog post for everyone who wants to check out how to set up area lights, or just download an example:
http://www.roelbartstra.com/unrealengine/real-time-area-lights/
Cheers!