In this assignment, both undergraduates and graduates will extend their ray tracers from A03 to include additional features for more accurate lighting and shading calculations. However, both groups will implement different feature sets.

Undergraduate students:

Graduate students:


You should use git to submit all source code files. The expectation is that your code will be graded by cloning your repo and then executing it within a modern browser (Chrome, Firefox, etc.)

Please provide a file that provides a text description of how to run your program and any parameters that you used. Also document any idiosyncrasies, behaviors, or bugs of note that you want us to be aware of.

To summarize, my expectation is that your repo will contain:

  1. A file
  2. Answers to the written questions in a separate directory named written
  3. A index.html file
  4. A a04.js file
  5. Any other .js files that you authored.
  6. You sample scene file, myscene.js, as well as the ppm file your code generated from it, myscene.ppm.
  7. (Optionally) any other test images that you want.


Please see the individual assignment descriptions for a detailed grading rubric.

Extra Credit

Students in 433 are encouraged to attempt the programming portion of the 533 assignment, and vice versa! For students in 433, completing the distributed ray tracing features are worth up to an extra 10%. For students in 533, completing the Blinn-Phong ray tracer is also worth up to an extra 10%.

To submit, please create a repo using the appropriate link above (e.g. a student in 433 would submit their 433 project through the usual 433 link and their 533 project through the same 533 link). Do not submit answers to the written questions twice, as these are not eligible for extra credit.

In addition, implementing features above and beyond the specification may result in extra credit, please document these in your This might include, but are not limited to, implementing different shape types, material classes, light sources, or shading models. Ray tracers are extremely modular and often a variety of features can be combined in novel ways to create realistic scenes. That said, you may want to take inspiration from the requirements of the other section to motivate specific features.