For the final project I implemented path tracing, and created a scene to test it out. My original goal was to implement bidirectional path tracing, but I took too much time debugging and 20 hours has gone by before I knew it ^_^
Cornell Box (again)
The first picture is rendered using ray tracing, and the 2nd & 3rd pics are rendered using path tracing. The differences between the two algorithms are quite noticeable, as path tracing would also light up the ceiling and some shadow area. Also color bleeding and caustics come for free with path tracing, although the caustics would not look that good. All 3 pictures use 225 samples / pixel, with 1 shadow ray / pixel.
Babes (!!!)
I found this model called "babe" online, and I found out that this model can be used to create those cute girls in manga. I was really excited but soon I found out that their hands and feet got chopped off because this is just a demo copy >.< Anyway, I duplicated several of them and apply different material to each one, placing them in front of a mirror. By comparing two images we can see that the path-traced image has indirect illumination and a lot of NOISE ... which is inevitable for path tracing. The way to fix this problem is to use more samples / pixel. However, this scene has about 65,000 triangles and it took a long time to render (I do have Octree and BVH, I guess it's time to write kd-tree). The ray-traced version has less noise, and took 3 hours to render. The path-traced version, however, took 9 hours to render, and I kill the ray after it makes 6 bounces. Both pics are rendered using 36 samples / pixel, with 4 shadow rays.