This is a description of the objectives I completed for my CS 488 Computer Graphics final project. The end goal was to replicate the following image:
These objects are constructive solid geometry of a cylinder with a sphere. The top row is union, the second is intersection, and the bottom two are differences.
The models were made using a combination of the primitives with constructive solid geometry.
The other half of objective 3 was modeling the tree seen in the reflection. Since a polygonal mesh of a tree would be too costly, I did it by texture mapping a planar mesh and putting it behind the camera in a way that didn't block the light source / cast shadows. The effect didn't turn out as well as I hoped, so it is not included in my final render.
I implemented anti-aliasing with 3x3 regular supersampling (image on the right). The left is the original for comparison.
Soft shadows were done through distributed ray tracing with 36 stochastic rays.
Glossy reflection was also achieved with distributed ray tracing using 36 rays. The perturbations were randomly distributed along a probability density function.
Combining everything, below is my rendering of the scene. Total render time: 5 hours 48 minutes, multithreaded on 4 cores.
Since I wasn't able to implement grid partitioning (objective 9), I instead implemented multithreading to accelerate my raytracing. Below is a graph comparing the time it took to render the macho-cows image with anti-aliasing turned on for differing numbers of threads.