A question about the psuedo code: I’m a little bit confused by what exactly is "intersect(x, wi)" returning, and why it should be passed into the radiance function? I thought that here x is equivalent to the P the previous side, and shouldn't L directly take in (P, -wi) instead of (intersect(P, wi), -wi)?
Intersect should return the point at which our ray intersects some object. Then we use this point in order to calculate the radiance from this point, back to the original one. Remember we are inverse ray tracing, so our original wi (which is the direction vector) is pointing opposite to the flow of light through the scene.
Is it possible that the calculated L is zero, as in it didn't hit a light source?