CS 476: Computer Graphics
Ursinus College, Fall 2020
Instructor: Christopher J. Tralie
Course Evolving: Site Last Updated 12/15/2020
Table Of Contents
Overview
Class Times / Locations
- Virtual Synchronous Meetings: Monday/Wednesday/Friday, 2:30PM - 3:20PM on Zoom
Virtual Office Hours
-
Monday 10AM - 11AM
-
Wednesday 11AM - 12PM
-
Wednesday 4PM - 5PM
-
Thursday 10:30AM - 11:30AM
-
Friday 5PM - 6PM
Prerequisites/Requirements
Students are expected to have taken either CS 274: Computer Architecture or CS 275: Software engineering. This is to ensure that students have enough experience with programming and debugging medium to large scale programs. Math 235: Linear Algebra is also officially listed as a prerequisite, but it may be taken concurrently as a co-requisite. We will only need the beginning parts of linear algebra in this particular course. My hope is that the course will also give students a reason to care about linear algebra and vector calculus more in their own right!
Remote Instruction
This course will be conducted remotely. Please review to the logistics section for more info. In spite of this boundary, I will make every effort to make sure you feel welcome and valued, that we can still build a community, and that you get all of the help you need (this is part of the reason we are using so many different technologies).
NOTE: I will repeat the same announcements across e-mail and Discord, so you don't have to check all both for announcements.
Instructor
I grew up right around the corner in the Montgomery County and attended Upper Dublin High school (class of 2007). I then did my undergraduate degree in Electrical Engineering at Princeton University and my master's and Ph.D. degrees in Electrical And Computer Engineering at Duke University (heavily studying math and CS along the way). I finally started my dream job at Ursinus College in Fall of 2019! You can read more about my interests on my professional web site. Looking forward to getting to know everyone as we work through this course together!
Course Description
Computer graphics is the study and use of computer algorithms to simulate what humans see in the natural world, or to procedurally generate visual art. In essence, computer graphics is an attempt to teach a computer broadly how to do the job of a visual artist (and beyond!). For the purposes of this course, a broad taxonomy of computer graphics is three-fold:
- Rendering, or the generation of images of virtual worlds (including photorealistic images or chosen artistic aesthetic, such as Pixar movies)
- 3D Shape representation and manipulation, or geometric data structures and algorithms to enable efficient and intuitive design of 2D surfaces and 3D volumes in 3D space
- 3D Animation, or the modeling of dynamics in scenes over time, often simulating aspects of physics in our natural world.
This hands on capstone course will be a breadth-first introduction to the world of 3D computer graphics. Rather than teaching the user interfaces of tools such as Blender and Maya, which are commonly used in video game design and movies, and which might be taught in a 3D design curriculum, we instead focus on the technologies themselves behind these programs. As such, the course will have a more mathematical and algorithmic focus. In particular, students will write code to implement vanilla tools from the ground up to design 3D scenes, to perform 3D rendering, to design and manipulate 3D shapes, and to help automate certain aspects of 3D animation, among other things. The course will culminate in a final project related to the digital humanities.
Learning Goals
- Learn the unique issues that arise when implementing mathematical concepts in code.
- Develop creative strategies to debug programs using visual output.
- Articulate the way mathematics, physics, and computer science work together in an application.
Learning Objectives
- Learn to write interoperable code at the interface of multiple, heterogenous languages (particularly the interaction of Javascript with GLSL). This is a very important skill for a professional software developer, since different languages have different strengths, and you will often need to combine them to leverage their joint strengths.
- "Reflect" on how humans see, and compare the tradeoffs made by different algorithms that try to simulate this process virtually.
- Develop fluency with more complicated, object-oriented data structures, such as the half-edge data structure for triangle meshes.
Technology Logistics
Since we will be working remotely, there are an array of technologies we will be using in concert to stay in touch. Unfortunately, there's just not a one stop shop for anything technological these days (much like there isn't one programming language that's appropriate for all tasks, as you will see in this class...).
Below is a table summarizing what kinds of communications/activities occur via each technology, and below that there are more details on everything. This is admittedly complex, and it will take some getting used to, but it will be worth it once we get it nailed down.
Class web site |
|
|
|
Canvas |
|
Zoom |
|
Microsoft Teams |
|
Discord |
|
Canvas
We will be using Canvas, but only to submit assignments and to store all of the grades. I will also keep all of the due dates current on the calendar there, as students have appreciated this common space for all of their classes in the past.
Zoom / Pre-Class Modules
Ursinus now has a professional license for Zoom. Due to COVID-19, we will be meeting over Zoom during regular class time. The class will be setup so that you complete online modules before class on your own time (click here for an example from last spring in CS 173). This will be more active than simply reading a textbook, and you will get direct feedback as you're learning and writing code directly in the web browser. Then, during class time, we will meet on Zoom in synchronous, virtual sessions (the main reason we're using Zoom instead of Teams for class is because of its breakout room functionality.). Attendance at the virtual class meetings is required, and attendance will be recorded. We will do the following activities during class:
- At the beginning of each session, students will have an opportunity to ask questions on the pre-class modules
- During most classes, students will work together in groups in virtual break-out rooms on slightly more challenging problems than the modules to hone skills for the assignments.
- We will also reserve some of the class sessions for working on assignments so that students have a chance to get a head start to ask me questions.
- Occasionally, we will do "code roundups" in class, where we examine the good, bad, and the ugly of code that students wrote. These are excellent opportunities for us to grow together as we learn how to write great, clean, and maintainable code.
Discord
To facilitate informal, class-wide discussions about the class, we will have a Discord channel. My goal is for this to turn into a flourishing area to work through confusion and to share ideas as a group. All questions are welcome!
- Click here to signup for the general discussion channel for assignments, software issues, etc.
Please do not send me direct messages or anything of a sensitive nature over Discord. Instead, use Microsoft Teams or e-mail for that, since those transactions are locked down better under Ursinus control.
Microsoft Teams
For office hours, for one on one direct messages with me, and for buddy group coding with screen sharing, we will be using Microsoft Teams, which is linked to your Office suite through Ursinus, so you are automatically enrolled. This is an easy platform for students to initiate video sharing, so I highly recommend it for group work.
Readings
There will be no official textbook for the course. Instead, I will be teaching you with pre-class modules, and I will sometimes link to supplementary resources from the schedule.
Homework
Assignments
The bulk of the grade in the course will be earned by completing roughly 4 small scale individual programming assignments, and a two large scale programming assignments. Be sure to start them early! Note that collaboration and sharing rules differ slightly between the individual assignments and the large assignments.
Programming Languages
Javascript
Most assignments will be written in Javascript, but no assumption will be made about prior Javascript knowledge! Those who can write code in any one of Java, C++, or Python can quickly learn the differences (it has syntax like Java but the typing/runtime/flexibility of Python). There are three main reasons for using Javascript in the course:
- It is widely used in modern web programming, so it will be useful in many projects beyond this course
- It requires no special software to run, and it works in the browser. As a result, it makes it easy to develop on nearly any computer, and it allows students to share their work online
- Since it runs in the browser, user interfaces are easy to design for the assignments
- People on the more mathematical side get to learn powerful web graphics programming techniques for communicating their ideas in the future with live demos on their web sites, rather than static images
GLSL
Students will also make use of the OpenGL Shading Language (GLSL), which has syntax and programming paradigms similar to C, but which is designed for the massively parallel hardware of the GPU. We will have a mini assignment early on in the course so that students can practice with this language before it is used in the ray tracer assignment. In sum, the language is a bit idiosyncratic, but it is used heavily in industry, and it's possible to do incredible things with it.
A word on patience and debugging
If you're taking this course, then you've certainly had experience with debugging, but it is a skill you will still need to work on, so you should expect to hit some roadblocks. In fact, it is time consuming and difficult even for very experienced programmers. So do not be hard on yourself if your programs don't work the first time around (they rarely do, even if you've been programming for decades!). But be sure you leave yourself adequate time to work on the assignments, because the amount of time it takes to resolve issues can be unpredictable. Debugging will be particularly painful in GLSL, so expect that...
Inevitably, you will fall into this trap. So don't beat yourself up too much when you do...but do listen to the advice!
Me: I'm stuck on a bug. What do I do
— Madison Kanna (@Madisonkanna) January 17, 2020
Other developers: Take a break. Walk away. Go outside. Sleep on it and come back to it the next day.
Me: *Sits at desk obsessing over bug until 2AM*
Grading
I am not a fan of grades, but for now, this is an established mechanism for me to hold students accountable and to push them to do things they sometimes don't like but will make them better at the subject. I am also not a fan of exams, so most of the work will be assignment-based, where students will have multiple days to complete the work, and where students can collaborate with others on the most difficult large scale assignments. This also models the working world of software much better. For that reason, the midterm "exam" will also be a takehome individual programming assignment.
Breakdown
Pre-Class Modules | 10% |
Programming Assignments | 65% |
Final Project | 15% |
Midterm Exam | 5% |
Class Participation | 5% |
Flexible Submission Policy
In the absence of accommodations or communication with me, all assignments are due at 11:59PM EST on the date(s) stated on the schedule. Students can turn in those assignments past the deadlines, and the scores will be adjusted as follows:
- -5% for work submitted between 1 minute - 6 hours late
- -10% for work submitted up to 12 hours late
- -15% for work submitted up to 24 hours late
- -25% for work submitted up to 48 hours late
- -40% for work submitted up to 96 hours late
- -50% for work submitted more than 96 hours late
Letter Grades
Letter grades will be assigned on the scale below at the end of the course.
|
|
|
|
|
Classroom Environment
Inclusive Environment
Computer science is a field that has historically been and continues to be steeped in inequalities. We will do our best to put the topics we're working on into the appropriate historical context, and to address broader societal issues that are related to the code that we write. We will strive to do better in our course, with an honest look at where we have been in the field. To that end, my goal is to foster a environment in which students across all axes of diversity feel welcome and valued, both by me and by their peers. Axes of diversity include, but are not limited to, age, background, beliefs, race, ethnicity, gender/gender identity/gender expression (please feel free to tell me in person or over e-mail which pronouns I should use), national origin, religious affiliation, and sexual orientation. Discrimination of any form will not be tolerated.
. Furthermore, I want all students to feel comfortable expressing their opinions or confusion at any point in the course, as long as they do so respectfully. As I will stress over and over, being confused is an important part of the process of learning computer science. Learning computer science and struggling to grow is not always comfortable, but I want it to feel safe. In other words, I will regularly keep you at the boundary of your comfort zone with challenging, real-world assignments, but I want you to feel comfortable with me and your peers and respected as a learner during the process.
Finally, I am aware that, particularly during the pandemic, there are a variety of factors that may make it difficult to perform at your best level in class. At Ursinus, we are fortunate to have quite a mix of students from different backgrounds, many of whom need to work part time, and an increasing number of whom are commuters and have family obligations. If you find yourself having difficulty performing at the level that you want and/or turning assignments in on time because of any of these issues, please communicate with me, and we can come up with a solution together (I will gently reach out if I notice any slips even if you don't communicate). This is a very fun capstone course for the CS major, and I want to work to keep your excitement alive, regardless of your personal circumstances. You belong in CS!
Participation
Overall Participation Score / Classroom Etiquette
Students are expected to attend the Zoom sessions during class time with their camera on, and they will be graded for attendance.- Points will be evenly divided among all classes.
- Students with an unexcused absence from a class will lose all points for that class.
- It is imperative that students show up on time, because important announcements may happen at the beginning of every class.
Maximizing Your Communal Experience
Here are ways students can maximize their experience as a class community, and which could lead to extra credit in certain situations.
- Helping to teach a student a topic during office hours.
- Certain calls for participation in class
- Particularly helpful or insightful messages on Discord
- Finding mistakes in the book or on the assigned homework
Microsoft Teams / Discord Communication Policy
Since this is a class-wide communication, the following rules apply to online communication- Students are expected to be respectful and mindful of the classroom environment and inclusivity standards. They are equally applicable to a virtual environment as they are in class.
- Students are not permitted to publicly share direct answers or questions which might completely give away answers to any homework problems. When in doubt, please send me a direct message on Microsoft Teams.
- I will attempt to answer questions real time during my virtual office hours. Otherwise, I will make every attempt to respond within 24 hours on weekdays, at any time before 9PM. I cannot be expected to respond at all on Saturdays or Sundays, so please plan accordingly. (Of course, students can and should still respond to each other outside of these intervals, when appropriate).
The points above are part of a more general term referred to as "netiquette." Please refer to the chart below, provided by Touro College
Collaboration Policy
Overall Philosophy
The collaboration policy for this class walks the line between encouraging openness and collaboration during a challenging learning process, while also making sure that each students is progressing technically at an individual level without relying on 100% on other classmates. Communication between students is allowed (and encouraged!) on most assignments, but it is expected that every student's code or writeups will be completely distinct. Please do not copy code off of the Internet. Please cite any sources in addition to materials linked from the course website that you used to help in crafting your code and completing the assignment.
Assignment Buddies
To encourage collaboration, students will be allowed to choose one or more "buddies" to work "near" during most of the assignments. Students are still expected to submit their own solutions, but they are allowed to provide substantial help to each other, and even to look at each others' code during the process. Students should indicate their buddies in the README upon assignment submission. Please let me know if you would like a buddy but are having trouble finding one.
Individual Assignments
There will be a few assignments that students are expected to complete on their own with no communication with anyone but me. They will be limited in number, but this will be just to make sure every individual students is progressing technically. You can think of them like an open-ended, open-book take-home quiz where you can ask me questions.
Collaboration Scenarios Table
Below is a table spelling out in more detail when and how you are allowed to share code with people (table style cribbed from Princeton CS 126).
Click on each button below to view the collaboration parameters for each scenario.
Assignment Collaboration Grid
YOUR BUDDY |
COURSE STAFF |
CS 174 GRADS |
CLASS- MATES |
OTHER PEOPLE |
|
---|---|---|---|---|---|
DISCUSS CONCEPTS WITH: | ✔ | ✔ | ✔ | ✔ | ✔ |
ACKNOWLEDGE COLLABORATION WITH: | ✔ | ✔ | ✔ | ✔ | ✔ |
EXPOSE YOUR CODE/SOLUTIONS TO: | ✔ | ✔ | ✔ | ✘ | ✘ |
VIEW THE CODE/SOLUTIONS OF: | ✔ | * | ✘ | ✘ | ✘ |
COPY CODE/SOLUTIONS FROM: | ✘ | * | ✘ | ✘ | ✘ |
Individual Collaboration Grid
YOUR BUDDY |
COURSE STAFF |
CS 174 GRADS |
CLASS- MATES |
OTHER PEOPLE |
|
---|---|---|---|---|---|
DISCUSS CONCEPTS WITH: | N/A | ✔ | ✘ | ✘ | ✘ |
ACKNOWLEDGE COLLABORATION WITH: | N/A | ✔ | ✘ | ✘ | ✘ |
EXPOSE YOUR CODE/SOLUTIONS TO: | N/A | ✔ | ✘ | ✘ | ✘ |
VIEW THE CODE/SOLUTIONS OF: | N/A | * | ✘ | ✘ | ✘ |
COPY CODE/SOLUTIONS FROM: | N/A | * | ✘ | ✘ | ✘ |
* You may view and copy code from class exercises and class resources without citing them, but you should not copy solutions from previous semesters that the instructor may have provided
NOTE: The terms "exposing" and "viewing" exclude sending or ingesting electronically, which would be considered copying. Exposing and viewing are normally done in the context of in-person working or in the help room. Since we are working remotely, what this means is that buddies can screen share as they are working through things, but they should not send code directly.
NOTE ALSO: "Other people" includes internet sources.
If the collaboration policy has been violated in any way, regardless of intent, then it may be an academic dishonesty case, and it will be referred to the Associate Dean for Academic Affairs. I am required to make this report in every occurrence, so it is best to speak with me first if there are any questions about the policy or expectations. You should feel free to have these conversations with me anytime prior to making your submission without fear of penalty.
Other Resources / Policies
Accommodations
In addition to our general awareness diversity, Ursinus College is also committed to providing reasonable accommodations to students with disabilities. Students with a disability should contact the Directory of Disability Services ASAP. Dolly Singley is located in the Center for Academic Support in the lower level of Myrin Library. Please visit this link for more information on the process. I will do my best to accommodate your requests, and they will be kept completely confidential.
Let's Talk
Mental health care is increasingly recognized as a crucial service for the undergraduate population. To decrease the barrier for entry, Ursinus college will be providing additional drop-in hours during the semester. Please refer to the flyer below for the awesome program. If you are still hesitant to go, take me (Professor Tralie) as an example of someone who has benefited from talk therapy in the past. I am happy to discuss this in office hours in more detail.
Title IX
Title IX is a federal law, under which it is prohibited to discriminate on the basis of gender. The Title IX Coordinator is available to receive inquiries and to investigate allegations in this regard.
Inclement Weather Policy
This is mostly a moot point since the class will run online, but in the even that weather or other events impact connectivity during our synchronous meetings, we may have to reschedule or to switch to asynchronous activities in the interim. Regardless, we will be sure to cover all of the material; we will simply adapt the delivery mechanism as needed.
Influences / Related Courses
Below is a non-exhaustive list of similar courses that have run other colleges and universities. None of them are exactly the same as this one, but they are all excellent resources and are worth a look, time permitting. Keep in mind that CS 476 is an undergraduate course that goes over advanced topics at an introductory level, so some of these links are to graduate courses with followup material that is quite advanced
- https://brynmawr-cs312-2021.github.io/website/
- https://www.cs.brynmawr.edu/cs312/
- http://www.ctralie.com/Teaching/COMPSCI290/
- https://canvas.dartmouth.edu/courses/30008
- http://www.cs.princeton.edu/courses/archive/spring19/cos426/
- http://graphics.stanford.edu/courses/cs468-12-spring/
- http://www.cs.columbia.edu/~keenan/Projects/DGPDEC/
- http://www.cs.princeton.edu/courses/archive/fall14/cos526/index.php
- http://www.hao-li.com/Hao_Li/Hao_Li_-_teaching_%5BCSCI_599__Digital_Geometry_Processing_SS_2014%5D.html
- http://www.cs.berkeley.edu/~jrs/mesh/
- http://www2.cs.uh.edu/~chengu/Teaching/Spring2013/Analysis_Spring2013.html
- http://www-bcf.usc.edu/~jbarbic/cs520-s15/
- http://resources.mpi-inf.mpg.de/departments/d4/teaching/ss2012/geomod/
- https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/notes.html