This quarter I implemented a ray tracer that supports Monte Carlo Path Tracing for global illumination. With simple object oriented code my ray tracer with global illumination was taking hours upon hours to render simple scenes. I decided to parallelize my code, simply, using the OpenMP library to support multi-threading so that each ray traced was being worked on by a different thread. I aslo implemented a Bounding Volume Hierarchy to speed up rendering of large scenes. As shown in the image above and the following below Monte Carlo ray tracing gives scenes more realistic lighting effects by creating a color bleeding effect on objects. We can see the red and green of the walls in the cornell box above creating a color bleeding effect on the yellow ball above.
Cornell Box with diffuse shading and regular shadows
Cornell Box with added global illumination:
Cornell Box with added soft shadows via area lights:
Favorite Render:
References
Raytracer Info: http://www.cs.utah.edu/~shirley/books/fcg2/rt.pdf
BVH: http://users.csc.calpoly.edu/~zwood/teaching/csc473/material/boundingHierarchy.pdf
Monte Carlo Raytracing and Area Lights Info: http://geometry.caltech.edu/~keenan/mcrt-sg03c.pdf
OpenMP for multi-threading: http://openmp.org/mp-documents/omp-hands-on-SC08.pdf
C++ Boost libraries for memory leak issuses: http://quantlib.org/slides/dima-boost-intro.pdf