DISTRIBUTED RAY TRACER
11/23 – 12/23
OVERVIEW
I built a distributed ray tracer using C++ and created a 10-second animation.
The animation includes diffuse and Phong shading, soft shadows, and texture mapping. I implemented a simple BVH (bounding value hierarchy) structure to accelerate ray intersection, supersampling for anti-aliasing, and an object oriented approach to organize my code.
Final project for CPSC 478 at Yale, Introduction to Computer Graphics
The animation includes diffuse and Phong shading, soft shadows, and texture mapping. I implemented a simple BVH (bounding value hierarchy) structure to accelerate ray intersection, supersampling for anti-aliasing, and an object oriented approach to organize my code.
Final project for CPSC 478 at Yale, Introduction to Computer Graphics
PART I
I began this project by pulling a figure from the CMU Motion Capture Database and a provided stick figure class. I chose a figure that was pretending to be a dinosaur and reoriented my camera to face the stick figure.
Motion capture stick figure, rendered in multiple spheres
Motion capture stick figure, rendered in multiple spheres
PART II
I then placed the stick figure on a ground and added surrounding objects. The stick figure’s body was then changed from a series of spheres to consisting of cylinders with rounded ends. It was at this stage that I reorganized my code to be object oriented, which then allowed me to build out a more complex scene and tinker with ray-cylinder intersection.
Stick figure rendered in cylinders, standing on a ground and surrounded by castle-like scene
Stick figure rendered in cylinders, standing on a ground and surrounded by castle-like scene
PART III
While implementing more complex and time intensive effects, I had to strike a balance between the scene I wanted to depict and the cost of rendering time. While I implemented Perlin noise, Oren-Nayer reflectance, and Cook-Torrance reflectance on parts of my scene, I realized that my scene would work best with texture mapping and soft shadows. I included Phong shading and an area light to mimic a sunset. While I considered keeping Cook-Torrance reflectance on the castle gate bars to add a more metallic effect, I decided to leave it out to reduce my render time.
The most challenging part of this project was implementing BVH. It required me to refactor a lot of code (which also solved a few bugs) and think critically about the structure of a BVH.
Screen capture from one of 300 final frames of the animation.
The most challenging part of this project was implementing BVH. It required me to refactor a lot of code (which also solved a few bugs) and think critically about the structure of a BVH.
Screen capture from one of 300 final frames of the animation.
REFLECTION
I would do this project all over again in a heartbeat! But I would do a few things differently. I would first plan out my scene a little better from a creative standpoint to avoid having to implement many effects that I ended up not using. I would also test my BVH structure earlier and further develop into a subdivision that utilizes surface area heuristic. Lastly, I would render my video in a higher quality.
This was one of my favorite projects and I look forward to making more interesting animations with my newfound tools and knowledge.
GIF of the 10-second animation
This was one of my favorite projects and I look forward to making more interesting animations with my newfound tools and knowledge.
GIF of the 10-second animation