The homework assignments for CMSC740 Advanced Computer Graphics are based on Nori, a minimalistic ray tracer written in C++ by Wenzel Jakob. Download a fork of Nori that we adapted for this class from this git repository. The material on this webpage and the homework assignments are adapted from Wenzel Jakob's original site.

While Nori provides much support code to simplify your development work as much as possible, the code that you will initially receive from us does very little: it loads a scene and saves a rendered image as an OpenEXR image—but the actual rendering code is missing, hence the output image just consists of black pixels. Your task will be to extend this system to a full-fledged physically-based renderer as part of programming assignments.

Core features of Nori

The Nori base code provides many features that would be tedious to implement from scratch. The following are included:
  • A simple GUI to watch images as they render
  • An XML-based scene file loader
  • Basic point/vector/normal/ray/bounding box classes
  • A pseudorandom number generator (PCG32)
  • Support for saving output as OpenEXR files
  • A loader for Wavefront OBJ files
  • Ray-triangle intersection
  • Code for multi-threaded rendering
  • Image reconstruction filters
  • Statistical \(\chi^2\)- and \(t\)-tests to verify sampling code
  • A graphical visualization tool that can be used to inspect and validate sampling code.
  • An efficient parallel bounding volume hierarchy builder (provided in the third assignment)

References

You may find the following general references useful:

Guidelines for homework submissions

Plagiarism

We will follow the academic integrity policies of UMD. In particular, undeclared copying of code or images (either from other students or from external sources) will be considered plagiarism and a violiation of the code of student conduct.

What to submit?

Upload your source code to ELMS/Canvas by the deadline. Do not include binary files! For each assignment you need to include a report that should adhere to the following conventions:

  • Structure your report using numbers and titles following those of the assignment.
  • We suggest you format your report using markdeep.
  • Nori automatically generates both a .exr as well as a sRGB tonemapped .png image of your rendering that can be directly used for the comparisons in your report.
  • Include descriptions of encountered problems, a list of external libraries that you used (if applicable) and the time you spent on each task.
The task descriptions for each assignment may contain more specific instructions on what has to be included.

Late submissions

Late submissions are subject to a late penalty of 50% of your score.