The purpose of this assignment is for you to try your hand at a different form of 3D Rendering than the “Utah” graphics option. This type of rendering is commonly used in industrial applications, specifically those requiring transparency, reflection or soft shadows. Buzz Lightyear’s clear helmet was handled via ray tracing sometimes in Toy Story.

You may use any number of texts to help you with this assignment. Although tons and tons of code is available out there so that you wouldn’t even have to code anything for this assignment, you are NOT allowed to use them unless you check with the professor. You should prove the math to yourself and you MUST write the code yourself. However, as far as useful texts goes, the text by Andrew Glassner: “An Introduction to Ray Tracing” (found at Amazon.com here). The Math/Physics library here on campus has 1 copy of this book. If it is checked out, come to talk with me and we’ll find you something that works.

The below table lists various parts of this assignment. Each part is assigned a certain number of points. Full completion of a portion is the only way to receive any of the points for that portion. Those parts with an asterisk (*) in the first column are required and MUST be done for the project to be passed off. The remaining portions are optional, although you must tally 400 points over the 4 projects for this class. The maximum which may be received for any single project is 120.

Required Description Point value
* Place a camera in the scene, solve for the rays to each pixel 10
  Ray-sphere intersection 15
  Ray-plane intersection 15
  Ray-polygon intersection via the Algorithm distributed in class. (Can be found on page 56 of An Introduction to Ray Tracing Andrew Glassner ed.) 15
  Ray-triangle intersection via barycentric coordinates 15
  Add a light and use the Phong shading model 15
  Add shadow rays 10
  Add Reflection rays 15
  Add transparency rays with the correct Snell refraction 20
  Jitter and multisample. This can be used for shadows, reflections, per pixel starter rays, transparency, etc. I would suggest you start with the per pixel start rays: multisample and jitter them. Next, you should add jitter for shadows, reflections, transparency, differently for different objects/lights. I.e. different lights might cause different amounts of jitter to the shadow rays (this approximates lights of different area). Different shininesses might create different amounts of jitter in the reflection rays. 10 (base amt)
+5 (for each added feature)
  Texture map triangles 15
  Ray-intersection code for other types of quadrics 20 + 15*(n-1) (20 for first quadric, 15 for all additional)

  Texture map spheres 20
  Suggest something variable