I thought maybe you might be interested in seeing some images from a path tracer I wrote a couple of years go.
I wanted to find out just how fast I could make a basic ray tracer when it didn't have to deal with complex geometry. This is a basic "path tracer", firing e.g. 1024 paths from each pixel and randomly distributing them about the scene, tracing multiple bounces, until they hit some luminous geometry. All illumination therefore comes from reflections of luminous geometry.
The first and second images were rendered with some routines that only took about 5 hours to code, although I was using the Terragen renderer as a host so I could concentrate on the path tracer and sampling routines. The third and fourth images were rendered the next day after I plugged in some depth of field and motion blur effect. I'd never done anything like this before and I was pretty happy with the kind of images I could get with such a quick experiment.
An interesting thing, and relevant to this topic(!), is that here there is no ray depth limit. Statistically speaking, every possible ray depth is accounted for and weighted correctly. The reason this is possible is that each path propagates only a single ray at each bounce, so there's no explosion of the number of rays, and ray termination is handled by the 'russian roulette' method. Some rays can bounce nearly forever, most terminate after only a few bounces. The probability of termination depends on an estimate of the contribution that further rays will make to the result, and sample weightings ensure that statistically all bounces have equal contribution to the result.
Modern ray tracers incorporate these ideas, so they're nothing new, but it was fun to implement as see the results. Working just with spheres and simple sphere hierarchies means it's very fast to calculate thousands of paths per pixel. I wish we could do that with Terragen scenes!
Render times and number of paths per pixel are in the filenames. 2GHz CPU.
[attachthumb=1]
sphereflake_64x16_17m15s_1core.png
[attachthumb=2]
sphereflake_4096paths_2h40m_2cores.jpg
[attachthumb=3]
sphereflake_dof_1024paths_30min_2cores.jpg
[attachthumb=4]
sphereflake_RotationBlur_1024paths_1h36m_2cores.jpg
EDIT: these would have been a lot faster if I had implemented some kind of adaptive sampling, requiring fewer paths per pixel.
Matt