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!

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!

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.

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!

(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.

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.

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!

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

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

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

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

Cook-Torrance-Sparrow BRDF. Fresnel equation.

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

Rejection sampling. Inverse transform sampling.

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

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

Depth of field. Motion blur.

Path tracing. Russian roulette.

Derivation of the balance heuristic and motivating power heuristic.

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

UV mapping. Procedural textures. Perlin noise.

Ray differentials and mipmapping.

Capturing and rendering environment maps.

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

Catmull-Clark and Loop subdivision. Hardware tesselation.

Rendering closed 2D Bezier curves and strokes.

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

Percentage-closer filtering. Moment shadow map.

Depth peeling. Weighted OIT. Linked list sorting.

Precomputed radiance transfer. Ambient occlusion. Light maps.