The basic idea here is - What if lights could be instanced similar to how geometry is instanced? Through textures, chops, dats etc. specify various lighting attributes such as intensity, falloff, position, color, cone angle, shadow enabled, etc etc.
With out consideration of how difficult this would be to implement currently, and what practical drawbacks might arise, I think there are two very significant limitations this would help us surpass:
A) The 32 light COMP limit. My guess is this comes from the fact that each light COMP pre computes lookup textures, and shaders have limits on the number of texture samplers that can be used?
B) The performance scalability issue of rendering scenes with lots of animated light sources. Currently as more light comps are animated, they must also cook. CPU overhead will increase pretty linearly. Having the ability to instance lights gives us the same advantage instancing geometry gives us over duplicating a bunch.
With the coming addition of Vulkan, and the potential additions such as deferred shading systems and other things, it would seem logical to eventually have the lighting system refactored so that it can be more flexible, and more scalable.
With a lighting system where bottlenecks are no longer CPU bound or sampler count bound, optimizations and acceleration structures like those used in Clustered Shading could be much more elegantly and simply layered into Touch’s system, with out reinventing most of the rest of the wheel, making more advanced lighting effects and other post process effects easier for the community to author in a modular way.
I realize there are some challenges here…
For instance - Shadows are expensive… They are an active area of research in the real-time rendering world, shadow maps are fine for a few lights, but taking it to higher counts has not been accomplished yet. The simple fact that for every shadow, the 3d scene must be rendered from the perspective of the light. So, even if we could shade 100 lights, we cannot really shadow 100 lights. Not so much a limitation of Touch, but just from my research and understanding a limitation anywhere you go. Maybe some optimizations could help, but it’s still going to be limiting.
Also, I realize that while something like light color would be easily instanced, stuff like attenuation which is calculated into lookup textures, are probably more complicated to assimilate into an instancing structure?
None the less, I wanted to put this thought out there because I noticed it has come up in the forums a couple times and it’s just been floating around my head