I would love for someone (you! :D) if you could try to tackle Delta Radiance Transfer. Bit modified. The original technique is using simple geometry, which is automatically wrapped to meshes during precomputation step. Those simple meshes have have tradiance transfer computed only once, which makes for very fast precomputation, but lower quality for meshes, that are not exactly fitting within primitive geometry.
I think this step could omitted in favor for user generated cages. Even collision geometry or LOD levels could be used as primitive geometry to store and calculate radiance transfer.
This of course would dramatically increase precomputation time, since there is really no reusable data, as every static mesh would have unique geometry cage. But I suppose it still should be more efficient than Lightmapping.
What is important about this technique is:
- Many multiple bounces, without much of performance hit.
- Support for large scale ambient occlusion can be added. As well for medium scale.
- Can be extended to support subsurface scattering.
As I see it now, the hardest part is basic integration into engine. I have no idea where to even begin with it. Even with most basic version. Second is precomputation step (again integration into engine).
Math doesn’t seem to be terribly complex. Probably the hardest part about math is Spherical Harmonics, used with probes for dynamic objects.
edit:
If we got his working, we wouldn’t even need special shading model for tree branches. GI should take care of light bounce from ground and inter bounces withing tree. And even if, the DRT could be expanded to support proper lighting transmission trough thin objects (albeit only on static objects).
I think it have much more premise than screen space GI, which forces you to render frame several times, just to get semi stable results ;).