Outlined below is the schedule for the course, including lecture topics and assignment due dates. The specific dates of different topics are subject to change based on the pace at which we go through the course.

The assigned textbook for the course covers most of the topics we will go over in the class, but I will sometimes add external links to other resources if I feel the textbook is lacking in a particular area, particularly for WebGL/GLSL topics. At times, I will even write my own little web pages to describe a concept (e.g. for scene graphs).

Lectures (click for notes)Readings/LinksAssignments/Deliverables

Geometric Primitives

The course will start with an overview of some important mathematical concepts from linear algebra and vector geometry to get everyone on the same page. These are the basic building blocks that will be used again and again in the rest of the course. The pace at which we go through this section will adapt to the background knowledge of the students. We will have two small individual programming assignments in this section to get everyone used to programming with geometry in Javascript.

Big Concepts And Questions:

  • What is numerical geometry?
  • How does the quadratic formulat help is with ray object intersections?
  • What trick can we use to incorporate both linear operations and translations into a single matrix? Why do we want to do this?

1Mon 8/26/2019Course Sneak Preview, Beginning VectorsS/M Chapter 1Submit Personal Survey on Microsoft Teams
2Wed 8/28/2019Vectors, Dot Products, Javascript Crash CourseMath Resources:Javascript ResourcesMini Assignment 1: Geometric Primitives Out
3Mon 9/2/2019Projection, Normals, Lines, And PlanesCalculus Blue Parameterized Lines in 3D
4Wed 9/4/2019Ray/Sphere IntersectionsS/M 4.4.1Mini Assignment 1: Geometric Primitives Part 1 Due
Fri 9/6/2019Last day to add courses
5Mon 9/9/2019Barycentric Coordinates, Triangle Interior Point Testing, Begin 2D Matrix Transformations
6Wed 9/11/2019Homogenous Coordinates, Composition of Transformations, Inverses
Fri 9/13/2019Mini Assignment 1: Geometric Primitives Part 2 due

3D Rendering

In this part of the course, we discuss how to use a computer to generate images of 3D geometric scenes, a process known as "3D rendering." The ultimate goal of such techniques is to make photorealistic images that look like what a camera might take in the real world, though, as we will see, this is quite challenging. In the process of attempting to meet this goal, we will think about how light bounces around in the real world and how humans see that light, and we will discuss algorithms that attempt to mimic this. To this end, students will start off implementing a ray tracer, which is a non-realtime rendering technique, but which allows for visually stunning effects with reflection, refraction, and shadows. We will then talk about the more traditional rendering pipeline, which leads to visually inferior but interactive images. Students will learn the basics of the WebGL / GLSL Javascript API, which implements this rendering pipeline.

Big Concepts And Questions:

  • What are local coordinates, and what are world coordinates?
  • What are we modeling in a "scene" of 3D geometry?
  • What kinds of visual effects emerge as light bounces around?
  • What can be accomplished with ray tracing that's difficult to accomplish with real time rendering pipelines?
  • What kinds of approximations make WebGL rendering fast?
  • What challenges emerge in virtual reality compared to monocular rendering?

7Mon 9/16/20193D Matrix Transformations, Normal Transformations, Scene Graphs
Tue 9/17/2019Mini Assignment 2: Scene Graphs Out
8Wed 9/18/2019Scene Graphs Continued
9Mon 9/23/2019Shaders And GLSL
Tue 9/24/2019Mini Assignment 2: Scene Graphs Due
10Wed 9/25/2019Fractals, Texture Maps, Lambertian/Phong Illumination, Gouraud/Per-Fragment ShadingMini Assignment 3: Shaders/GLSL Out
11Mon 9/30/2019GLSL Working Session
12Wed 10/2/20193D Perspectives, Ray Tracing Overview, Ray InstancingS/M 4.1 - 4.3, 13.2Mini Assignment 3: Shaders/GLSL Due
13Mon 10/7/2019Continuing Ray Instancing, Global Illumination (Including Multiple Lights/Shadows)S/M 4.7Large Scale Assignment 1: Ray Tracing Out
14Wed 10/9/2019Finish Global Illumination (Specular Reflections, Refraction/Transmission), Begin Object-First ViewingViewing Matrices Class Exercise
--Mon 10/14/2019Fall BreakEnjoy!
15Wed 10/16/2019Perspective Viewing, Hidden Surface Removal / Depth Sorting, Culling, Begin Cel (Toon) ShadingCel Shading Class Exercise
Fri 10/18/2019Large Scale Assignment 1: Ray Tracing Checkin
16Mon 10/21/2019Finish Cel Shading Exercise / Bump Maps, Displacement Maps, Shadow MapsS/M 11.4, 11.5, 11.7

3D Shape Representations

Now that we are comfortable rendering basic shapes, we will discuss data structures for representing more complicated custom shapes, which form the backbone of modern CAD and 3D modeling applications. The first of these is the triangle mesh, which is a discrete approximation of a smooth 2D manifold surface consisting of a collection of triangles connected to each other at a common edge. We will then discuss continuous representations, including subdivision surfaces and splines. We will conclude this unit with implicit surfaces, which are volumetric descriptions of surfaces which allow for easy boolean operations and natural design of neat shapes such as water drops. And as we will see, implicit surfaces lead to a very particular, smooth aesthetic via "metaballs" (not "meatballs"!).

Big Concepts And Questions:

  • What is the difference between a discrete and continuous data structure for surfaces?
  • What are geometric properties of a triangle mesh, and what are topological properties of a triangle mesh?
  • What are the strengths and limitations of different shape representations?
  • How many metaballs does one need to design a human head?

17Wed 10/23/2019Triangle Mesh Topology: Manifold, Boundary, Euler CharacteristicS/M 12.1.1 - 12.1.3Last day to drop courses with a W
Fri 10/25/2019Ray Tracing Hackathon 4PM - 12AM, IDC 114
18Mon 10/28/2019Mesh Orientation, Mesh Storage Requirements, Basic Mesh Data Structures
19Wed 10/30/2019The Half Edge Data Structure, Per-Vertex Normals, TruncationLarge Scale Assignment 1: Ray Tracing Due
Thu 10/31/2019Large Scale Assignment 2: Mesh Processing Out
Fri 11/1/2019Midterm Cel Shading Art Contest Due
20Mon 11/4/2019Subdivision Surfaces (Guest lecture by Dr. Nick Scoville)SIGGRAPH 2000 Subdivision Surface Notes
21Wed 11/6/2019Intermezzo: Video Game Design Q&A (Guest Lecture by Steven Espinosa)
22Mon 11/11/2019Curves And Splines, Bidirectional Reflectance Distribution Functions (BRDFs)S/M Chapter 15 (skim)
23Wed 11/13/2019Implicit Surfaces/ Marching Cubes

3D Animation

In this section, we will cover some of the basics of 3D animation at a surface level. This is an incredibly broad field, so we will focus primarily on the math underlying a subset of professional animation tools such as Blender and Maya, rather than the tools themselves.

Big Concepts And Questions:

  • Explain why "inverse kinematics" are named as such
  • How does skinning work, and what are its shortcomings?
  • What is Gimbal Lock, and what animation scenarios does it adversely impact and how?

24Mon 11/18/2019Animation Overview, The Animation Loop, Begin Collision Detection, Final Project DiscussionS/M 17.1Final Project Out / Form Groups
25Wed 11/20/2019Collision Response, Convex Hulls/The Separating Axis Theorem, Begin Euler AnglesLarge Scale Assignment 2: Mesh Processing Due
Mini Assignment 4: Euler Angles And Gimbal Lock Out
Sun 11/24/2019Mini Assignment 4: Euler Angles And Gimbal Lock Due
26Mon 11/25/2019Finish Euler Angles, Rodrigues' Rotation Formula, Quaternions/SLERP
Tue 11/26/2019Final Project Progress Mini Report Due
--Wed 11/27/2019ThanksgivingEnjoy!
27Mon 12/2/2019Character Animation: Inverse Kinematics, MOCAP, Skinning
28Wed 12/4/2019Course Wrap-Up / RaffleRaffle Prizes
--Wed 12/11/2019Final Project Prototype/Video Due
--Sat 12/14/2019Final Project Feedback Due