Ray Tracer is one of the famous rendering technique, other than rasterization, for rendering more realistic images. Ray Tracing is mostly getting used in movies to render higher LOD models to a high resolution images. This project is part of my graduate class 'Ray Tracing for Computer Graphics' ad University of Utah. This is ongoing project and unitl now, I implemented bare bone for the ray tracer.
Object - Ray Intersection
Initially, I implemented the Sphere-Ray Intersection to render the sphere primitive. After rendering, we were asked to store the image in PPM format and to display using OpenGL. Later point, I implemented the plane-ray, box-ray and the triangle -ray intersection. As any model can be designed using triangle, my ray tracer is able to load and render obj formatted file models.
Shading and Lighting
I also implemented the Blinn-Phong Model for my ray tracer. I also considered the reflection and refraction in my ray tracer so that it can produce more realistic images. I also considered the Fresnel Reflection, Total internal reflection and absorption in calculating the final color of the pixels.
As the models becomes larger and larger (especially models with high poly), ray tracing takes a longer time to render the images. I use bounding box for each node object to reduce the computation time. Although, there was a significant improvement in run-time for rendering the images but it still there is a scope of improvement using space partitioning. Space partitioning is a way to sub-divide the object into smaller object collection of primitives (triangles). There are various technique, BSP trees, k-d trees, BVH trees, to achieve this. I used BVH technique to partition the model scene.