UCSD CSE 168 Computer Graphics II: Rendering

The kind of images we will render throughout the course. 3D data courtesy of the Stanford 3D scanning repository and Morgan McGuire's Computer Graphics Archive. The rightmost image is from Baichuan Wu and Vincent Li, who did one of the best final projects from last year!

Course Description

This is an advanced computer graphics courses for both undergraduates as well as Masters and PhD students who have strong interests in the field. We will learn about the foundation and algorithms for physically-based rendering: computer graphics techniques that simulate how light interacts with 3D scenes to produce photorealistic images. This course is a natural continuation of CSE 167. We will assume familiarity of basic computer graphics concepts, so make sure you are comfortable with the materials in CSE 167. Throughout the course, we will build a physically-based renderer together that will be capable of rendering images like the one above. It'll be quite a bit of programming and math, but it will be fun! Nothing matches the feeling when you "paint" a canvas using math and code.

The course will be counted for full credit for MS/PhD students.

You can take a look at last year's course webpage from Ravi Ramamoorthi to have a better sense of what the course is about. This course is also offered on MOOC and UCSD Online by Ravi Ramamoorthi. You are free to look at Ravi's lectures (and that is sufficient to pass this course), but my lecturing style would be slightly different. While I will cover most contents covered by Ravi, the order and details might be different.

If you are interested in even more advanced materials, you might want to take a look at my CSE 272 course: Advance Image Synthesis. CSE 274: Sampling and Reconstruction of Visual Appearance from Ravi Ramamoorthi is also highly-related.

If you are looking into other aspects of computer graphics, CSE 191 B: Virtual Reality Technology and CSE 165:3D User Interaction from Jurgen Schulze, CSE 169: Computer Animation from Steve Rotenberg, CSE 273: Computational Photography from Ben Ocha, and CSE 274: Discrete Differential Geometry from Albert Chern are all super cool courses. UCSD has one of the largest faculty on graphics!


You should be familiar with the materials in CSE 167 or an equivalent course. We will use C++ for programming. You also need some basic familiarity of undergraduate level calculus, but we will try to explain the mathematics in the most intuitive way.


Instructor: Tzu-Mao Li
TA: Menghe Zhang (mez071-at-ucsd.edu)
Lectures: Monday/Wednesday/Friday 2:00pm-2:50pm Pacific time. Location: WLH 2113.
Dicussion: Wednesday 3pm-3:50pm Pacific time. Location: WLH 2113.
Instructor office hour: Friday 3pm-4pm. Location: CSE 4116.
TA office hour: Wednesday 11am-12pm. Location: CSE B240A.
We will do most of the online discussions on Piazza. You are welcome to peek at the UCSD online discussions of this course but we will not be monitoring questions there.
Course recording: We will record the class if the equipment is available. However, the class will be very interactive and you might be losing a lot of context if you are not in the classroom yourself. Please try to join us in person and let's have fun together!

Grading, Homeworks and Projects

There will be 4 programming homeworks (each 20%) and 1 final project (20%).
The homeworks involve quite a bit of programming and can be tough for inexperienced. Start early and ask questions!

Late penalty: score * clamp(1 - (seconds passed after midnight of the deadline day) / 86400, 0, 1)
(this means that after 1 day your score becomes 0! start early! no negotiation unless you get a letter from the dean.)
We will use the time on Canvas to determine how many seconds have passed.

We will reuse the homeworks from the previous CSE 168 offerings. Please login to UCSD online and see the instructions there.

Bonus (new this year): for each homework, you can optionally submit one or more extra images rendered by your renderer where you design the scene. Submit both the scene file and rendering and mention them in a README file. We will highlight the coolest renderings in the class and maybe add them to the test benchmark in the future offerings.

Homework 1 (20%): Ray Tracing (out 3/28, due 4/11)
Homework 2 (20%): Direct Lighting (out 4/11, due 4/26)
Homework 3 (20%): Indirect Lighting with Path Tracing (out 4/25, due 5/5)
Homework 4 (20%): (Multiple) Importance Sampling (out 5/5, due 5/19)
Final Project (20%): Rendering Competition (due 6/9)

The final project takes inspiration from Stanford's CS 348b's rendering competition: the goal is to render an image or a video by extending your renderer in non-trivial ways. It will be graded by both artistic values and technical sophistication. You can look at the Stanford course or the previous final projects from UCSD CSE 168 for inspirations.

For people interested in inverse rendering: the final project can also involve using rendering techniques for recovering appearance or geometry -- then you can render an image of the object you reconstruct.

Collaboration policy: You can do both the homeworks and projects in a group of two or alone.


The Ray Tracing in One Weekend series from Peter Shirley is a great read. Please refrain yourself from copy pasting the code of the book though, as you tend to learn more to think about the problem yourself.
smallpt is a great reference of a simplistic path tracer.
Physically-based Rendering: from Theory to Implementation contains a comprehensive reference to many topics we talk about. It might be a dense read though.
Eric Veach's thesis contains a rigorous mathematical foundation of rendering theory. Good for theory minded students. Probably a bit too deep for this course.
Ke-Sen's webpage is where you find all the (recent) cool graphics papers!

Schedule (tentative)

3/28/2022 (Mon): Introduction (Homework 1 out) [slides]

Why rendering? Course overview. Introduction to (Whitted-style) ray tracing.

3/30/2022 (Wed): Acceleration structures [slides]

Spatial subdivision, grids, nested grids, kd-trees, and BSP trees.

4/1/2022 (Fri): Acceleration structures 2 [slides]

Bounding volume hierarchies. Top-down vs bottom-up constructions. Surface area heuristics.

4/4/2022 (Mon): Illumination and reflection [slides]

Indirect lighting vs direct lighting. Reflection models. Lambertian. Phong. Blinn-Phong.

4/6/2022 (Wed): Microfacet theory [slides]

Cook-Torrance-Sparrow BRDF. Fresnel equation.

4/8/2022 (Fri): Monte Carlo integration [slides]

Random number generation. Bias vs variance. Dimensionality. Stratified sampling.

4/11/2022 (Mon): Importance sampling (Homework 1 due, Homework 2 out) [slides]

Rejection sampling. Inverse transform sampling.

4/13/2022 (Wed): Importance sampling 2 [slides]

Uniformly sampling a disk, a triangle, and a hemisphere.

4/15/2022 (Fri): Importance sampling 3 [slides]

NDF sampling. Spherical light source sampling. Discrete distribution sampling.

4/18/2022 (Mon): Distributed ray tracing [slides]

Depth of field. Motion blur.

4/20/2022 (Wed): Rendering equation [slides]

Path tracing. Russian roulette.

4/22/2022 (Fri): Multiple importance sampling [slides]

4/25/2022 (Mon): Multiple importance sampling 2 [slides]

Derivation of the balance heuristic and motivating power heuristic.

4/26/2022 (Tue): Homework 2 due, Homework 3 out

4/27/2022 (Wed): Sampling and reconstruction (Homework 2 due, Homework 3 out) [slides]

Nyquist Shannon sampling theorem. Pixel filters. Mitchell-Netravali filter.

4/29/2022 (Fri): Textures [slides]

UV mapping. Procedural textures. Perlin noise.

5/2/2022 (Mon): Texture filtering [slides]

Ray differentials and mipmapping.

5/4/2022 (Wed): Image-based lighting [slides]

Capturing and rendering environment maps.

5/5/2022 (Thu): Homework 3 due, Homework 4 out

5/6/2022 (Fri): Normals and displacements [slides]

Shading normals. Bump mapping. Normal mapping. Displacement mapping.

5/9/2022 (Mon): Subdivision surfaces [slides]

Catmull-Clark and Loop subdivision. Hardware tesselation.

5/11/2022 (Wed): Tonemapping [slides]

5/13/2022 (Fri): Vector graphics rasterization [slides]

Rendering closed 2D Bezier curves and strokes.

5/16/2022 (Mon): Irradiance caching/photon mapping [slides]

5/18/2022 (Wed): Adaptive sampling/denoising [slides]

5/19/2022 (Thu): Homework 4 due

5/20/2022 (Fri): Path guiding [slides]

Lafortune's 5D tree. Photon map importance sampling. Importance caching.

5/23/2022 (Mon): Shadow mapping [slides]

Percentage-closer filtering. Moment shadow map.

5/25/2022 (Wed): Alpha blending and order-independent transparency [slides]

Depth peeling. Weighted OIT. Linked list sorting.

5/27/2022 (Fri): Light baking [slides]

Precomputed radiance transfer. Ambient occlusion. Light maps.

6/1/2022 (Wed): Point clouds, voxels, SDFs, and neural networks [slides]

6/3/2022 (Fri) A sneak peak of CSE 272 [slides]

6/9/2022 (Thu) Final project due