CG II: Ray Tracer
Goal:
I will be recreating the scene in Figure 1 using ray tracing.

Figure 1: Ray trace Scene (Turner Whitted)
Part 1: Setting up the Scene (setup code)

Figure 2: Sample Scene rendered in OpenGL with GLUT
This scene was used to get the positional parameters for the ray tracer which are given here.
Part 2: Ray Tracing
Figure 3: Ray Traced Render
I was able to use some of the scene parameters that I had gathered from my OpenGL test program, but my coordinate system is different from OpenGL. I had to flip the X coordinate values and I fixed the objects so that they didn’t intersect with the film plane or the floor.
Bonus: Multi-Sampling

Figure 4: A Multi-Sampled Render
I added functionality to multi-sample a scene using recursion. Each pass will generate create 4 times as many rays per pixel. The image above was generated with 3 sample passes, translating into 64 samples per pixel. The 64 samples return color values which are averaged together to create an accurate color value for the pixel. Multi-sampling produces the effect of anti-aliasing an image which reduces the jaggies.
Part 3: Phong Shading and Shadow Rays

Figure 5: Shadows
Light Perspective

Figure 6: A view from the light position (anything blocked is in a shadow)
Figure 7: Phong Shading!
Check out the different forms of phong shading components Phong Shading Components
Part 4: Procedural Shading
Figure 8: Procedural Shading and Phong
For the floor in this part of the project I implemented a procedural texture. A procedural texture is calculated at runtime instead of using an image for the floor.
Part 5: Reflection

Part 6: Refraction

Figure 13: First refraction image

Figure 14: Fixed phong shading and 5x multisampling (2048 rays per pixel)
Part 7: Tone Reproduction

Figure 15: Unaltered reference image (no tone reproduction)
The following images use tone mapping to bring the color values from a high dynamic range down to a low dynamic range of colors which can be displayed on a low dynmaic range device such as a computer monitor. I use two types of global tone reproduction. One is from Greg Ward and the other is from Erik Reinhard.
Ldmax = 100, Lmax Varies in each set of images


Figure 16: Ward 1 nit / Reinhard 1 nit


Figure 17: Ward 10 nits / Reinhard 10 nits


Figure 18: Ward 100 nits / Reinhard 100 nits


Figure 19: Ward 1000 nits / Reinhard 1000 nits


Figure 20: Ward 10000 nits / Reinhard 10000 nits
Bonus: Reinhard Luminance Values Changed
Lmax = 1, Ldmax = 100

Figure 21: Reinhard using the luminance from pixel (10, 10) as the key value

Figure 22: Using the lumiance 0.15 as the key value
Bonuses:
Transmission Shadows:

Figure 23: Lighter Shadows for trasmissive objects.
Phong-Blinn vs Phong Shading:


Figure 24: Phong-Blinn shading on the left and Phong on the right. Exponent = 20.0 for both.
Artwork Evolution
Facebook
@PaulSolt
- I just unlocked the "Super Swarm Sunday" badge on @foursquare! Go team! http://t.co/jg1u7Blz 4 hours ago
- I'm at Super Swarm Sunday w/ @michaelmurphy @aaronfeng @benatnewdigs @unystartups @amblatx1 @skeeterharris @ianmikutel http://t.co/pPsid8Aj 4 hours ago
- RT @mattgemmell: CGPathCreateCopyByStrokingPath() (new in iOS 5 / Lion). I've wanted this function for as long as I've written UI code. ... 2012/02/04
Github
Tags
animation App Store Artwork Evolution Boost Boot Camp C++ cross platform default values development Dual Monitors function pointers Gears of War 2 git GLUT graphics ImagineRIT Impulse inheritance iOS iPad iPhone Macbook Pro Mac OS X MacPorts member functions Objective-C OpenGL PAX 10 player/stage polymorphism programming remote control RIT Robot robotics SCM static methods STL svn 1.6 version control Windows XP Xbox 360 Xcode xcode 3.1.2 XNA





