I implemented Progressive Refinement Radiosity from "Radiosity Via Ray Tracing" article in Graphics Gem ii. My implementation takes care of diffuse inter-reflections with >= 1 area light source.
The tricky parts included:
understanding that the specifications, the world is specified in cm whereas radiance is in meters. At first, I couldn't understand how let's say 18.4 watts produces radiance in the final picture if the total surface area is few thousands meters.
How to send rays composed of different relative power components instead of hard coding how much relative power each component should carry to allow for more than 1 light source with different relative powers.
Remembering about exposure. Since I implemented the emitted light source only provides one dose of power to the world, to get a longer exposure time, I need to set the initial light source to be much brighter. In fact, I have it set to 30 times the amount on the specifications.
Understanding the radiance equation
L = Flux(W) / (steradians(Pi)*Area(meters))
I thought there was a convex hull problem to find the solid angle(steradians). But it turns out I can just always sample in a hemisphere with a solid angle 2PI.
5. Interpolation requires all triangles sharing the same vertex to have the same color value. This is pretty straightforward. Instead of intersecting against list of vertices, now change to intersect list of vertex index. The actual interpolation requires observations of how much a vertex in a triangle contributes to a point within the triangle. In the diagram bellow, P has (P-POnT2T3).length/(T1-T1OnT2T3).length, (P-POnT1T2).length/(T2-T2OnT1T2).length, (P-POnT1T2).length/(T3-T3OnT1T2).length component color from vertex T1,T2,and T3 respectively.
This is the image of using triangle subdivision of 3 (ie for every triangle specified in LUA there is 3^4 triangles to collect diffuse rays), 0.0088 watts per ray, with light power value of 368, 312, 160 W in Red,Green,Blue.
1 inter-reflections
2 inter-reflections
4 inter-reflections
Here is a 2 minute render with interpolation. 4X antialiasing. It seems it could use more rays from light source.