CS190I: Introduction to Offline Rendering

Spring 2022

Course Description
  [Path tracing (Big Hero 6 by Disney)]
  [Participating media (Novak et al.)]
[Offline Denoising (KPCN) (Bako et al.)]
[Disney Principled BRDF (Burley et al.)]    

This course will teach you everything about offline rendering, so you will be able to write a fully functional industry-level renderer (such as Disney's Hyperion and Pixar's RenderMan) that produces stunning graphics. Topics in this course will cover the physics of light, the rendering equation, Monte Carlo integration, path tracing, physically-based reflectance models, participating media, other advanced light transport methods, production rendering approaches, and so on.

This course is the step stone if you want to find a job in the animation companies and/or if you want to apply for graduate school focusing on Computer Graphics research. Like CS180, our CS190I will not be very easy, but will be both interesting and rewarding.

Course Comparison

Some of you (especially those who have taken CS180) may wonder what the differences are between CS180 and CS190I. The answer is that CS180 to CS190I is like Artificial Intelligence to Deep Learning. CS180 is an overview in Computer Graphics, but CS190I is focused on accurate and high-quality offline rendering within the framework of ray tracing. Prior knowledge in CS180 is PREFERRED but NOT STRICTLY REQUIRED.

The difference between CS291A and CS190I is much more clear. CS291A is focused on real-time (>30 FPS) approaches. They are smart, fast but less accurate, usually used in video games and VR/AR applications. CS190I cares more about correctness and quality, but does not exploit GPU computing and does not worry about slow performance, thus is more used in animations, etc.

Also note that, this course is listed in the category "Intelligent and Interactive Systems". But it is to build up our own intelligence for the design of interactive systems. None of the topics from this course are related to Artificial Intelligence / Machine Learning / Deep Learning.

Course Prerequisites

This course does not have any strict prerequisites, since as upper division students, you should have already learned the following topics:

The listed course numbers are for your reference only. In general, as long as you have taken one course (or equivalent) in each of the four categories, you are ready to take this course. Also, it is recommended that you go through the (publicly available) slides in CS180 before the start of this course, especially the "Ray Tracing" related topics.


Lingqi Yan
Email: lingqi@cs.ucsb.edu
Office hour: Tuesdays 9:30AM - 10:30AM, HFH 2119

Teaching Assistants

Yaoyi Bai
Email: yaoyibai@cs.ucsb.edu
Office hour: Thursdays 3:00PM - 4:00PM (PT), Zoom link

Sign up on Piazza for course announcements, discussion and Q/A!

Time and Location

Mondays and Wednesdays
9:30AM - 10:45AM (PT)

Discussion Sections:
2:00PM - 2:50PM (PT), Zoom link

Note: The lectures will be in person, and they will not be recorded. Due to the limited enrollment, we have combined the three pre-allocated discussion sections into one. The combined discussion section will be remote, and will be recorded.

Textbooks Recommended

There are no required textbooks for this course. The lecture slides and discussion materials will be your main references. And they will usually be available by the next day of the corresponding lecture/discussion. Other related reading materials will be available to download from this course website before lectures.

Optional references:
Peter Shirley, "Ray Tracing in One Weekend -- The Book Series". (Free electronic version is publicly available. Also note this is a trilogy of three books.)
Pharr et al., "Physically Based Rendering: From Theory to Implementation", 3rd edition. (Free electronic version is publicly available.)

Note that there might be a mismatch of recommended books on the departmental website. Please follow the description here.

Assignments and Grading

Here's our tentative plan regarding assignments and grading. The plan is relatively fluid and may change (quite frequently) as the quarter progresses.

Your assignments are biweekly (4 in total), and all of them are programming tasks. We have optimized your implementation workload, so you are usually expected to write NO MORE THAN 40 LINES OF CODE per assignment.

Except for assignment 1, we provide a code skeleton for each assignment. All code skeletons are in C++. For Assignment 2 and Assignment 3, you must use C++. For Assignment 1 and Assignment 4, you can use Python at your own risk (without the provided code skeletons and help from the TA who does not know how to program in Python!). You will work on the assignments individually. Each assignment takes 15% of your final grade.

All assignments are due on the specified dates by 11:59PM PT. You should plan ahead. Each late day will cause a 10% off the final score of the corresponding assignment. We will use Gauchospace for submissions. Detailed submission guidelines will be in the assignment descriptions.

There will be one midterm exam and no finals. The midterm exam is in written form and will be taken in class. And it takes up 20% of your final grade.

After the midterm, you will be working on a course project called Rendering Competition (either individually or in groups of two, TBD). The topic of the project can be arbitrarily selected from all the topics covered in this course, and you are asked to render any scene of your own choice, either static or animated, to show off what you can do with offline rendering techniques learned in this course. The project also takes up 20% of your final grade.

Note specifically that we will use your relative ranking/standing in class to determine your letter grade.

Course Syllabus and Schedule

Here's our tentative syllabus. The schedule is relatively fluid and may change (quite frequently) as the quarter progresses.

Week Date Topics
1 Mar 28 Overview of Offline Rendering [Slides]
Mar 30 Review: Calculus and Probability Theory [Slides]
2 Apr 4 Sampling Theory and Practice 1 [Slides]
Apr 6 Sampling Theory and Practice 2 [Slides] [Recording]
3 Apr 11 Monte Carlo Integration [Slides]
Apr 13 Ray Tracing Basics Recap [Slides]
4 Apr 18 Radiometry and The Rendering Equation [Slides]
Apr 20 Path Tracing 1 (Direct Illumination) [Slides]
5 Apr 25 Path Tracing 2 (Global Illumination) [Slides]
Apr 27 Path Tracing 3 (Acceleration) [Slides]
6 May 2 Physically-Based Materials 1 (Microfacet Models) [Slides]
May 4 Physically-Based Materials 2 (Disney "Principled" BRDF, Marschner Hair, etc.) [Slides]
7 May 9 Midterm (In Class)
May 11 Participating Media 1 [Slides]
8 May 16 Participating Media 2 [Slides]
May 18 Camera Models and Distribution Effects (depth of field, motion blur) [Slides] [Recording]
9 May 23 Offline Denoising Techniques [Slides]
May 25 Advanced Light Transport and Other Variance Reduction Techniques [Slides] [Recording]
10 May 30 No Class (Memorial Day)
Jun 1 No Class

Programming and Collaboration Policy

Programming projects are to be implemented individually from scratch. That is, you should not derive solutions from existing sources or previous instances of this course (including previous postings from the online course, at other universities etc.). Discussion of programming projects is allowed and encouraged, but copying of solutions or code from other students, or from students who previously took this course in any university or online setting is not allowed. If you do obtain substantial help from the instructor, teaching assistant/tutor or another student, you must document this in your program. Furthermore, you should in general not copy code from other sources. If in doubt, please ask. Further specifics are given in the assignment specifications.

To repeat, you may not copy solutions or code from other students, or students who previously took this or a similar class at a university or online. You must clearly declare any code and ideas that came directly from others, as opposed to what you created yourself. If you fail to do so, we can only assume you are presenting your own work. Of course, presenting other people's work as your own is academic dishonesty. Students who engage in dishonest activities, with an intent to alter their grade, will receive an F for the course and be reported to the University for further action. Note that you will also be held liable for publicly posting your code on Github or other public websites, if another student subsequently copies from it.


Students with documented disability are welcome to contact the DSP office to arrange the necessary academic accommodations. We will also spare no efforts to help.