SVOGI Implementation Details

Started by
121 comments, last by Josh Klint 1 year, 7 months ago

How does it behave for the problem cases? E.g. narrow corridors in the distance, rotating rooms, etc.?

Advertisement

It responds to moving lights very well, but moving geometry is limited. In order to prevent the background processing from slowing down the framerate, there's about a half-second delay. It's good for things like doors opening and closing, but it's not instantaneous.

10x Faster Performance for VR: www.ultraengine.com

A few things I have learned from this experience:

  • Sparse voxel octree techniques can't handle specular reflection because a linear hardware filter texture lookup in a volume texture is so much faster than the shader math it would take to interpolate between eight (or more) texture lookups. This is why all Crytek's screenshots show flat view-independent GI without any soft specular reflections. It seems like this is just slightly better than baked GI in the sense that it can respond to changes in the scene lighting. Most likely, it is being baked over the course of dozens of frames, so it's basically just lightmapping.
  • Performance of octree traveral in a shader is not terrible but not great.
  • Sparse voxel octree techniques can't handle dynamic geometry at all. I'm betting Crytek probably uses some kind of manually placed environment probe for indirect lighting of character models and such.
  • Volume texture techniques can handle some slowly moving geometry, but should not be used for objects that get thrown around in the scene. I do have a solution for displaying reflections on fast-moving objects, but they would not appear in reflections, and I have not implemented it yet.
  • Volume texture approaches are able to display specular reflections well, and it looks very good.
  • The biggest problem with volume textures is that it's hard to cover the scene with them, even using several cascades. Bigger voxel sizes means more artifacts, and light leaks don't magically look better just because they are further away.

It seems like anything more advanced than environment probes and less advanced than full raytracing is going to involve a lot of tradeoffs depending on what you are trying to accomplish. There's also a whole area of techniques-that-make-use-of-RTX-but-aren't-quite-full-ray-tracing that could be explored.

10x Faster Performance for VR: www.ultraengine.com

Josh Klint said:
Maybe you could even use a baked sparse voxel tree for static diffuse GI

If it's static, you want DAG, not SVO. Traversal remains almost the same, but compression is much better if the data is a lot.
There are some papers using it for large scene static shadows / volumetric texturing.

Josh Klint said:
This is why all Crytek's screenshots show flat view-independent GI without any soft specular reflections. It seems like this is just slightly better than baked GI.

Depends on which kind of baking we use for a comparison.
Personally i still like light mapped games. It's still the only way to capture the ‘beauty’ of GI. Even stuff like RTXGI fails to deliver this. Similar to VCT, we get some bouncing light to fill the blacks, but it does not at all look good.

The obvious solution is to raytrace the first bounce but take the rest from some lower quality approximation. Metro Exodus was first to demonstrate this, but the win still isn't quite worth the cost imo.
However, for those having big GPUs it's a nice option to utilize it, and there is still a fallback for HW not powerful enough for RT.

I think I am coming to the conclusion this technique is great for specular reflections but it sucks for diffuse GI. Maybe it can be combined with a static GI technique.

10x Faster Performance for VR: www.ultraengine.com

This topic is closed to new replies.

Advertisement