COMS 4160: Introduction to Computer Graphics

Fall 2025 · Columbia University · Mondays & Wednesdays 10:10am–11:25am · CSB 451

People

The instructor for this course is Silvia Sellán. Her office hours are on Mondays and Wednesdays between 9 and 10 am at her office (CEPSR 624).

This course also has three Teaching Assistants. Their office hours will take place at the Computer Science TA Room (Mudd 122) and are listed below:

Contact and communication

If you have questions about the course, you are encouraged to post a question on the Ed platform, which will be monitored by the entire course staff. Asking questions through Ed is the best way to ask questions since it ensures your message reaches the entire course staff quickly and you may find your question already asked and answered by someone else or help another student with a similar question.

If you have a private question or comment about the course assignments, grading or syllabus, that for whichever reason you do not want to ask on Ed, you should attend one of the TA office hours above or reach out to one of the course TAs directly. Their emails are as follows:

If you have questions or comments about the course that cannot be answered by the TAs, or that the TAs have not answered to your satisfaction, please attend Silvia's office hours on Mondays and Wednesdays before class.

Finally, in exceptional circumstances in which you have urgent questions or comments that cannot be answered by the TAs and cannot wait until Silvia's next office hour session, or if she has told you herself that you should email her, please email Silvia.

Note: If you email Silvia or the TAs from an email address that is not your official Columbia address, or communicate with us in any other way that is anonymous or obscures your identity, we will not respond.

Textbook

This course will closely follow this textbook by Marschner, Shirley et al. Both the fourth and the fifth editions will be sufficient to follow the course.

Fundamentals of Computer Graphics, by Marschner, Shirley and collaborators

Lecture calendar

Lectures will take place in CSB 451. Lecture slides in PDF format are posted in the "Files" section of CourseWorks shortly after each lecture.

Week Monday (10:10am - 11:25am) Wednesday (10:10am - 11:25am) Notes
1September 1st: No class: Labor daySeptember 3rd: Introduction to Graphics
2September 8th: Raster imagesSeptember 10th: Ray casting I
3 September 15th: Ray casting II September 17th: Ray tracing I Additional resources on ray-object intersections: Ch. 4.4 of textbook (4th Ed.), A2 and this and this
4September 22nd: Ray tracing IISeptember 24th: Ray tracing III
5September 29th: TexturesOctober 1st: Bounding Volume Hierarchies
6October 6th: Rasterization IOctober 8th: Rasterization II
7October 13th: Code Review (Classroom "exam")October 15th: Guest Lecture: Theodore Kim, Yale University
8October 20th: Assignment ReviewOctober 22nd: Geometry I
9October 27th: Geometry IIOctober 29th: Geometry III
10November 3rd: No class: University HolidayNovember 5th: Assignment Clinic (Mandatory attendance)
11November 10th: Animation INovember 12th: Animation II
12November 17th: Animation IIINovember 19th: Assignment Clinic (Mandatory attendance)
13November 24th: Graphics and VisionNovember 26th: No class: Indigenous Peoples' Day / Thanksgiving
14December 1st: Final Project Presentations IDecember 3rd: Final Project Presentations II

Evaluation

There will be eight assignments, each worth 10% of your grade. The Final Project will be worth 20%. The grade on each assignment will depend not only on the quality of the work you hand in, but also on your ability to explain your program's code in the Code Review and Assignment Clinic sessions. You must attend the Code Review and Assignment Clinic sessions on the dates specified above, as well as your final project presentation in December.

Please submit your assignments via CourseWorks.

Assignments

Number Title Link Due date Notes
1Raster imagesGithubSeptember 15th
2Ray castingGithubSeptember 22nd
3Ray tracingGithubSeptember 29th
4Bounding Volume HierarchiesGithubOctober 11th
5ShadersGithubOctober 22nd
6MeshesGithubNovember 7th
7KinematicsGithubNovember 21st
8Mass-Spring SystemsGithubDecember 8th

Late policy

A deadline of "Month XX, Day YY" means the assignment solution must be uploaded to CourseWorks before 23:59, New York local time, on day YY of Month XX.

Each student has five late days, to use at their discretion throughout the course (you do not need to specify a reason for using them, and the TAs will keep track of these). These late days cannot be used for the course's final project, since it will be presented in class by the student. No additional extensions will be given except for those required by University or Departmental policy.

Final Project

For the course's final project, you need to generate a creative image or video combining more than one of the topics in this course's assignments: for example, render an image using the techniques in Assignment 3 and edit it using the image processing techniques of Assignment 1. Model a mesh using the methods in Assignment 6 and render it using Assignment 5 or Assignment 3. Use Assignment 6 to design a shape and render an animation of it produced with the methods in Assignments 7 or 8. Feel free to use external code, data, information or ask any friend (real or virtual) for help.

This project is purposefully broad, and will be mostly judged on creativity: its goal is that you remember that the reason we are spending so many hours debugging very low-level code is to create tools for people to be creative with. You should get to enjoy these tools a little bit too.

You are welcome to use any source for inspiration or help, including existing software, generative AI, etc; however, most of the project should be generated with your own code. For example, it is okay to use Blender to test a scene's parameters, but you should render it using your own rendering code from A2/A3, not Blender's render engine. It is okay to use Unity to extract a character's right; but the rig should be animated using your own animation code from A7.

You will need to upload your final project in CourseWorks. Only upload the image or video, no need to upload any code. You should also upload a short (one paragraph) description of how you generated it, as a .txt file.

You will need to "present" your result in class. This can be as easy as reading that paragraph out loud while the image or video is on the screen. You will not be able to use slides or any other materials apart from your final image or video. Given that we want every student to be able to present, presentations will be very brief: each student will have only two minutes to present.

If you have any questions about the final project, feel free to ask in a TA session with Silvia or the TAs.

Grading

Your final percentage grade will be computed by adding the percentage grade of all the assignments plus twice the percentage grade of the final project, and dividing the result by ten. This final percentage grade will be converted into letters as follows:

We reserve the right to globally curve all grades upwards at the end of the course (improving your letter grade, never reducing it), but we will not negotiate the conversion table above for individual students.

Academic honesty

Please review the Academic Honesty and Integrity policies from the Department of Computer Science and the School of Engineering. Students must abide by these policies, or suffer the penalties enumerated in them.

Generative AI policy

You should not use generative AI to produce the solution to any of the assignments. You are allowed to use generative AI to produce your final project image (but do not lie about it if asked).

Acknowledgements

The materials used for this course make heavy use of course materials generously shared by Professors Alec Jacobson, David I.W. Levin, Oded Stein and Changxi Zheng.