Over the course of Advanced Rendering Techniques I gained a decent understanding of ray tracing techniques and a general understanding of simulating global illumination. Below are some examples of the ray tracing techniques I implemented.
Reflections and transformations are a couple of the simplist requirements of a basic ray tracer. In our class we accomplished this by transforming the ray by a matrix defining the shapes transformation. Here this can be seen in the scaling and rotation of the two spheres that make up the heart.
Refraction presents a slightly more complex problem in ray tracing, because it is dependant on more than the surface normal of the object; it relies on real world properties of the object. In our class, we simulated this by giving objects indicies of refraction for those that required them. Anti-aliasing, however, simply requires increasing the sample size of a given scene, and thus, is much easier to implement. In the given image both refraction and anti-aliasing can be seen; the color change between pixels is much smoother, and as one looks through the spheres the floor appears warped.
In my ray tracer I implemented Monte-Carlo ray tracing. This technique releases multiple sub-rays at each point of contact, and then gathers light information from each sub-ray intersection. In our class we implemented attenuation so that as objects got further away from a surface they affected its illumination less and less. In my ray tracer I implmented a technique that interested me quite a bit; I read that the closer the incoming sub-ray was to intersecting the ray from the light at 90 degrees the more light from that surface would impact the illumination of the original point. While this technique took longer to render, I liked the results from it more.
In the above image without global illumination there is nothing particularly worth mentioning, but in the next image with global illumination a clear difference can be seen. The points on the plane closest to the reflective spheres recieve more light, and the red glow given off by the red plane can be seen on the stark white sphere.
As a final addition to my ray tracer I added support for participating media. Simply explained, a voxel grid is marched through in small increments and color is collected until a solid object is hit or the fluid has become completely opaque. In the given image a transformed sphere can be seen through a small cloud. It is important to note that the fog becomes more opaque as more of it is allowed to accumulate between the camera and the sphere.