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.
Times and Locations
Tu/Th 12:30-2:00pm PT, Online
There are no formal discussion signups, so feel free to attend any of the sections listed below! We're currently offering 8 hour-long discussion sections and one 1.5 hour-long lost section each week. The lost section will be catered towards students who feel behind/want to go at a slightly slower pace. If you can't make any of the available discussion times, don't worry! We'll also be posting weekly video walkthroughs of discussion worksheet problems for you to go through. All Zoom links for discussion sections can be found on Piazza.
|Tue 5-6:30pm (Lost)||Jade|
|Wed 4-5:15pm (Special Topics)||Bob|
Office Hours will be geared more towards conceptual questions, but we will take assignment questions if there are no conceptual questions. All Zoom links for office hours can be found on Piazza.
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.
The Big Idea
This semester we are evolving CS184/284A policies. The goals are to allow students to increase focus on learning rather than grading, encourage learning through collaboration, and entrust you with maintaining academic integrity. The big changes are:
- Collaboration in pairs is now allowed, and encouraged, on the homework assignments.
- The class will not be graded on a curve. Your performance in class is your own.
- Exams will be take-home, protected by an honor code with no proctoring.
Assignments and Exams
Students will be assigned five programming assignments. These assignments may be done in pairs.
Students will propose and complete a self-selected final project. The final project will be done in teams of four. Each team will present live during the final project presentation and produce a final video and detailed report.
There will be 2 exams on 3/9 and 4/22. There is no exam during finals week for this course. We do not plan to offer alternate exams. Please make a private piazza post or send an email for any exceptional circumstances, which will be handled on a case-by-case basis.
For each exam, you will have 2 hours to download, work and submit. You can choose when to take the exam over a 24 hour period. The exams will be open book, open internet, except that you must not give or receive help during the 24 hour period.
You will be asked to sign to certify that you have adhered to the Honor Code on exams. There will not be proctoring.
Your course grade is computed using a point system with a total of 100 points.
- Five programming assignments, worth 10 points each.
- Two exams, worth 10 points each.
- Final project, worth 25 points.
- Participation, worth 5 points. See below for our participation policy.
There are a handful of extra credit points available over the semester.
Each letter grade for the course corresponds to a range of scores:
A >= 90 A- >= 87 B+ >= 83 B >= 80 B- >= 77 C+ >= 73 C >= 70 C- >= 63 D+ >= 57 D >= 50 D- >= 40 F >= 0
A+ grades will be given at the discretion of the instructors for A grades with outstanding engagement and performance in class.
Your final score will be rounded to the nearest integer before being converted to a letter grade. 0.5 rounds up to 1, but 0.49 rounds down to 0.
There is no curve; your grade will depend only on how well you do, and not on how well everyone else does. Score thresholds are based on how students performed in previous semesters. We currently have no plans to shift these bins and are very unlikely to do so later unless we find them to be grossly out of line with typical grade distributions. In past semesters, about 65% of students taking the course for a letter grade will receive a B+ or higher.
Incomplete grades will be granted only for medical or personal emergencies that cause you to miss the final or last part of the course, only for students who have completed the majority of the coursework, and only if work up to the point of the emergency has been satisfactory.
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 25% of your grade, it will be worth 40% (everything else re-weighted accordingly). This means:
- Five programming assignments, worth 8 points each.
- Two exams, worth 8 points each.
- Final project, worth 40 points.
- Participation, worth 4 points. See below for our participation policy.
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 late day. If you do not have remaining late days, late hand-ins will incur a 1 point penalty per day. Late days are meant to account for submission issues and other unforeseen 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 credits:
- Attending both lectures
- Attending one lecture and making one well thought out comment on the lecture slides posted on the website.
- Making 3 well thought out lecture slide comments
The details are a little more complicated (in your favor!)
Inclusion: We are committed to creating a learning environment welcoming of all students. To do so, we intend to support a diversity of perspectives and experiences and respect each other as an individual regardless of their identities and backgrounds. To help accomplish this:
- If you feel like your performance in the class is being impacted by a lack of inclusion, please contact the instructors, your ESS advisor, or the departmental Faculty Equity Advisor (list and information at: https://diversity.berkeley.edu/faculty-equity-advisors. An anonymous feedback form is also available at https://engineering.berkeley.edu/about/equity-and-inclusion/feedback/.
- If you have a name and/or set of pronouns that differ from your legal name, designate a preferred name for use in the classroom at: https://registrar.berkeley.edu/academic-records/your-name-records-rosters.
- If you feel like your performance in the class is being impacted by your experiences outside of class (e.g., family matters, current events), please don’t hesitate to come and talk with the instructor(s). We want to be resources for you.
- We are all in the process of learning how to respect and include diverse perspectives and identities. Please take care of yourself and those around you as we work through the challenging but important learning process.
- As a participant in this class, recognize that you can be proactive about making other students feel included and respected.
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:
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
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
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.
With the obvious exception of exams, we encourage you to discuss course activities with your friends and classmates as you are working on them. You will definitely learn more in this class if you work with others than if you do not. Ask questions, answer questions, and share ideas liberally.
Learning cooperatively is different from sharing answers. You shouldn't be showing your code to other students or looking at others' code, except:
- For assignments that allow partners, you can share anything with your partner.
- If you've finished a problem already, you can look at others' code to help them finish.
If you are helping another student, don't just tell them the answer; they will learn very little and run into trouble on exams. Instead, try to guide them toward discovering the solution on their own. Problem solving practice is the key to progress in computer science.
Since you're working collaboratively, keep your project partner informed. If some medical or personal emergency takes you away from the course for an extended period, or if you decide to drop the course for any reason, please don't just disappear silently! You should inform your project partner, so that nobody is depending on you to do something you can't finish.
If you have any questions, please post them on the webpages for the relevant lecture slides or on Piazza, the course discussion forum. Piazza allows you to learn from questions your fellow students have asked. We encourage you to answer each others' questions! Conceptual questions and comments should go on the lecture slide webpages, and logistics and assignment questions should go on Piazza.
Piazza is the best and most reliable way to contact the course staff. You are also welcome to email the course instructors.
Academic Honesty and Class Honor Code
The Honor Code is the commitment and work of students individually and as a community to uphold honesty and integrity. This commitment is comprehensive. Specifically on exams, it means not giving or receiving any help, or using any resources that are not permitted. The Honor Code requires that students take an active role in seeing to it that others as well as themselves uphold the letter and spirit of the Honor Code.
On exams you will sign to certify that:
- All the work submitted in my name for this exam is my work alone.
- I have not given or received any help during this exam.
- I have not used any un-permitted resources during this exam.
- I have used no more than the allowed time to write my answers for this exam.
- If I become aware of any Honor Code violations related to this exam, I will inform the course staff immediately.
Any students caught collaborating on exams will receive an F in the course. Please don't be one of these students.
Assignment cooperation has a limit, and in CS 184/284A that limit is reading others' assignment code or reports to a problem before you solve that problem and write up that portion of your own report. You are free to discuss the problems with others beforehand, but you must write your own code and reports. You may share code and report writing with your project partner.
If you are unsure if what you are doing is cheating, please clarify with the instructor by email or teaching staff via Piazza. The following is a list of things you should NOT do. This list is not exhaustive, but covers most of the big offenses:
- Do not copy code or report writing from any student who is not your partner.
- Do not allow any student other than your partner to copy code or report writing from you.
- Do not copy code or writing from online sources such as Stack Overflow, Pastebin, and public repositories on GitHub.
- Do not post your code publicly during or after the semester.
In summary, we expect you to hand in your own work, take your own tests, and complete your own projects. The assignments and evaluations are structured to help you learn, which is why you are here.
Rather than copying someone else's work, ask for help. You are not alone in this course! The entire staff is here to help you succeed. If you invest the time to learn the material and complete the projects, you won't need to copy any answers.
A Parting Thought*
Grades and penalties aren't the purpose of this course. We want to enable you to focus on your learning. The entire staff is very excited to be teaching CS 184 / 284A this semester, and we're looking forward to meeting such a large and enthusiastic group of students. We want all of you to be successful here. Welcome to our course!
(*) Thanks to Professor John DeNero and CS61A for the structure and much of the wording of various policies.