Time: MWF, 1:25pm - 2:15pm EST
Location: Hollister Hall B14
Instructor: Abe Davis (Email: abedavis [at] cornell [dot] edu) Gates R307
TAs and Office Hours: See Calendar
Ed Discussions (course link)
Course Details
Course Description
Introduction to the principles of computer graphics in two and three dimensions. Topics include basic computations on geometry, shape representation, transformations and animation, basic digital image processing and filtering, ray tracing, perspective and 3-D viewing, the graphics pipeline, curves and surfaces, and the basics of human visual perception. This course emphasizes fundamental techniques in graphics, with written and practical assignments. Assignments will be a mix of traditional problems and open-ended creative tasks where students will be encouraged to apply material in creative ways. May be taken with or without concurrent enrollment in CS 4621.
Topics
The course will be split up into four larger topic areas:
- Basic Geometry & Transformations:
- Using matrices and vectors to represent and transform geometry
- Triangle meshes, Splines
- Transformation hierarchies and camera projection
- Imaging:
- Filtering & Convolution
- HDR images & Tone Mapping
- Basic image warping
- Rendering: Ray tracing and appearance models
- Ray tracing
- Rasterization rendering pipeline
- Appearance models and shading
- Animation:
- Keyframing & Interpolation
- Principles of animation
- Shaders & other real-time rendering topics
Interactive Web Demos
CS 5620/5621
Students taking the graduate version of the course will be required to complete some extra content on problem sets and potentially assignments. Details will be provided with each assignment.
Assignments
Code Assignments
The most regular work in the course will be 5-6 coding assignments:
- Assignments 0-2: Basic 2D Geometry
- These assignments will be in TypeScript and AniGraph, which uses Three.js
- Assignment 3: Imaging
- In Python, mostly using Jupyter Notebooks
- Assignment 4: Ray Tracing
- In Python
- Assignment 5 (maybe): We may add a fifth assignment on realtime graphics and shaders, and/or keyframed animation
Late Policy & Slip Days
You can use up to 2 slip days (total) across the first 3 assignments (A0, A1, and A2). Then, you may use up to 2 slip days (total) on the next two assignments (A3 and A4).
Beyond this, late assignments will be penalized at 20% a day, capped at a 60% penalty if you turn it in more than 3 days late.
Open-Ended Projects
This class has a strong emphasis on open-ended projects, which are designed to test your ability to work creatively with material you learn in the class. Each of these projects will have some guidelines, and you will be restricted to building from provided libraries and functionality, but beyond that you will have a lot of freedom in how you meet the requirements.
Creative Projects 1 & 2
There will be two “creative” projects, done in pairs. The first creative project will be in TypeScript using 2D features of AniGraph. You will be tasked with creating some type of 2D graphical demo, or interactive application. The second creative will be in Python extending a basic ray tracer you will build in Assignment 4.
Final Project
There will be a final project in place of a final exam. Like the creative projects, this will be open-ended with some requirements and restrictions. You will work in AniGraph and TypeScript for this project. The final project will be more ambitious than the creative projects, and you will work in groups of up to 4. Expecataions for grading will scale with the size of your group.
Submissions for Open-Ended Projects
Open-ended project submissions will include: - A representative image - A zip of your code - A report summarizing the features of your submission - Optional supplemental material that may help demonstrate or verify features you have implemented.
Also, for the first and final projects, you will submit a video demonstrating and explaining your project.
Assignment Docs
Assignment Docs: Link
Grading
An approximate breakdown of grading is given below. Exact percentages may vary somewhat from what is listed here. In particular, we tend to let exceptional open-ended projects compensate for lower scores elsewhere, but the other way around is less common (i.e., if you do very poorly on all of the open-ended projects, it will be hard to pass the class).
- ~30% Quizzes, Problem sets, & Midterm
- Quizzes will be completed and submitted online. They will generally be smaller than problem sets.
- We will try to have one or more problem sets, which will involve writing and submitting longer answers to questions that are more similar to what you should expect on the exam. The balance of quizzes vs problem sets will depend on TA capacity (i.e., fewer PSets will mean more quizzes)
- 1 Midterm, scheduled for 10/23/2025 in URHG01 (link to prelim schedule for details)
- ~20% Assignments
- 5-6 regular assignments (see summary in Assignments Section)
- Some of these may be broken up into smaller progressive submissions (e.g., A1, A1b).
- We may add one more assignment as an introduction/tutorial for the final project code base (TBD).
- ~30% Creative Projects (see Assignments Section for details)
- ~20% Final Project (see Assignments Section for details)
Group Work:
Some of the assignments and all of the projects will be done in groups. For every group submission, there will be a separate form to submit individually asking you to describe what each member contributed to the project, and if there were any problems. This will be used to adjust individual grades as needed, with group members that are especially or consistently problematic facing significant penalties.
How are open-ended projects graded?
We have a rather sophisticated process, developed over several years, for grading open-ended projects to make the evaluation as fair and consistent as possible. In fact, developing a tool for this grading has become a focus of some research in my group. You will not find a better system for evaluating this number of open-ended projects. That being said, the system depends, in part, on students submitting clear and informative project reports and supporting material. You will not receive credit for features that are not demonstrated or explained sufficiently clearly. We will provide more details for each project.
What do open-ended project grades look like?
In terms of grading, each project will receive two scores: a completion score and bonus score. The completion score is based on how well you meet the basic requirements of the project, while the bonus score will reflect how much you went beyond those basic requirements. Completion points are not curved, but bonus points are at the end of the semester.
How do I gauge how I’m doing in the class?
A conservative strategy is to think about your grade as you would in a typical curved course. Having more bonus points on projects can often help you do better than this conservative estimate, but the likely difference grows smaller as you approach the right side of the curve. You should bear in mind that assignment and quiz averages tend to be high, so projects and the exam are often the main differentiators between students.
Getting an A+ is possible, but there is no guarantee that any student will receive one in a given year, and if any are given, it is only to the very top student(s). The standard for getting an A+ is higher than the standard for getting a rec letter from me.
Code Explanations
You may be asked to explain your code for an assignment or project if we are suspicious that you did not write it yourself (and no, using an AI tool does not count as writing it yourself). Failure to do so will result in penalties, which may range from losing credit for the assignment or project to failing the course and/or an academic integrity referral.
Tentative Schedule
Office Hours
TA’s will post office hours on the calendar below:
Textbook (Optional)
Fundamentals of Computer Graphics (fourth edition) Available online in Cornell library.
Academic Integrity
Basics:
We assume the work you hand in is your own, and the results you hand in are generated by your code. You are welcome to read whatever you want to learn what you need to do the work, but we do expect you to build your own implementations. For open-ended projects, please list any external resources you used as references in your report, indicating clearly and specifically where particular ideas or implementation strategies came from, whether it was a classmate, a website, another piece of software, or anything else—honesty will often keep penalties from being punitive (e.g., we may not give as much credit for a specific feature, but at least you won’t fail the project).
The principle should be that every assignment is an academic document, like a journal article. When you turn it in, you are claiming that everything in it is your original idea (or is original to you and your partner, if you are handing in as a pair) unless a source is cited for it.
School can be stressful, and your coursework and other factors can put you under a lot of pressure, but that is never a reason for dishonesty. If you feel you can’t complete the work on your own, come talk to the professor or the TAs, or your advisor, and we can help you figure out what to do. Think before you hand in!
Clear-cut cases of dishonesty will result in failing the course, and possibly an academic integrity referral.
For more information see Cornell’s Code of Academic Integrity.
Use of AI tools:
Your code should be your own. If we are suspicious that AI was used to implement something that you do not understand, we may ask you to explain your code in detail. If you cannot, we will assume that you did not write it yourself and apply appropriate penalties, which may include referral for an academic integrity violation.
But honestly, heavy reliance on AI would probably hurt you in this class, anyway… While it could conceivably make the regular assignments or online quizes easier, those are designed mostly to help prepare you for the exam and open-ended projects, which are the biggest differentiators in terms of grades. AI tools will not be available for the exam, and you will find that they tend to do more harm than good for projects. I want to really stress this latter point: graphics programming is particularly tough for AI tools to start with, and since our projects don’t build on standard graphics tools, LLMs are especially prone to introducing nasty bugs. This being the case, if you cannot explain your own code to the staff, we will not help you debug it.