I stumbled over this interesting lighting method called “Forward+” while researching deferred rendering. It supposedly maintains all the advantages of traditional forward rendering has over deferred rendering (such as transparency) while still being able to handle thousands of lights at once.
In a nutshell, it splits the screen into 16x16 tiles (in pixels), and uses a compute shader to calculate which lights contribute to which tiles (one work group per tile, one thread per pixel per tile). The contributing lights’ indices are stored by tile in global gpu memory. The fragment shader then looks up which lights to use for the current pixel for lighting calculations.
Since this technique is essentially an extension of forward rendering, I don’t think this will be nearly as difficult to integrate into Jme as deferred rendering. I would like to begin work on this myself since I’m the one bringing this up, but I am too unfamiliar with Jme’s rendering process to even know where to start.
Any thoughts?