CS 488/688: Introduction to Computer Graphics

Spring 2026


Welcome to the home page for CS488/688, the introductory computer graphics course in the School of Computer Science at the University of Waterloo. This course focuses on 3D graphics and relevant topics in computer graphics. (Some details in the followings are tentative until the class officially starts.)


Overview

Description
This course gives students a solid background in 3D graphics techniques as a tool for implementing practical applications of computer graphics. A major part of the course involves hands-on programming activities.
Objectives
At the end of the course, students should be able to
  • Explain the algorithmic and mathematical concepts used in computer graphics.
  • Write interactive programs that display and manipulate 3D geometry.
  • Write programs for realistic image synthesis.
Topics
This course mostly focuses on topics related to rendering (rasterization and ray tracing), but also touches on physics animation (particles, rigid bodies, and deformables) and others. The topics covered in this course include, rasterization, sampling and reconstruction, transformations, graphics pipeline, triangle meshes, textures, real-time rendering techniques, ray-object intersections, cameras, colors and shading models, acceleration data structures, Monte Carlo integration, theory of light transport, path tracing, photon density estimation, particles, collisions, multi-body dynamics, rigid bodies, and deformables. Note that the topics in CS 488/688 vary at the discretion of the instructor for each term.

Logistics

Times and Locations
Available on Quest.
Instructor
Toshiya Hachisuka: toshiya.hachisuka@uwaterloo.ca
Teaching Assistants
Matthew Avolio: mavolio@uwaterloo.ca
Masuda Fatima: m47fatim@uwaterloo.ca
Ruomai Yang: r295yang@uwaterloo.ca
Office Hours
See the Piazza page for more details.
Announcements and Discussions
We are using Piazza for announcements, questions, and discussions of class-related material. Be sure to sign up as soon as you can. You are encouraged to ask and answer questions in Piazza or in person during lectures. Use email only for issues pertaining to you (e.g., remarking request). Post any other questions publicly in Piazza so that other students can also benefit from your questions. Do not post solutions to the assignments anywhere, not just within Piazza, but also anywhere else.
Additional resources
There is no required textbook, but the following resources may provide good supplementary material.
  • The website realtimerendering.com lists a bunch of books that are free online. Among others, for ray tracing, we recommend the pbrt book as a general reference and Peter Shirley's e-books as a good supplementary material for ray tracing.
  • Ten Minute Physics by Matthias Muller provides a very good overview of theory and practice regarding physics-based animation.
  • The website of linalg.h for coding vector math.
  • The website of GLFW in case you want to look at how it is used in the base code.
  • Shadertoy and GLSL Sandbox showcase interesting (fragment) shader programs.
  • Inigo Quilez has several articles explaining practical solutions to many problems in graphics.
  • The course note of CS 488/688 from the previous terms is also available here, mainly just for your information.
If you know other resources that you have found useful in this course, please let us know!

Expectations

Overlap with CS 398 (hope-to-be-388)
We are currently running a pilot version of a lower-level course to CS 488 as CS 398 with the goal of turning it into a sequence of CS 388 and CS 488. Since things are still actively developed, for the time being, you will see some overlap of topics between CS 398 and CS 488. The overlap does not mean they are the same courses, but since they deal with computer graphics, those who took CS 398 might expect to see the same topics repeated in CS 488.
Lectures are not everything
The lectures are designed to give you a solid understanding of the basic concepts of computer graphics, but they do not cover everything you need to know to complete the assignments. For example, the instructor will not be talking about the specifics of APIs, libraries, or coding environments, so you will need to find them out by yourself. Such specifics will become obsolete in years, so we focus more on fundamental ideas that will be relevant for a long term. That said, the instructor designed the assignments such that you do not need to deal with such specifics as much as possible. We obviously cannot cover all the technical details in the lectures in order to convey the most important fundamental ideas in a limited time. If you want to understand in more detail, we recommend asking questions or referring to the additional resources.
Requirements
While there is no hard requirement (besides the prerequisite courses as specified), generally speaking, we except students to be comfortable with probability, linear algebra, and calculus. Since this course involves quite a bit of coding tasks, you are also expected to be somewhat comfortable with algorithms and data structures, coding environment, debugging, and trouble-shooting in programming (especially in C++). You will need to have access to a coding environment (e.g., Visual Studio).
Marking scheme
Students are evaluated based only on the coding assignments. Your score relies on the successful completion of the programming tasks as described in each assignment. Each assignment contributes toward the final score as
  • A0: 0%
  • A1: 20%
  • A2: 20%
  • A3: 20%
  • Project proposal: 10%
  • Project: 30%
In order to pass this course, students need to complete all the assignments (except for the optional A0) and the project. Otherwise, your course grade will be recorded as 0. We have no midterm and final exams, but we may plan to have other forms of in-person evaluations (e.g., asking questions about your work in person). Students should contact the TAs about concerns about the marking of submitted work within a week of the date it was first returned to the students. If the issues cannot be resolved between the TA and the student, the TA will inform the instructor, who will make the final decision. Note that graduate students in 688 will have additional tasks in the final project and will generally be assessed more strictly than undergraduate students. The instructor reserves the right to adjust the grades after the score is calculated above, but typically there will be no adjustment. Due to the varying nature of assignments between terms in this course, there will usually be no INC grade.
Group work
Group work is NOT allowed in this course. Your code should be written entirely by yourself. We will be able to see if you copied code from other students. However, discussions among students are highly encouraged. A rule of thumb is that you should fully understand what you are doing and submit the code you wrote only by yourself.
Use of AI-assisted tools
Given the emerging technologies surrounding AI-assisted tools, we believe it is not appropriate to outright ban their use for any coding tasks. For instance, code completion might be assisted by LLM without you noticing it much. However, since we want students to learn and understand the topics in this course, it is inappropriate for students to simply let AI tools complete tasks on their behalf. In particular, you are expected to understand the code you submit. As such, whenever you use any AI-assisted tools, we require you to explain how you have used such tools to get your solutions. Explain as much detail as possible, including prompts and queries you have used for those tools, how you have used any output in your solution. Demonstrate that you are using the tools to solve the assignments, and that you are not using the tools to solve the assignments for you. We might ask you additional questions about your solution if we have concerns about your use of AI-tools, and your assignment mark would be adjusted based on your understanding of the code that you submitted.
Use of other resources
You may not copy code from previous offers of this or a similar course, solutions by other students, or other resources. If you are in doubt, please consult the instructor first before you write your code. The same rule applies to AI-assisted coding tools. The coding assignments in this course are not just about coding, but about understanding some of the core concepts in computer graphics. As such, if you let AI-assisted tools to solve your assignments (which is prohibited, by the way), you missed the opportunity to learn the topics.
Late submissions
Each student is allotted a total of FOUR late-day integer points. The late-day points cannot be combined with STA. If you use STA in this course, your late-day points will be automatically invalidated. Given that STA is just 2-days extension, you may consider that using STA for this course is unnecessary.Your late-day points can accommodate unexpected situations, such as your internet connection being down right before the deadline or forgetting or missing the deadline. No questions will be asked. However, follow the formal procedure if the university's policy covers your situation (e.g., AccessAbility, illness). For Late-day points work as follows;
  • If you have any remaining late-day points, an assignment deadline will be extended automatically by one day using one point. You do not need to claim to use points and we will automatically use your points.
  • While we keep track of your points for grading purposes, you are still responsible for remembering how many points you still have.
  • If you have no remaining late-day points, late submissions will incur 10% penalty per day for up to three days.
  • No submissions will be accepted more than three days after the deadline. You get zero automatically for that assignment. This is true whether or not the student has late-day points remaining.
Assignments whose marking requires any corrective action from the course staff to address student's submission mistakes (e.g., missing files, files with incorrect names and/or permissions, problems with makefiles etc.) will be treated as three days late (i.e., 30% penalty). In some extreme cases, such as missing all the files, at the instructor's discretion, it will not be accepted and receive zero points. If you notice such a mistake after the deadline, you may use your late-day point to recover your mistake. Read the instructions carefully to avoid losing any points!
Extensions, Solutions, and Absences
Do not ask us to extend deadlines. We do not extend deadlines under any circumstances based on students' requests. The instructor may, however, decide to extend the deadlines at his or her discretion when it makes sense for other circumstances. Follow the formal procedure if the university's policy covers your situation such as sickness or any accommodation, but keep in mind that you can also use late-day points if you have any remaining. We will not provide source code solutions for assignments, and you may not publish your code at any point during and even after the course. Violators may face serious consequences including zero points for the entire course, even after the term. If you have planned absences, start work early to avoid missing deadlines. Again, we will not extend or move deadlines to accommodate such planned absences.
Other University-related Information
Please refer to the course outline regarding any other university-related information.

Interested in graphics research?

If you are a student enrolled in this course, I will be happy to discuss options for you to participate in research projects on various aspects of computer graphics. There are multiple official options available in the school (URF, USRA, MURA, URA, and honours thesis), or just unofficially working on something interesting within computer graphics. Please take a look at my web page to find out more information regarding my research.

Assignments

Schedule