Deliverables

You will submit your code as well as some deliverables (see below) in a webpage write-up. We recommend utilizing our HW Webpages GitHub Classroom, as we’ve created the necessary directory structure there for each homework. You can review our write-up guide for instructions on how to deploy your site.

Checkpoint Quiz

The Checkpoint Quiz for Homework 3 is due on Friday, March 7, 2025.

Deliverable: Please complete the [Homework 3] Checkpoint assignment.

Unfortunately, you cannot use slip days on the checkpoint.

If you use slip days for this homework, the number of slip days counted will be based on the later submission between your code and write-up. For example, if you submit your code on time but turn in the write-up half a day late, you will use one slip day for the entire assignment.

Code

The code for Homework 3 is due on Tuesday, March 18, 2025.

Deliverable: Please submit your code to the [Homework 3] Code: PathTracer assignment. We recommend submitting by linking your GitHub account to Gradescope and selecting the relevant repository. Please reference our Student Handbook for more information.

Write-Up

The write-up for Homework 3 is due on Tuesday, March 18, 2025.

Deliverable: Please submit a PDF version of your webpage write-up to the [Homework 3] Write-Up: PathTracer assignment. Please remember to select your pages. We have guidance on submission ediquette in our Student Handbook.

As a reminder, you are primarily graded on your write-up submission. Having a public website is a requirement, and can serve as a portfolio for you to show off your amazing graphics work in future years, but will not be utilized while grading, so please make sure to check that your PDF catches all images and updates that you’ve made to your website.

We have provided a simple HTML skeleton in index.html found within the docs/ folder to help you get started and structure your write-up.

You are also welcome to create your own webpage report from scratch using your own preferred frameworks or tools. However, please follow the same overall structure as described in the Deliverables section below.

The goals of your write-up are for you to (1) think about and articulate what you have built and learned in your own words and (2) have a write-up of the homework to take away from the class. Your write-up should include the following:

  • An overview of the homework, including your approach to and implementation for each of the parts, as well as what problems you have encountered and how you solved them. Strive for clarity and succinctness.
  • For each part, make sure to include the results described in the corresponding Deliverables section, in addition to your explanation. If you failed to generate any results correctly, provide a brief explanation on why.
  • Clearly indicate any extra credit items you have completed; and provide a thorough explanation and illustration for each of them.
  • At the end, if you worked with a partner, please write a short paragraph together for your final report that describes how you collaborated, how it went, and what you learned.

The write-up is one of our main methods to evaluate your work, so it is important to spend the time to do it correctly and thoroughly. Plan ahead to allocate time for the write-up well before the deadline.

Technical details: Do not convert or resize your .png. files. Use either the windowless rendering mode or use the S key to save screenshots in GUI. Do not use the built-in screenshot utility of your OS. Keep your images in the docs/images/ subdirectory. We recommend using the -r 480 360 command line flag to set resolution at 480 by 360 for all your screenshots.

Write-Up Rubric

Note: As a reminder, your screenshots need to be generated by using the 'S' hotkey or be the output file using the -f tag, not using your operating systems native screenshotting mechanism. You can refer back to our guide on Using the GUI on how to generate these images, and where to find them once they’re generated.

Overview (3 pts)

Give a high-level overview of what you have implemented in this assignment. Think about what you have built as a whole. Share your thoughts on what interesting things you have learned from completing this assignment.

Part 1 (20 pts)

  • Walk through the ray generation and primitive intersection parts of the rendering pipeline.
  • Explain the triangle intersection algorithm you implemented in your own words.
  • Show images with normal shading for a few small .dae files.

Part 2 (17 pts)

  • Walk through your BVH construction algorithm. Explain the heuristic you chose for picking the splitting point.
  • Show images with normal shading for a few large .dae files that you can only render with BVH acceleration.
  • Compare rendering times on a few scenes with moderately complex geometries with and without BVH acceleration. Present your results in a one-paragraph analysis.

Part 3 (20 pts)

  • Walk through both implementations of the direct lighting function.
  • Show some images rendered with both implementations of the direct lighting function.
  • Focus on one particular scene with at least one area light and compare the noise levels in soft shadows when rendering with 1, 4, 16, and 64 light rays (the -l flag) and with 1 sample per pixel (the -s flag) using light sampling, not uniform hemisphere sampling.
  • Compare the results between uniform hemisphere sampling and lighting sampling in a one-paragraph analysis.

Part 4 (25 pts)

  • Walk through your implementation of the indirect lighting function.
  • Show some images rendered with global (direct and indirect) illumination. Use 1024 samples per pixel.
  • Pick one scene and compare rendered views first with only direct illumination, then only indirect illumination. Use 1024 samples per pixel. (You will have to edit PathTracer::at_least_one_bounce_radiance(...) in your code to generate these views.)
  • For CBbunny.dae, render the mth bounce of light with max_ray_depth set to 0, 1, 2, 3, 4, and 5 (the -m flag), and isAccumBounces=false. Explain in your write-up what you see for the 2nd and 3rd bounce of light, and how it contributes to the quality of the rendered image compared to rasterization. Use 1024 samples per pixel.
    • Compare rendered views of accumulated and unaccumulated bounces for CBbunny.dae with max_ray_depth set to 0, 1, 2, 3, 4, and 5 (the -m flag). Use 1024 samples per pixel.
  • For CBbunny.dae, output the Russian Roulette rendering with max_ray_depth set to 0, 1, 2, 3, 4, and 100(the -m flag). Use 1024 samples per pixel.
  • Pick one scene and compare rendered views with various sample-per-pixel rates, including at least 1, 2, 4, 8, 16, 64, and 1024. Use 4 light rays.
  • You will probably want to use the instructional machines for the above renders in order to not burn up your own computer for hours.

Part 5 (15 pts)

  • Explain adaptive sampling. Walk through your implementation of the adaptive sampling.
  • Pick two scenes and render them with at least 2048 samples per pixel. Show a good sampling rate image with clearly visible differences in sampling rate over various regions and pixels. Include both your sample rate image, which shows your how your adaptive sampling changes depending on which part of the image you are rendering, and your noise-free rendered result. Use 1 sample per light and at least 5 for max ray depth.

Extra Credit

  • Place all of the relevant extra credit portions in Part 6 of your write-up. We will not be grading extra credit written in other sections.
  • Make sure you include everything mentioned for the write-up in the extra credit portions (screenshots, explanations).
  • In general, explain your approach/method in detail, implementation details that are relevant, and relevant screenshots demonstrating that your fix works. Timing tables with speedup numbers would be appreciated if there are optimizations involved.

Website Tips and Advice

You will submit your code as well as some deliverables (see below) in a webpage write-up. We recommend utilizing our HW Webpages GitHub Classroom, as we’ve created the necessary directory structure there for each homework. You can review our write-up guide for instructions on how to deploy your site.

  • Please include a link to your webpage at the top of your write-up
  • Note that only one webpage is needed for both partners
  • Your main report page should be called index.html.
  • Be sure that your images all appear in the PDF of your report. If you have videos or gifs, we will check them out on your public webpage.
  • Use only relative paths to files, such as "./images/image.jpg"
  • Do NOT use absolute paths, such as "/Users/student/Desktop/image.jpg"
  • Pay close attention to your filename extensions. Remember that on UNIX systems (such as the instructional machines), capitalization matters. .png != .jpeg != .jpg != .JPG
  • Be sure to adjust the permissions on your files so that they are world readable. For more information on this please see this tutorial.
  • Start assembling your webpage early to make sure you have a handle on how to edit the HTML code to insert images and format sections. (Or you can use Markdown)

Feedback (optional, but highly encouraged!)

Please share any feedback you have! This form should only take a minute or two to fill out, is entirely anonymous, and will directly impact how we run and develop homeworks for the rest of this semester, and all future semesters!