This is an archive of a past semester of this course. Go to the current semester.
Berkeley CS184/284A - Spring 2018
Course Description

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.

Time And Place
Mon / Wed / Fri 2:00 - 3:00 pm
North Gate 105
Tue 10am - 11am, Soda 320 (Lingqi)
Tue 11am - 12pm, Haviland 12 (Vivien)
Tue 2pm - 3pm, Etcheverry 3113 (Dillon)
Tue 3pm - 4pm, Moffit Library 150D (Pratul)
Tue 4pm - 5pm, Moffit Library 150D (Megan)
Tue 5pm - 6pm, Dwinelle 223 (Cecilia)
Office Hours
All office hours will be held in the VCL (5th floor Soda)
Mon 12pm - 1pm (Cecilia)
Tue 2pm - 3pm (Pratul)
Wed 1pm - 2pm (Lingqi)
Fri 3pm - 4pm (Megan)
Fri 4pm - 5pm (Dillon)
Fri 5pm - 6pm (Vivien)

Ren Ng
ren [at] berkeley [dot] edu
Soda Hall 535
Office hours: Mon / Wed 3 - 4 PM

Your TAs:
xuanerceciliazhang [at] gmail [dot] com
dillon.yao [at] berkeley [dot] edu
lingqi [at] berkeley [dot] edu
Megan Zhu
meganz [at] berkeley [dot] edu
pratul [at] berkeley [dot] edu
Vivien Nguyen
vivien.nguyen [at] berkeley [dot] edu

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. This site may be useful for you to pick up C++ quickly.

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:
  • Matt Pharr and Greg Humphreys
    Physically Based Rendering: From Theory to Implementation (Third Edition)
    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)
  • 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
    Fundamentals of Computer Graphics. A K Peters, 2009
  • John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, and Kurt Akeley
    Computer Graphics: Principles and Practice
Discussion Boards

We are using Piazza for course communication. Here is a link to the Berkeley CS184/284A Piazza website.

Projects and Exams

Projects. Students will complete four programming assignments. These assignments will be completed individually.

Final project. 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.

Exams. There will be 2 midterms. There is no final exam during finals week.


CS184 students:

  • Projects (4): 40% (Projects 1, 2, and 4 worth 8% each; Project 3 worth 16%)
  • Midterms: 35% (17.5% each)
  • Final Project: 20%
  • Participation (class attendance, lecture slide comments on class website, Piazza): 5%
    • Attend at least 2 out of 3 classes every week for 10 weeks
    • Or write at least 3 well-thought-out comments on course slides per week

If you miss a lecture, fill out this form to request an excuse (unexpected conflict, illness, etc). If you are doing the lecture attendance option, but you miss more than half the lectures in a week without a reasonable excuse, you can make up for that week by adding 6 (not 3) well-thought-out comments on the website. You must add these within a week of the week in question.

CS284A students: Same items 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).

Late days. Each student has five late-day points for the semester.

  • Late days apply to regular programming assignments only (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.
Hardware and Software

Once you are enrolled in the class, go to to register for an EECS instructional account. This will give you the ability to login with a username of the type cs184-xxx to the instructional Linux machines in Soda and Cory, either in person or remotely via SSH. If you do not have access to a personal computer with MacOS or Linux, then the best option is to use the computers in Soda 330 (Hive) or ssh into the s349 machines.

Collaboration Policy

Students in CS184 are absolutely encouraged to talk to each other, to the TAs, to the instructors, or to anyone else about course assignments. Any assistance, though, must be limited to discussion of the problems and sketching general approaches to a solution. Each programming project team must write their own code and produce their own writeup. Consulting another student's or team's solution, or solutions from the internet, is prohibited. These and any other form of collaboration on assignments constitute cheating. If you have any question about whether some activity would constitute cheating, just be cautious and ask the instructors before proceeding!

You may not supply code, assignment writeups, or exams you complete during CS184 to other students in future instances of this course or make these items available (e.g., on the web) for use in future instances of this course (just as you may not use work completed by students who have taken the course in the past). Make sure to make repositories private if you use public source control hosts like github.

Past Classes
You may find a list of archived sites for previous offerings of this coures here

Special thanks to Kayvon Fatahalian for the template for the course website.