Various probability distributions for sampling light sources.
PowerLightDistribution returns a distribution with sampling probability proportional to the total emitted power for each light. (It also ignores the provided point |p|.) This approach works well for scenes where there the most powerful lights are also the most important contributors to lighting in the scene, but doesn't do well if there are many lights and if different lights are relatively important in some areas of the scene and unimportant in others. (This was the default sampling method used for the BDPT integrator and MLT integrator in the printed book, though also without the PowerLightDistribution class.)
A spatially-varying light distribution that adjusts the probability of sampling a light source based on an estimate of its contribution to a region of space. A fixed voxel grid is imposed over the scene bounds and a sampling distribution is computed as needed for each voxel.
The simplest possible implementation of LightDistribution: this returns a uniform distribution over all light sources, ignoring the provided point. This approach works well for very simple scenes, but is quite ineffective for scenes with more than a handful of light sources. (This was the sampling method originally used for the PathIntegrator and the VolPathIntegrator in the printed book, though without the UniformLightDistribution class.)
LightDistribution defines a general interface for classes that provide probability distributions for sampling light sources at a given point in space.
Decides based on the name and the number of scene lights which light distribution to return.