The authoritative version of this file is the one in the Scotty3D repository.
In Assignment 3 you will write code to complete Scotty3D's high-quality path-tracing-based renderer. The first part of the assignment will focus on providing an efficient implementation of ray-scene geometry queries. In the second half of the assignment you will add the ability to simulate how light bounces around the scene, which will allow your renderer to synthesize much higher-quality images.

The assignment is split into seven tasks:

Total [100pts]:
Checkpoint A3.0: [40pts]
A3T1 Camera Rays [5pts]A3T2 Intersection Tests [14pts]A3T3 BVH [18pts]Checkpoint A3.5: [60pts]
A3T4 Path Tracing [13pts]A3T5 Materials [13pts]A3T6 Direct Lighting [8pts]A3T7 Environment Lighting [13pts]To turn in your work, make sure you have all the files in the proper place and then run the following command in your root directory:
$ tar cvzf handin.tgz src/ tests/a3/ writeup-A3.txt render.s3d render.png
Details:
We encourage you to develop your own test cases. Please include these in the tests/ folder.
If you do any extra credit that requires substantial refactoring (of the sort that might break tests), submit your code and write-up for the extra credit in a separate extra/ folder.
render.png and render.s3d are a cool scene you've assembled and rendered with Scotty3D
writeup-A3.txt is described below.
You will submit a short document explaining how you believe your implementation performs on each of the tasks. The project directory contains a template in writeup-A3.txt.
For each task, do either of the following: * If you believe that you have correctly implemented the required functions, simply leave the text "Fully implemented." * If your implementation does not fully function, write a short explanation of what your code can and cannot do, and (optionally) briefly explain your strategy and how you got stuck. If your explanation indicates significant understanding of the problem, we may award partial credit even though the code does not work.
In addition, you will need to write a brief artists' statement for your render.s3d/render.png.
It's very satisfying to see the images your code can make -- and the process of making something beautiful will encourage you to improve your code and fix bugs. So build some cool scenes and render them with your pathtracer! If you don't want to model things in Scotty3D, the "Import obj" button can help you import meshes from other programs (but please make sure you hold a license for the meshes you use). The most [Art Nouveau]https://en.wikipedia.org/wiki/Art_Nouveau)-styled render, as selected by the course staff, will be awarded a small prize.
Some basic (incomplete!) test cases have been provided for you. You should add and share your own test cases in the appropriate Piazza thread.
#run all of the A2 test cases:
$ ./Scotty3D --run-tests a2.
You can also edit meshes in the GUI, which provides functions to call your operators. If you find yourself performing the same edits over and over in the GUI, we suggest writing a test case instead.
Unfortunately, we don't provide a simple way to run mesh edits from the CLI.
Each task name is prefixed by a tag which you can use to locate and test the code. See Overview for a brief overview of relevant files.
E.g., for "A3T1 Camera Rays" you can:
- find where to fill in the code, by searching in src/ for A3T1.
Helpful one-liner: find src -type f | xargs grep A3T1
- find the test cases in tests/a3/test.a3.t1.cpp
- run the test cases with ./Scotty3d --run-tests a3.t1.
A3T1 Camera RaysSee Camera Rays.
A3T2 IntersectionsSee Intersections.
A3T3 BVHSee BVH.
A3T4 Path TracingSee Path Tracing.
A3T5 MaterialsSee Materials.
A3T6 Direct LightingSee Direct Lighting.
A3T7 Environment LightingSee Environment Lighting.
Some suggestions which will make your A3 process easier.
There are some videos provided in the A3/videos folder - these videos were made several semesters ago and are slightly outdated, but many of the general concepts carry over.
Path tracers are full of randomization. Debugging algorithms that depend on pseudo-random numbers can be difficult because every run is different.
Table of Content