I wrote a ray tracer in C++ for an advanced rending course at California Polytechnic State University. In implementing a ray tracer, I added support for emissive rectangles, multiple primitives, and various materials.
For my final project in this course, I implemented participating media in order to create effects of fog, clouds, and "god rays." I based my implementation on Ray Tracing: The Next Week, A Flexible Framework for Volume Tracing, and Wojciech Jarosz's thesis, Efficient Monte Carlo Methods for Light Transport in Scattering Media. Additionally, I implemented a bounding volume heiarchy in order to improve render times.
Moving forward from this project, I hope to expand to include features such as more complex volume rendering, a more robust bounding volume heiarchy, and more efficient parallelization. Additionally, I hope to port code to Optix once I aquire a more powerful graphics card. The code for this project is currently private, though feel free to reach out for access as a code sample.
Below is a gallery of images generated I have generated with my ray tracer.