I am extending my raytracer for my final graphics project, and today I completed my first objective: hierarchial bounding volumes. This objective gives a significant performance increase, as demonstrated by the following image. It contains 16 sets of 1000 meshs (each individual mesh is a tetris cube similar to the ones I used in my final image for assignment four; the mesh has 26 faces). So doing some quick math, there should be 416000 faces in this scene, and since it is 512x512 there are 262144 primary rays sent into the scene. There are also 107177 shadow rays cast. That's a lot of stuff, but it only takes 155 seconds to render this image with my new feature implemented. With the feature turned off (or non-existant), it takes 10 hours and 32 minutes to do the same image.
This image is rendered with anti-aliasing turned on, so it takes longer to render than the times given above.
Another interesting statistic for the non-antialiased version of this image is the fact that in the bounding volume render, each ray is only tested against an average of 1.28 primitives, versus 16000 (all of them) in the non-bounding volume render. That's a huge difference and is what accounts for the huge difference in speed.