Hi Daedalus,
I just checked out the Dead Island 2 video from Gamescom that you mentioned. It looks huge and . However I see what you mean about the lighting being flat in shadowed areas. I wasn’t able to figure out if you guys require dynamic time of day.
Agreed, lightmaps don’t scale up to large levels.
These can both be solved, but yeah the memory is going to be heavy.
Without seeing how it was setup it’s hard for me to know why it was that expensive (and on what video card), but I would guess the grass causes a lot of problems for it, constantly moving and preventing reuse of last frame’s results. Costs depend a lot on object density, if there are lots of small objects it’s not going to go well.
To be honest I’m not surprised DFAO did not work for you, we have yet to get good results with it outside of Fortnite and test levels that we have constructed. The reason is that it requires kindof modular building, most meshes must be roughly the same size. In Fortnite because you can build and knock things down this was already the case. We’re looking for ways to improve this, but it’s very hard to make a general purpose yet dynamic method that doesn’t eat too much GPU time and looks great.
Definitely don’t use the ambient cubemap for anything other than a subtle ambient term, it is additive with the other forms of lighting.
Completely agree, and I think it is something we will tackle at some point.
It’s a really difficult problem! The thing with GI is, computing incoherent lighting transport requires a lot of computational power. You’re going to have to pay for that somewhere, either on the developer machines (static lighting) or the game client (dynamic lighting). A high quality dynamic method like voxel tracing is going to eat your GPU for breakfast. Low quality methods can be done like LPV but then it leaks everywhere, which is a big problem with your seamless interiors and thin walls.
And sadly, even if we did have a great dynamic GI method it would only solve some subset of the total needs from the engine. This distance field AO stuff is evidence of that. But developing and optimizing these methods take a significant amount of time. SVOGI was roughly 6 man months to get it to the early stage.
If I were developing technology for exactly what Dead Island 2 needs (huge world, seamless interiors with thin walls, dynamic time of day) here are some options that I would consider most promising.
A) Try to get good distance field representation of the scene working. Use for AO and distant shadowing of the sun to reduce CSM cost (this is already implemented through ray tracing the distance fields and will be in 4.5, but not optimized). DFAO handles thin walls fine. By using a sky cubemap that has bounce lighting color in the bottom + good quality AO, you can get something that looks pretty good in those shadowed areas and really brings back the depth. None of this addresses specular though. I would try one reflection capture per inside of building and improve that system until it can support levels of your scale. To implement time of day you lerp the cubemap used by the skylight + a few versions of the captured reflections.
This whole method is probably medium to high risk because DFAO is unproven on consoles.
B) Use precomputed diffuse probes. These can be much cheaper in storage than the reflection captures because they only need 27 floats. Lots of games with huge worlds and time of day have done this - Assassin’s creed for example. You compute them at multiple times of day and lerp. You sparsely capture them with a cubemap (reflection captures) and use for local reflections. SSAO provides local shadowing, and maybe you can bake in some per-vertex shadowing if you can afford it. DFAO could be used to shadow the diffuse probes but it’s kindof overkill, it will cost too much for what it gives IMO.
This method is low to medium risk, but has lower quality in my mind.
C) Another method for local specular is to have a simplified version of the scene which you can quickly render to a single dual-paraboloid map at the player’s position, use this for all reflections. This is what GTA did I believe. It can be a big pain to create and maintain the simplified version of the scene, but this works great for preventing you from ever seeing the sky in reflections when you are indoors.
The common theme in all of these it to take advantage of the fact that the geometry is mostly static, so you can precompute the shadowing part of the light transfer equations. Like I said, for dynamic GI you’re going to have to pay the processing cost somewhere.