This course provides a broad introduction to the fundamentals of computer graphics. The main areas covered are modeling, rendering, animation and imaging. Topics include 2D and 3D transformations, drawing to raster displays, sampling, texturing, antialiasing, geometric modeling, ray tracing and global illumination, animation, cameras, image processing and computational imaging. There will be an emphasis on mathematical and geometric aspects of graphics, and the ability to write complete 3D graphics programs.
You can view last semester's offering of the course here.
Times and Locations
Tu/Th 12:30 - 2:00, Li Ka Shing 245
NOTE: There is no discussion section during the first week of classes. Discussion sections begin on the week of 1/28 and 1/29.
|Tue 3-4||Soda 405||Jessica|
|Tue 4-5||Soda 405||Eric/Anup|
|Tue 5-6||Soda 405||Karthik/Bob|
|Wed 9-10||Soda 405||Henry/Iris|
|Wed 10-11||Soda 405||Gabby/Vivien|
|Wed 11-12||Soda 405||Varsha/Rishi|
|Wed 12-1||Soda 320||John/Seth|
|Wed 4-5||Wheeler 120||Randy|
We will use Piazza for course communications and discussion.
A data structures course (e.g. CS 61B), C/C++ programming ability, fluency with development environment and debugging programs, knowledge of vectors, matrices basic linear algebra, calculus and trigonometry. Helpful: exposure to statistics, signal processing, and the Fourier transform.
Assignments and Exams
Students will be assigned four programming assignments. These assignments must be completed individually.
Students will propose and complete a self-selected final project. The final project will be done in teams of three. Each team will present the project orally during the final project presentation and produce a detailed report.
There will be 2 midterm exams, currently scheduled for Tuesday March 10 (7-9pm) and Thursday April 23 (7-9pm). There is no final exam for this course.
You may bring one, letter-sized, double sided cheat sheet to each exam. (One cheat sheet for exam 1, one cheat sheet for exam 2).
At this time, we do not plan to offer alternate exams. Please make a private piazza post or send an email for any extraneous issues, which will be handled on a case-by-case basis.
- Projects (40%):
- Projects 1, 2, and 4: 8% each.
- Project 3: 16%
- Exams (35%):
- 17.5% each
- No final exam
- Final Project (20%)
- Participation (5%)
- See below for our participation policy
For cs284a Students:
Grading items are the same as above, but for your final project, you will be required to do a substantial project and submit a paper-style write-up. Instead of it being worth 20% of your grade, it will be worth 40% (everything else re-weighted accordingly).
Each student has five late days for the semester.
Late days apply to regular programming assignments only and not the final project. You can extend a programming assignment deadline by 24 hours using one point. If you do not have remaining late days, late hand-ins will incur a 10% penalty per day. Late days are meant to account for submission issues and other unforseen circumstances. For anything extreme beyond this, please make a private Piazza post or send us an email.
Please read the participation policy article for more details. The basic idea is that doing any of the following each week will get you full participation points:
- Attending both lectures
- Attending one lecture and making one well thought out web comment
- Making 3 well thought out web comments
The details are a little more complicated (in your favor!)
Please do not post code to a public GitHub repository, even after the class is finished, since these assignments will be reused both here and at other universities in the future.
The assignments are to be completed individually. You are welcome to discuss the various parts of the assignments with your classmates, but you must implement the algorithms yourself -- you should never look at anyone else's code.
The primary source for the course will be the website, lectures, and section. Suggested supplementary reading and resources will be posted on the course readings page. The following textbooks are recommended, but optional, resources for you in this course and beyond:
Fundamentals of Computer Graphics
Authors: Pete Shirley and Steve Marschner with Michael Ashikhmin, Michael Gleicher, Naty Hoffman, Garrett Johnson, Tamara Munzner, Erik Reinhard, Kelvin Sung, William B. Thompson, Peter Willemsen, and Bryan Wyvill
- Available on Amazon
Physically Based Rendering: From Theory to Implementation (Third Edition):
Authors: Matt Pharr and Greg Humphreys
- This book (PBRT) is the book for learning about modern ray tracing techniques. It has a great website with full source code online for an advanced physically-based ray tracer. It even won an Oscar for its impact on the film industry!
- PBRT is available free online for you through Berkeley login: (Second edition, Third edition)
- Also available on Amazon
Computer Graphics: Principles and Practice
Authors: John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, and Kurt Akeley
- Available on Amazon
Github OAuth Notice
We use Github's OAuth authentication mechanism both as a simple method to sign in, and to obtain a token which we can use to let you verify your assignment submissions as we see them for your own sanity.
Unfortunately, Github's permissions for OAuth applications have very poor granularity: the only way for us to be able to view the details of your private course repos is to also to have full write access to your repositories.
Your privacy is important to us. We do not use your API token to do anything other than access your assignment repositories within the
cal-cs184-student organization, and even then in only a readonly context. If access permissions are a concern for you, feel free to ask us about how we use and protect your token.
This is a known problem and something Github is aware of.
Many thanks to Dillon Yao (Spring 2018 TA) for developing this course website.