Nori 2 is a minimalistic ray tracer written in C++. It runs
on Windows, Linux, and Mac OS and provides a foundation for
the homework assignments in the course
Computer Graphics taught at ETH Zürich.
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 and your final project.
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
- An optimized bounding volume hierarchy builder
- Ray-triangle intersection
- Code for multi-threaded rendering
- Image reconstruction filters
- Statistical \(\chi^2\)- and \(t\)-tests to verify sampling code
Permissible sources of information
Feel free to consult additional references
when completing projects, but remember cite them in your writeup.
When asked to implement feature \(X\), we request that you don't
go and read the source code of the implementation of \(X\) in some other renderer,
because you will likely not learn much in the process. The PBRT book
is excluded from this rule.
If in doubt, get in touch with the course staff.
You may find the following general references useful:
- "Physically Based Rendering, Second Edition: From Theory To Implementation" by Matt Pharr and Greg Humphreys. Morgan Kaufmann, 2nd edition, July 2010.
- "Advanced Global Illumination" by Philip Dutré, Philippe Bekaert, and Kavita Bala. AK Peters, 2nd edition, August 2006.
- "Robust Monte Carlo Methods for Light Transport Simulation ", PhD Thesis by Eric Veach, Stanford University, December 1997.
The assignments have to be solved and submitted individually. The final project will be done in groups.
More information about the final project and the rendering competition will come later in the semester.
The deadlines are specified for each assignment. These are the dates to submit your exercises (code and
report) by email. The grading are done in class one week later to give us time to look at your reports.
To get graded you need to submit on time and be present at the grading session.
The goal of these exercises is to help you create the foundation of a good renderer for subsequent
assignments and the final projects. It is your job to convince us that you have implemented
the assignments correctly, through the information provided in your reports and the quality/readability
of your code. We will deduct points for poorly written code or inconclusive comparisons/validations in
your report. Make sure to start working on the homework as early as possible. Building your own
advanced renderer is a lot of fun. Use this great opportunity, and don’t forget to have fun!
Note: Undeclared copying of code or images (either
from other students or from external sources) is strictly prohibited! Any violation of this rule
will lead to expulsion from the class. If you're ever in doubt, just include a citation in your
code or report indicating where some idea came from, whether it be a web site, another piece of
software, or anything—this always maintains your honesty, whether the source was used in a good
way or not. When you turn your assignment in, you are claiming that everything in it is your
original idea unless you cite a source for it.
The codebase with your solution and source files. Do NOT include: binaries (i.e. remove the build folder), external dependencies (i.e. remove nori/ext) and scenes (i.e. remove nori/scenes).
An html file named firstname-familyname-report.html using this template. Include the following:
- Structure your report using the same numbers and titles as given in the assignment
- For every task include all task specific images you generated in a format that is viewable within a web browser. You should the tonemapper
provided in Nori, or photoshop to tonemap your images and save them as pngs. We recommend tonemapping your images by just changing exposure and using a gamma of 2.2.
- Include descriptions of encountered problems, a list of external libraries that you used and the time you spent on each task.
The task descriptions may contain more specific instructions on what has to be included.
Send your solution or report problems to introcg at inf.ethz.ch
with the subject paX-firstname-familyname
and CC federico at disneyresearch.com
. Use the same name for your zip files. Password protect your zip file with the password cg15
to prevent ETH mail virus protection problems.
We would appreciate any comments or criticism to improve the
projects in future years. This section of the overview document will not be graded.
Examples of information that is useful to us includes:
- How much time did you spend on the assignment? How was it divided between designing, coding, and testing?
- What advice should we have given you before you started?
- What was hard or surprising about the assignment?
- What did you like or dislike? What else would you change?