Course Evolving: Site Last Updated 10/14/2019
Class Time / Location
- Monday/Wednesday 1:30PM - 2:45PM Pfahler Hall, Room 012
Office Hours (in Pfahler 101J)
- 10:00-11:00 AM Monday
- 1:30PM-2:30PM, Tuesday/Thursday
- 2:50-4:00PM Wednesday
- 8:00PM - 9:00PM Monday/Wednesday on Microsoft Teams
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. 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 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 in which students prototype their own video game ideas.
The only strict prerequisite is 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!
- Learn the unique issues that arise when implementing mathematical concepts in code.
- Develop creative strategies to debug programs using visual output.
- "Reflect" on how humans see, and compare the tradeoffs made by different algorithms that try to simulate this process virtually.
- Be able to articulate the way mathematics, physics, and computer science work together in an application.
- Practice working in groups to divide up complicated tasks.
- (Final Project): Learn how to appropriately scope an open ended project under a limited timeframe and to make small, consistent steps towards your goal.
Canvas / Microsoft Teams
We will be using Canvas, but only to submit assignments and to store all of the grades.
Microsoft Teams Communication PolicySince this is a class-wide communication, the following rules apply to Microsoft Teams
- 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 share direct answers or questions which might completely give away answers to any homework problems or labs publicly on Microsoft Teams. When in doubt, please send me a direct message there.
- 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. This could be an opportunity to earn raffle points!).
The official textbook for this course is
- Shirley, Peter, Ashikhmin, Michael, Marschner, Steve. Fundamentals of Computer Graphics, 3rd Edition. A K Peters/CRC Press, 2009.
NOTE: The penultimate third edition of this book was chosen to alleviate costs on the student. There are used copies available for under $20 on ebay and Amazon.
- 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
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.
As this is an upper level CS course, the grading will be heavily based on programming assignments that explore the topics we go over in class. There will be a short midterm to cover important topics including and in addition to what's covered in the programming assignments. The grading breakdown is below
Letter grades will be assigned on the scale below at the end of the course. "Grade grubbing" will not be tolerated. On my end, every assignment has or will have very precise expectations and point breakdowns. I will also return assignments in a timely manner, and the running weighted grades will be updated on Canvas. Therefore, I expect a commensurate level of respect from you. In sum, you should know where you stand at all times, and there should be no surprises.
Classroom ParticipationThough much time will be spent on lecturing, this course will be more interactive than usual for an engineering/computer science course. The goal is to get everyone involved in their learning real time as much as possible.
If a few students are participating disproportionately, I reserve the right to use a wheel of fortune app to randomly call on people from the roster.
In addition to ordinary participation that follows the natural rhythm of a lecture, most days there will be at least one "raffle point problem," which is a question that follows on the heels of newly presented material. Students will split into groups of 2-3 and try to work through the problems together. When a group of students believe they have figured out the answer, they raise their hand. The other students can continue to work while I verify that the answer is correct. If the answer is correct, the students present the answer to the class. At that point, each student in the group receives a raffle point (please visit the raffle tab under the menu for more information on raffle points). If the group is not correct upon my checking, then the groups continue this process until one gets it correct, and then the competition is over.
I reserve the right to shuffle seats at the beginning of class so that different students work together
Overall Participation Score / Classroom Etiquette75% of the score will factor in classroom attendance, and 25% of the score will factor in final project feedback to other groups, as explained on the final project page. For classroom attendance, the following rules apply
- 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 happen at the beginning of every class. Therefore, any student who shows up after the lecture has started will lose half of the points for that class.
- Please be attentive during class. The use of laptops and other electronic devices is not permitted unless you are instructed to use them or are using them to take notes. There will be class exercises that involve coding, but lecture time should be used for learning graphics and mathematics. If I have to ask you more than once in a single lecture to cease use of your electronic device, it will count for a half absence for the day. Alternatively, please try to think of this as a safe space away from social media. We could all use a break, and we are fortunate to have a good excuse to make that space.
- Please follow common courtesy. For instance, you can bring food and drink as long as it's not distracting, but please clean up after yourself if you do. Our janitorial staff deserves the utmost respect and help with their job.
Classroom Environment / Accommodations
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. Therefore, I will not tolerate any form of put-downs by one student towards another about their confusion or progress in the class.
Ursinus College is committed to providing reasonable accommodations to students with disabilities. Students with a disability should contact the Directory of Disability Services, Shammah Bermudez, ASAP. Mr. Bermudez 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.
schedule. Students will lose points at the following rate (unless an excuse from the dean is provided):
- -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
Collaboration And Cheating Policy
Communication between students is allowed (and encouraged!), but it is expected that every student's code or writeups will be completely distinct! Please do not copy code off of the Internet (repurposing code from the Internet will probably make it harder anyway because the assignments are so specialized). Please cite any sources in addition to the textbook and course website that you used to help in crafting your code and completing the assignment.
After mini assignment 2, as the difficulty starts to ramp up, students will be allowed to choose one or more "buddies" to work "near" during the assignment. 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.
I will try to hold a few "hackathons" (extended office hours) throughout the semester to provide additional help with particularly difficult assignments (ray tracing, mesh processing) and with the final projects. I want everyone to succeed, so there will be no reason to cheat!
In the unfortunate and disappointing event that I do suspect cheating, I will confront the individual on the first offense. If there is enough evidence, a score of -100% will be given on that assignment. For second and subsequent offenses, I will report the offense to Dean Sorensen.
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