Coral Griffon
Lionhead, Game Director
Resurrecting this post because we asked our graphics programmer to say something about this topic, and he did:
http://www.lionhead.com/blog/2014/april/17/dynamic-global-illumination-in-fable-legends/
http://www.lionhead.com/blog/2014/april/17/dynamic-global-illumination-in-fable-legends/
Since Epic released the full Unreal Engine 4 source to subscribers, we've had a number of questions about our dynamic global illumination tech, which Epic recently integrated into UE4. We wanted to take the opportunity to talk about why we developed this technology and how we're using it to make Fable Legends look amazing.
We made a decision early on to have fully dynamic lighting in our game. We think this is important for a number of reasons: It allows dynamic time of day, which adds variation to our world; it massively improves iteration times for artists; and it supports dynamic objects both reflecting and receiving light. Dynamic GI can also give higher quality results than baked lighting in some cases, for example, reflections, where lighting needs to take into account the view position.
Dynamic direct lighting has been around in games for a number of years, but dynamic indirect lighting (i.e bounce lighting or global illumination) – i.e. light bouncing off objects in the scene onto other objects - is a much harder problem to solve, so generally it either isn't computed dynamically, or a very simple representation is used (e.g. a single hemispherical light for the sky).
Unreal Engine 4 has an excellent deferred renderer, which supports physically-based materials and can support large numbers of lights efficiently. We did some work optimising UE4’s cascaded shadow maps (which Epic also integrated into Unreal), but the missing piece of the puzzle for us was dynamic indirect lighting.
Epic has previously researched a real-time GI method called SVOGI with promising results, but it was never quite fast enough. Of all the papers on the subject, Crytek's Light Propagation Volumes seemed like the best solution for our game. It was fast, scalable and could also support reflections and secondary occlusion. However, this method was a DirectX 9 implementation, and we felt we could do even better with modern DirectX 11-class hardware and the power of compute shaders.
We developed an implementation of Light Propagation Volumes, specifically targeted at modern GPUs (such as the one in Xbox One). Our method supports 2nd-Order Spherical Harmonics, which gives better directionality than the original method. We use compute shaders to generate a high quality voxel representation of the scene's geometry, which we use to provide secondary occlusion and multiple light bounces.
*more at link*