CSCI 480/580 - Computer Graphics

Scott Wehrwein

Winter 2021

Course Overview

In Brief

Remote Instruction Format

Lecture Content

I plan to use a combination of “flipped” and traditional delivery for the content in this course. Each class meeting will consist of one (or a combination of both) of the following activities:

For some class meetings (i.e., those heavy on group work), you will be expected to watch pre-recorded lecture videos before class. These videos will be posted on the course webpage by the beginning of the previous class meeting (e.g., videos for Wednesday’s would be posted by 1pm on Tuesday), and announced in class and on Discord.

I’ve chosen to use a combination of Zoom and Discord because Zoom works much better for live lectures and Discord works much better for group work. I also hope that the Discord will serve as a hub for course-related interactions and collaboration outside of class time.

Recordings and Privacy

Live lectures will be recorded for members of the class to watch after the fact in case of missed lectures, or to review if you’d like to see the content again. The recordings will capture my audio, webcam, and screen share only - it will not include video or audio of other participants. I will do my best to repeat questions, but the recordings may be missing context from the voice and chat channels.

What

Official Synopsis from the WWU Course Catalog

480: Overview of the hardware, software, and techniques used in computer graphics; raster display devices; input devices; display files, 2D and 3D transformations; windowing, clipping; simple surface rendering.

580: Three-dimensional concepts, shading techniques, curves and surfaces, ray tracing, radiosity, texture mapping, fractals.

Unofficial Synopsis from the Instructor

This course will give an introduction to the fundamentals of computer graphics, with a focus on rendering techniques. At the core of computer graphics is the modeling and rendering of synthetic scenes. We will begin by discussing some basic data structures for modeling 3-dimensional objects, then spend the bulk of the middle of the course covering two fundamentally distinct approaches to rendering. Beginning with image-order rendering, we will investigate raycasting, raytracing, and touch on more advanced image-order rendering techniques such as path tracing. We will then move on to object-order rendering, covering the basics of hardware-accelerated rendering using OpenGL and programmable shaders. Along the way, we will make heavy use of mathematics, in particular linear algebra, 3D geometry, and coordinate transformations. As time allows, we will delve into the details of the rasterization algorithms underlying OpenGL, as well as other topics that might include animation, spline curves, parametric surfaces, and global illumination.

Official Course Outcomes

On completion of this course students will be able to:

Textbook

Other References

Assessment

Grades will be calculated as a weighted average of scores on the following course components, each of which is described in more detail below:

Notice that the 580 components add up to 110%, which is fitting for graduate students. 580 students’ scores will be scaled by a factor of 10/11 to map them back into the 0-100% range before letter grades are assigned.

The standard letter grade ranges apply (i.e., 90–100% is an A, 80–90% is a B, and so on). The calculated raw percentages may be curved at the instructor’s discretion, but any such curve used will not lower anyone’s grade. “+” or “-” cutoffs will be decided at the instructor’s discretion. Students who demonstrate mastery of the material will get grades in the A range, and it is my goal to give as many A’s as possible.

Programming Assignments

Approximately 4 programming assignments will be given. The first assignment will be done alone, while the remaining ones will be done in pairs. You must work with a different partner for the two group assignments.

Written Homework

Approximately 4 short written homeworks will be assigned. The primary focus of these homeworks is to reinforce the mathematics underlying the concepts covered in class and make sure you’re prepared to implement the math in the programming assignments.

Midterm Exam

Since there is no final exam, the midterm exam is given later in the quarter. The midterm will be a take-home exam released on Friday, 2/19 and due Monday, 2/22.

Final Project

In place of a final exam, students will complete a final project, which will provide a chance to explore and implement a special topic beyond the basics covered in the programming assignments. Final projects may either be a significant extension of one of the programming assignments, or a standalone implementation on a separate topic. The final project will be done in groups of two or three. You will submit a project proposal by Friday of the 7th week of class (2/19). A brief milestone progress report will be submitted partway through the project. The final project source code, results, and writeup are due on Monday of finals week (3/15), and each group will give a brief project presentation during the our final exam slot on 3/17 between 8AM and 10am.

(580 only) Advanced Topic Presentation

Graduate students will work in teams to prepare and lead a class on an advanced topic of their choice during the last week of classes. Typically, the topic of this class will either be an overview of an active sub-area of graphics research, or a deep dive into some topic not covered in lecture. The topic may coincide or overlap with your final project topic, but is not required to. Topics will be proposed by the end of the 7th week of classes and finalized during the 7th week of classes.

Logistics

Course Webpage / Syllabus

The Schedule section of this page will be updated as the quarter progresses with topics, links to lecture slides, code examples, readings, and links to assignment and lab handouts. I suggest bookmarking this page; if you forget the URL and need to find your way back here, you can use link on the Syllabus page in Canvas.

Canvas

We will use Canvas for announcements, grades, and submission of written homework. Programming and Homework Assignments will be linked from both the course webpage and the corresponding assignment on Canvas. Lecture notes and readings will be posted on the course webpage only.

Piazza

We will use the online Q&A platform Piazza to ask and answer questions, make clarifications, and discuss supplemental topics outside of class time. You can access our Pizza page here or by logging into Piazza. You will receive an email in the first week of classes with information on how to log in.

Communication

It is your responsibility to make sure that you promptly become aware of Canvas Announcements as they are posted; Canvas should be configured to send you an email notification by default, but if you are unsure, please come see me in office hours.

Regular announcements about course logistics, including notifications about lecture videos, will be sent via Discord using the @everyone tag to ensure that everyone is notified. You are responsible for receiving these announcements and watching videos in preparation for class meetings where applicable.

Git and GitHub

This course assumes that you have basic familiarity with git. Programming assignments will be completed using git repositories hosted by GitHub and orchestrated by GitHub classroom. You will receive an invitation link to create a repository for each assignment, complete the assignment in a local copy of the repo, and submit by pushing your final changes to GitHub.

Feedback

I take student feedback seriously. I appreciate any feedback you’re willing to give, and I will do my best to act on constructive feedback when possible. I will solicit feedback formally partway through the course, but you are welcome to provide feedback anytime in my office hours, by email, or if you desire anonymity you can use this Google Form.

Schedule

This schedule is highly tentative and subject to change without notice. Slides/notes, assignments, readings, etc. will be posted here throughout the quarter.

Date Topics Videos and Problems Assignments Suggested Readings
1/5 (1) Introduction and logistics - what is graphics?
slides, video
About You Survey out 1 - Introduction
1/6 Raster Images; Vectors
slides, video, image_demo.jl
About You Survey due
HW0 out; A0 out
2.1: Sets and Mappings
2.3: Trigonometry
2.4: Vectors
3.1–3.3: Raster Images, Pixels, and Image Geometry
1/8 Triangle meshes - Geometry
slides, video
P02 12.1 - Triangle Meshes
1/11 (2) Triangle meshes - Normals
slides, viewer, meshes
L03, P03 2.5 - Curves and Surfaces
1/12 Parametric Surfaces
Triangle meshes - textures
slides
spherical coordinate notes
meshes
L04A
L04B
L04C (optional)
P04
2.1- Sets and Mappings
2.5 - Curves and Surfaces
11.1 - Looking Up Texture Values
11.2.2 - Interpolated Texture Coordinates
11.2.5 - Continuity and Seams
1/13 Ray tracing setup: cameras and ray generation
slides, video
P05 HW0 due; A0 due
HW1 out; A1 out
4.1–4.3 - Basic Raytracing, Perspective, Viewing Rays
CGFS Common Concepts, Part I Intro
1/15 Coordinate Frames and Bases
General Perspective Cameras
slides, video (a), video (b)
L06A (3B1B)
P06
1/18 (3) No class - MLK day
1/19 Ray-sphere intersection
slides, notes, video
P07 2.2 - Quadratic Equations
4.4.2 - Ray-Sphere intersection
CGFS Basic ray
1/20 Lights, Diffuse and Mirror Reflection
slides, video
P08 4.5 - Shading
CGFS Light
1/22 Specular Reflection
Shadows
slides, video
P09 4.7 - 4.8 - Shadows and Specular Reflection
CGFS Shadows, Reflection
1/25 (4) Barycentric coordinates
Ray-triangle intersection
slides, notes, live notes, in-class notes
L10A
L10B
P10
Mesh due; HW1 due
A2 out; HW2 out
2.7 - Triangles
4.4.2 - Ray-triangle intersection
1/26 A2 code overview P11 The A2 Handout
1/27 Advanced Ray Tracing
slides, video
Chapter 13 - More Ray Tracing
CGFS Beyond the Basics
1/29 Acceleration Structures
slides, intro video
L13
P13
P13 video
12.3 - Spatial Data Structures
2/1 (5) 2D Linear Transformations
slides, video, notes, live notes
P14
P14 video
5 - Linear Algebra
6.1 - Linear Transformations
2/2 Affine Transformations
Homogeneous Coordinates
slides, video, live notes
P15 6.3 - Affine Transformations
2/3 Affine Composition
Similarity Transformations
3D Transformations
slides, video a, video b
6.2 - 3D Transformations
2/5 Object order introduction
Viewing Transformations 1
slides, notes, live notes, video, code
P17 HW3 out 7 - Viewing
8.2 - Before and After Rasterization
2/8 (6) Viewing Transformations 2
slides, demo, live notes, video
P18
code
Ray due; HW2 due 7.1 - Viewing Transformations
2/9 Perspective Viewing
slides, demo, live notes, code, video
P19 A3 out 7.2 - Projective Transformations
7.3 - Perspective Projection
2/10 Hierarchical Transformations
slides, live notes, video
12.2: Scene Graphs
2/12 The Graphics Pipeline
slides, z.obj, video
8: Graphics Pipeline
2/15 (7) No class (President’s Day) HW3 due
2/16 GL and Shaders 1
slides, notes, GLSL, video
lab
lab code
17: Using Graphics Hardware
2/17 GL and Shaders 2
slides, video a, video b
lab solution
2/19 Shading in GL
Clipping
slides, video
P24
P24 soln
FP Proposal due
Midterm out
8.1: Rasterization
2/22 (8) Rasterization: Lines
slides, notes
vid1, vid2, vid3
P25 (Google Slides) Midterm due
FP Proposal back
8.1: Rasterization
2/23 Rasterization Lab
updated notes, video
lab handout
2/24 Splines 1
notes, video a, video b
A3 due 15: Curves; A primer on Bézier Curves
2/26 Splines 2
notes, video
3/1 (9) Hermite Splines
Bézier Splines
slides, notes, hermite demo
video 1, video 2
P29
Soln: 1, 2
Spline lab
FP milestone 1
3/2 Spline Lab
de Casteljau’s algorithm
slides, notes, video 1, video 2
Spline lab
task1 soln
3/3 Splines wrap-up
slides, video 1, video 2
3/5 Animation
Global Illumination
slides, video
3/8 (10) Caelan and Joe:
Modeling and Rendering Hollow Glass Vessels
slides
FP milestone 2
3/9 Alex and Piper:
Style Transfer
slides
3/10 Max and Ryan:
Monte Carlo/ Global Illumination and Transparency and Translucency
slides
3/12 AMA
3/15 (no class - finals week) Final Project Due
3/17 Final Project Showcase: Wednesday, 3/17 9-10AM

Course Policies

Inclusive Classroom Environment

It is expected that everyone will promote a friendly, supportive, and respectful environment in the classroom, labs, and project groups. Everyone’s participation will be equally welcomed and valued.

Late Work

You have five “slip days” that you may use at your discretion to submit programming assignments or written homeworks late. Slip days cannot be used for the final project. You may use slip days one at a time or together - for example, you might submit each of five assignments one day late, or submit one assignment five days late. Each slip day moves the deadline by exactly 24 hours from the original deadline; if you go beyond this, you will need to use a second slip day, if available.

After your slip days are exhausted, a penalty of .1 * total_assignment_points * floor(hours_late/24 + 1) - that is, 10% of the total points per day late, will be applied.

To use slip days or submit work late, you do not need to let me know ahead of time. For written homeworks, simply submit to Canvas when you are ready, and I will apply slip days according to the submission time, noting the number of slip days used in your feedback. For programming assignments, you will complete your submission by pushing code to Github and filling out a Canvas survey. The submission time of the survey must be after your final push to Github and will be used as the time of submission.

Programming Guidelines

Your programs will be graded on correctness, clarity, and efficiency (in that order).

Correctness:

A correct program is one that always produces the correct output for a given input. Also, a correct program does not produce unintended side-effects. The most effective way to ensure that your program is correct is to test, test, test. Test each component as you introduce it; once you are confident that a component works you can use it in other routines. Try to break your program in testing, and if you succeed, locate the bug and fix it. The better you test your program, the more likely it is to be correct - the more likely it is to be correct, the more likely you’ll earn a good score. Most of your grade will depend on the correctness of your code.

Clarity:

The easier it is to read and maintain your code, the easier it is to locate and remove bugs. Your program should be well organized, appropriately commented, and easy to maintain. To have a well-organized program, design your program thoughtfully and modularly. Think before you code: hacking away blindly leads to ugly, difficult-to-read code. If you do hack away, producing a functional but ugly wall of code, try to clean it up a bit. Make sure that your cleaning does not introduce new bugs.

As for comments, please follow these simple guidelines proposed by Emeritus Professor Osborne:

Efficiency:

Your programs should be asymptotically efficient, e.g. checking graph reflexivity should be O(n), insertion into a balanced tree should be O(log n), etc. Do not optimize your code beyond the asymptotic level at the expense of clarity unless the benefits are substantial, and even then do so judiciously, and justify and document your optimizations in comments.

Academic Honesty

Collaboration Policy - Individual Assignments

Individual programming assignments are to be completed independently. Students are welcome to discuss assignments with each other on a conceptual level, but each student should be writing their code independently and without direct help from fellow students. Sharing your code with others or looking at someone else’s code is an explicit violation of this collaboration policy. The best way to be absolutely sure you are collaborating appropriately is follow these two rules:

Automated tools will be used to check your code for plagiarism at the push of a button. They are not fooled by tricks such as changing variable naming and whitespace: in fact, hiding plagiarism is harder than doing the assignment.

Collaboration Policy - Team Based Assignments

For pair programming assignments, the above policy applies to any collaborations with people outside your group. In addition, each partner must be able to independently explain all of the code that your team submits. Pair programming is the recommended way to ensure that this guideline is met, but it is not strictly required. If one team member writes code separately, I suggest having the other team member perform a thorough code review.

University Policies

All University-wide policies apply to this course, including those outlined at http://syllabi.wwu.edu. These policies cover issues including: