Raytracer

During the quarter, I developed a C++ raytracer to perform Monte Carlo Raytracing. During my development, I tried to achieve the following goals:

Below are the image results of my tracer.

Global Illumination

The raytracer performs simple 2-bounce Monte Carlo global illumination to gather indirect light. Local light contribution is calculated using basic Blinn-Phong lighting.

Texture Mapping

The raytracer supports hemisphere-mapped textures. Here, a grid has been applied to a ball.

Texture mapping is correctly applied on transformed objects. Here, the earth has been rotated, and the texture coordinates have been correctly transformed.

Multiple Lights, Reflection, Refraction

Reflection and refraction is also supported. The center ball is a reflective surface, as is the floor and ceiling. Multiple lights provide interesting colors. In the second image, Beers law is applied to color the rectangular prism.

Performance

The raytracer uses a BVH to accerate tracing, as well as multithreading to take advantage of systems with multiple threads. Running an anti-aliased render (640x480) on 4 threads (2.9 ghz dual core processer, multithreaded) with Dragon_huge_tris (Simple phong shading) takes 12.7 seconds.

Debug

Since it was easy to change the renderer of the raytracer, I was able to create a normals visualizer. This was very useful in debugging flipped triangles.


Virtual Reality

Andrew Acosta I created a VR theater environment to put the user of a headset on stage. Currently the demo is lacking sound, but the crowd is animated and will play several different animations randomly. I modeled the stage chairs, Credit to the sillouette model goes to Kayleigh Rago. Several assets in the scene are accreddited to Victor in the Classroom Asset Pack


Citations


Povray Files