Radiosity is a way to calculate realistic lighting in a 3D scene. It is based on the fact that a perfect diffuse surface reflects equal amount of light in all directions, which allows us to precalculate and store it efficiently.

The basic idea behind the algorithm is to render the scene at a low resolution as seen by every point on all surfaces. When I learned about this algorithm I decided to implement it for myself. A couple of days later my program could render these images:

img1.jpg thumbnail    img2.jpg thumbnail

The only light source in these images is the Outside, which emits white light. The artifacts visible in the image on the left are a bit tricky to explain, but notice how the texture conceals them - the image on the right is exactly the same image but textured.

A couple of days later I improved speed by about 40% and added simple subsampling to get nicer pictures. Here's a picture rendered with that (click to enlarge):

img3.jpg thumbnail

This image took 2.5 hours in radiosity calculations on Athlon XP 2500+ because I wanted really small light patches. As you can see in the discussion section, this particular image is not much better than one which takes 10 minutes in radiosity calculations.

More about radiosity on: