CS6620 Ray Tracing - Project #4

Kevin Wall

Hardware: Engman Lab Desktop

Nvidia Geforce GTX 650

Intel i7-3770 3.4 GHz (4 cores)

16GB RAM

64-bit


In this project, in addition to adding reflections and refractions, I developed an alternative GPU implementation. I also integrated in software I wrote for another class I am currently taking; Image Processing. I use histogram equalization to both normalize the colors I calculate, as well as perform a non-linear mapping of the intensities seen in the image to maximize the contrast.


Render time: Lab computer (GPU implementation) : 0.3s, Lab Computer (CPU implementation): 2.3s


With histogram equalization. (extra render time is not known for the Lab computers, I did this part only on my laptop). The effect is a little strong, so I'm considering finding a middle ground, however part of the problem is how simple the scene is. With more complexity, the effect would be less overwhelming. There are some strange artifacts in this image, such as the horizontal banding in the lower shadow, and the fact that it looks like the colors on the walls went slightly over 1.0. I did not have time to debug these, but intend to.



Reflections and Refractions


While implmenting this, I ran into some issues with refractions. In this first image, I found that I was adding the BRDF to the refracted rays existing inside of the object. This doesn't really make sense because the BRDF is calculating reflected light, not light trasmitted through objects. Turning off the BRDF while inside a medium fixed this issue.


I encountered this error while implementing an iterative version of the Shading function. It turned out that rays entering the refractive sphere always hit the bounce limit and this actually caused the loop to exit immediately, instead of simply recording a zero color and continuing.


Histogram Equalization


My first implementation of the histogram equalization worked only on the the 24-bit final image, which resulted in strong false contouring, as seen here:


To combat this, my current implementation operates on the floating point intermediate image. To avoid having to bin the color and thus only alleviate the false contouring, I chose to instead use every single pixel intensity as it's own bin. This is not the most efficient solution, however if you do not mind waiting a little longer it works.


Other Error Images


Here, I was trying to apply histogram equaliztion component-wise


I have no idea what happened here. I can only say that it happened while I was working on histogram equalization.