This week-end I worked on focus blur simulation using simple OpenGL routines.
Accumulation buffer is really the key to go.
Focus blur is obtained by summing (through the use of accumulation buffer) rendering from slightly different camera positions, typically positions describing the surface of a camera aperture. This is a sampling method, as you can see at 0"30 : the more samples of the aperture surface, the smoother the rendering. To keep the focused distance sharp, your camera movements must be done around a fixed point (don't forget to correct your camera direction to keep it aligned with this point), your focusing point, which is located on the camera direction, at the desired distance from the camera.
I implemented real values to precisely simulated depth of field according to focal length, aperture ratio, sensor height...
I think I'm going to implement this small feature (about 20 lines of code) into my terrain simulator, and start working on soft shadows using shadow volumes and accumulation buffer.