Photon Mapping (6 bounces Russian Roulette with multiple storage of a single photon):
All images power is photon gathered (specular reflection directions are ray traced) with one photon map.
Gather at hit point is performed by:
loop vicinity photons{
(check incident angle against surface normal to weed out wrong surface photons)
photon_contributions(color) += attenuation * photon_power
}
total_power(at point) = photon_contributions * density
density = 1 / 2 * pi * (furthest contributing photon distance)^2
attenuation = 1 - (photon contributing distance away)^2 / (furthest contributing photon distance)^2
box dimensions: 20 x 10 x 20
Photons: 100,000
max_power: 3000
max_gather: 600 photons or 1 unit length
Photons: 50,000
max_power: 3000
max_gather: 400 photons or 1 unit length
max_gather: 200 photons or 1 unit length
Photons: 20,000
max_power: 3000
max_gather: 400 photons or 1 unit length
max_gather: 300 photons or 1 unit length
max_gather: 150 photons or 1 unit length
Photons: 1,000
max_power: 1500
max_gather: 200 photons or 1 unit length