- Lectures
-
TR 11:15am - 12:30pm
75 Shannon Street, room 202 - Instructor
-
Philip Caplan
- Please call me Philip. My pronouns are he/him/his.
-
75 Shannon Street,
room 219
- (802) 243-5707
- pcaplan@middlebury.edu
- Office Hours
-
- Tuesdays: 2 - 3:30pm
- Thursdays: 2 - 3:30pm
- Fridays: 11am - 12pm
- (and by appointment)
Description
Computer graphics is the study of how computers represent,
manipulate, and ultimately display visual information. In this
course we will focus primarily on three-dimensional graphics,
touching on topics such as modeling (meshes, hierarchical models,
and transformations), rendering (lighting, texturing, rasterization,
and clipping), animation, and GPU programming. We will look at the
mathematical foundations of these techniques as well as
implementation techniques using
WebGL
.
Objectives
By the end of the course, you will:
-
write mesh data to the GPU using
WebGL
(coordinates, indices, normals and colors) and subsequently draw the data, - setup all matrices necessary to transform your mesh from model space to screen space,
- shade surfaces using the Phong shading model,
- evaluate and render cubic Bezier curves,
- setup basic mesh data structures to manipulate meshes efficiently for a particular application,
- texture surfaces to "cut-and-paste" an image onto a mesh,
- animate physical systems using particle-based and mass-spring models,
- cast primary rays from a camera, and secondary rays from surface reflections and/or refractions to compute the color at a surface point.
Coursework
Lectures & Labs
In a typical week, I will introduce a topic on Tuesday, which will involve some lecturing as well as short exercises. On Thursdays (in class), we will start a lab in which you will get additional practice with that week's topic. You should be able to finish the fundamental components of each lab within the Thursday session, but the labs will usually require some work outside of class. There are 11 labs in total, submitted individually, but worked on in groups during the lab session.
Final Rendering
In the last week of the semester, you will submit a single image of
a virtual scene rendered with techniques of your choosing. This
assignment will be submitted in groups of 2 - 3. This scene can
either be ray traced or rasterized and can include any objects you
want to render. You will also submit some details about the scene
(number of objects, mesh statistics, shading models) and about the
rendering (samples per pixel, frame rate, etc.).
Images will be displayed at a CS department poster session at the
end of the semester. A sketch of your Final Rendering will be due in Week 9 (details
to be posted later in the semester).
Tools
All assignments will be distributed using GitHub (Classroom) and
submitted to Gradescope. Please create an account on
GitHub if you do not have one
already. You can develop all of your assignments in a GitHub
Codespace, but I would also recommend
installing VS Code
as well as git in case
you want to develop locally on your computer. Our use of
git
will be kept fairly minimal, and a summary of how
to use it can be found here.
We will communicate using an EdStem discussion board - please join here. Please be respectful of your peers in the discussion board - it's sometimes difficult to convey humor in a text message, so please be mindful of how your messages might be interpreted. Any questions you have about the course, or requests for help with bugs should be asked in the appropriate channel - there is a very good chance someone else has a similar question or has encountered a similar bug. I will not respond to questions about the course material or bugs in email (email should only be used for personal matters). I will check our discussion board during regular working hours (M-F 9am-5pm).
Please bring a computer to every class in order to work on the in-class exercises and labs. Please see the policy below about borrowing a laptop from the CS department.
Grading
In this course. We will use a form of specification grading. Instead of using points to assess your work, all assignments will be evaluated as (C)omplete, (R)evise, (N)ot assessable. Your final letter grade is then determined by "bundles," and how each assignment status (C, R, N) contributes to that bundle.
What does CRN mean?
"Not assessable" will typically mean that little to no modifications to the initial lab template were made, or there is an error/exception. "Revise" means a resubmission is needed, likely due to bugs that prevent the necessary output from being displayed. "Complete" means the submission implements all the requirements described in the assignment.
There will be 12 assignments in total: 11 Labs + Final Rendering, which all have equal weight in our CRN model. Each lab will be due one week from the release date. Once you submit the lab, I will review it and make comments in Gradescope. Please allow one week for me to review your lab. You can resubmit your lab at any point in the semester (as many times as you want), but all assignments have a final due date of May 16th.
Final Grade
Your final grade will be determined by the status you achieved on each assignment. The following list describes the bundles for each grade (subject to change).
- A: 11C + 1R.
- A-: (10C + 2R) or (11C + 1N).
- B+: 10C + 1R + 1N.
- B: 10C + 2N.
- B-: 9C + 3R.
- C+: 9C + 2R + 1N.
- C: 9C + 1R + 2N.
- C-: 9C + 3N.
- D: 8C + any other mix of R/N.
An R on the Final Rendering project consists of a well-thought out sketch (due in Week 9) with details about any asset sources (models, textures) and scene description (object positions, camera setup). Yes, this system technically means that you do not need to submit the Final Rendering for an A in the course (as long as you submit the sketch).
April 8th update: the lowest assignment grade (either a Lab or the Final Rendering) will receive a grade of "C" (Complete). This is kind of like "dropping" the lowest assignment grade, but in a way that maintains the breakdown of the final letter grade described above.
April 24th update: Submitting the Final Rendering Sketch will be considered Complete ("C") for that assignment.
Materials
There are no required textbooks. Notes will be posted on the calendar. However, you may find the following textbooks useful:
- Fundamentals of Computer Graphics by Steve Marschner and Peter Shirley,
- Interactive Computer Graphics by Edward Angel and Dave Shreiner.
Expectations
Environment
My goal is to create an inclusive and welcoming learning experience for everyone. I try to use language, examples and exercises that promote a sense of belonging to the field of computer science, but please let me know if there is anything I can do to improve.
Furthermore, creating such an environment is a team effort, so I expect you to join me in fostering an inclusive learning experience for everyone. Every member of the class is expected to show respect for every other member so that everyone can learn in this space. If you experience or witness any behavior that opposes this idea, it would be helpful for me to know so that I can address it. If you feel comfortable, you can report such incidents in the following ways:
- talk to or email me,
- report the incident to our anonymous CS departmental climate feedback form,
- fill out a Bias Incident Report which goes to the Middlebury Community Bias Response Team.
You belong in this class and in the computer science department. Thank you for being here and for contributing to this course.
Policies
Academic Accommodations
Students with documented disabilities who believe that they may need accommodations in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. Assistance is available to eligible students through Student Accessibility Services. Please contact the ADA Coordinator Jodi Litchfield, who can be reached at litchfie@middlebury.edu or 802-443-5936 for more information. All discussions will remain confidential.
Title IX
As faculty members and members of the Middlebury community, we are committed to the safety of all students. If we learn of any potential violation of our Policy Against Sexual Misconduct, Domestic and Dating Violence and Misconduct, and Stalking ('SMDVS Policy') or our Anti-Harassment/Discrimination Policy, we are required to notify a member of Middlebury's Title IX team (policies summary). This ensures that students receive timely care and information about their rights, their choices, and available resources for support. Students who would like to speak with a confidential resource who does not have an obligation to report can contact MiddSafe, the Patron Center for Health and Wellness, WomenSafe (serving individuals of all gender identities), or campus and local clergy and medical professionals. For more information, see go/sexualviolenceinfo.
Borrowing a Laptop
If you ever find yourself temporarily in need of a laptop, the Computer Science department has 10 rotating Dell laptops available to our students. These come pre-installed with software for most of the courses in the major. They are available to be loaned out short-term or long-term based on your need (as determined by you). Feel free to ask me ahead of time if you think you need one for just a class period, or you can send an e-mail to Smith Gakuya: sgakuya [at] middlebury.edu directly. On Long-Term Use: College policy has changed recently to include the expectation that every student have a laptop available. The college provides laptops to those who need them where “need” is based on Student Financial Services calculations. If you anticipate needing a laptop for the whole term, we encourage you to inquire with Student Financial Services and the library first due to our smaller pool of equipment. However, our department commits to meeting the needs of every student, so do not be afraid to reach out if you believe you need one of our laptops for any length of time.
Honor Code
In this course, respecting the honor code means writing all code yourself for the assignments. During the labs, you will work in groups of 2 - 3, so you are certainly allowed to look at each other's code, brainstorm ideas, and help each other find bugs. However, you should never write code for someone else, exchange code in email or text messages, or let someone else write code for you.
Generative AI
The use of generative AI tools (such as ChatGPT or GitHub Copilot to
name a few) is only allowed to assist in your own learning of
theoretical concepts and may not be used in a direct manner
to complete the assignments in this course. In other words,
you may not use a generative AI tool to write any code for you. If you do ask one of these tools a theoretical question while
working on the labs, please include the following in your
HTML
lab report: (1) cite which tool you used, (2) the
prompt you entered and (3) the response you received.