It also saves a lot of memory as opposed to using lightmaps. However, lightmapping is a common feature nowadays, so I implemented a lightmap-compiler as well. Last but not least I wrapped all three modes up into one scene-compiler. This allows the artist to use the appropiate lighting method wherever possible constantly making tradeoffs between quality, speed, memory-usage and aestathics. All visibility information is obtained with the aid of beamtrees and this shortens the scene-compilation times considerably.
Most compilers use a ray-casting method which is a lot slower.
I understand this sounds all way to easy, so let's discuss the major problem I ran into. My BSPtree and Beamtree code suffered from floating point inaccuracies like I was using 16 bit integers. If NetImmerse would have templatized their vector and planes classes I could have used doubles or even bigger numbers, but no. The biggest problem was a fall-trough of light where shadows should have been on the edge of polygons. It's solved right now, but it sure wasn't nice to code.