Syllabus
- Course Overview
- Learning Objectives
- Prerequisites
- Course Structure and Modality
- COVID-19 Policies
- Textbook
- Assignments
- Quizzes
- Grading
- Flexible Late Policy
- Wait List Policy
- Standard Policies
- Academic Integrity
- Inclusive Conduct
- Mental Health Information
- Disability Information
Course Overview
Computer graphics is an exciting field within computer science that has seen dramatic recent growth. The impact of graphics on our culture and on our daily lives is far-reaching, as we can see through applications in art, design, education, games, movies, science, and medicine. This course covers the tools and techniques used today for programming games and other interactive computer graphics applications. Some of the core concepts covered include: interactive 2D/3D graphics, physical simulation, polygonal modeling, texture mapping, character animation, illumination models, shader programming, and ray casting. This is a programming-heavy course, and assignments will be implemented in TypeScript using a high-level graphics toolkit built on top of WebGL.
Learning Objectives
In this course, you will learn to:
- Understand basic concepts and algorithms relevant to computer graphics programming.
- Identify, define, and solve involving 2D and 3D computer graphics.
- Implement real-time computer graphics using a high-level scene graph library.
- Write shader programs that run on the graphics processing unit (GPU).
- Implement user interfaces for interacting with 3D graphics applications.
Prerequisites
The prerequisite for the course is CSCI 2021. Please contact me if you have any questions about whether the course is a good fit for your interests and background.
Course Structure and Modality
The course is divided into six modules, each of which lasts two weeks. Generally, I will start each module with a class on graphics concepts, math, and techniques. These classes will generally follow a standard lecture format, but may also involve some in-class activities and discussion. The lectures on conceptual material will be complemented with live programming sessions with me, which will typically during the second class of the module. On these days, feel free to bring your laptops to class to follow along in real-time. Note that writing code during class is optional; you can also just watch and take notes. The live programming sessions have been very popular with students in the past, and gives me the opportunity to show you an expert in computer graphics goes about programming and problem solving. This is a great way to learn not only about graphics, but also about debugging, TypeScript syntax, and how to break a programming project into small steps.
During the second week of each module, we will often have a second lecture on more advanced concepts, followed by another live programming class. However, the exact schedule may vary based on the content we need to cover. You can check the course schedule page for the most up-to-date information about upcoming classes.
I intend to hold all class sessions in-person. The class will not be live streamed except if situational factors arise, such as personal illness, in which case the class may be held synchronously via Zoom. However, I recognize that in-person attendance is not always possible or practical. Furthermore, many students have given me positive feedback about having access to lecture recordings when working on assignments. Therefore, all classes will be recorded, and the videos will be made available on the course website. Note that you do not need to contact me in advance if you have to miss a class; just make sure to watch the video as soon as you can, so you don’t fall behind.
COVID-19 Policies
You should stay at home if you experience any signs of illness or have a positive COVID-19 test result. If this occurs, please consult with your healthcare provider about an appropriate course of action. I will follow these same protocols and will let you know if the delivery of this course has to be temporarily changed as the result of my own circumstances. Absences related to illness, including COVID-19 symptoms, for yourself or your dependents, are legitimate excused absences.
Vaccines: COVID-19 Vaccinations (or approved exemptions) are required for all students and employees. Learn about vaccine and booster appointments on campus by visiting the Get the Vax page.
Testing: Information on testing is available on MTest webpage.
Face Coverings: The University expects all community members to respect those who choose to wear a mask, as well as those who choose not to wear one. I do not intend to wear a mask in class myself, and I fully support your individual choices around masking. Indoor masking continues to be an important tool in high risk situations. High-quality masks (N-95 or certified KN-95) will be available to students Fall 2022. Note that these policies are subject to change, and up-to-date information is available on the Safe Campus page.
Textbook
Real-Time Rendering: Fourth Edition is the required textbook for this course. You can purchase it through the University bookstore, although you may find lower-cost alternatives through online retailers. If you are interested in renting a digital copy of the textbook, Amazon appears to have the lowest price at the time of writing this syllabus.
Assignments and Quizzes
There will be a total of six programming assignments in this class. Although they are challenging, they are also the most exciting and rewarding aspect of the course (and your chance to impress your friends with some cool 3D graphics). Your goal in these assignments should be to come away with a great practical understanding of how to tackle new computer graphics programming challenges using the modern programming toolkits.
Each assignment will be introduced at the beginning of a two-week module. At the end of the first week, you will complete the Quiz. This will review the key mathematical or algorithmic concepts in the assignment. Quizzes will be administered online and are open book. They will need to be completed before the deadline, but they otherwise have no time limit, and you have flexibility in choosing when to take it. Note that the quizzes are designed to get you thinking about the assignment early, so it is generally a good idea to complete them before starting work on the program.
At the end of the second week, you will submit the Program. If you struggled with the quiz, then seek help from TAs as needed, and make sure that you understand the key concepts first. At a minimum, your goal should be to have a full understanding of the concepts and how you will solve the programming portion by the end of the first week. This way, you will be sure to have at least one full week to implement and debug the program.
Exams
The quizzes and programming assignments are the only forms of assessment in this course. There will not be a midterm or final exam.
Grading
Final course grades will be calculated based upon the following percentages.
- Programs - 60%
- Quizzes - 40%
The grading in this course is on an absolute scale. This means that the performance of others in the class will not affect your grade. Letter grades will be assigned using the following scale:
- A ≥ 93.0%
- A- ≥ 90.0% and < 93.0%
- B+ ≥ 87.0% and < 90.0%
- B ≥ 83.0% and < 87.0%
- B- ≥ 80.0% and < 83.0%
- C+ ≥ 77.0% and < 80.0%
- C ≥ 73.0% and < 77.0%
- C- ≥ 70.0% and < 73.0%
- D+ ≥ 67.0% and < 70.0%
- D ≥ 60.0% and < 67.0%
- F < 60.0%
For S/N grading, a satisfactory grade (S) requires a grade of 70.0% or above.
Flexible Late Policy
This course has a flexible late policy. Each assignment will have a fixed due date, but each of you will be granted 10 late points at the beginning of the semester.
Each late point is worth a 24-hour extension for any programming assignment. You are free to allocate them however you want throughout the course. For example, if you are sick, have a family emergency, or even just a big project due, you could apply all points to that assignment and hand it in 10 days late. Alternatively, you could decide to spread these days around and hand every programming assignment 1-2 days late.
If you have late points remaining, you do not need to contact us for an extension on programming assignments. These extensions are applied automatically with no questions asked. When you submit your code using GitHub, the time is logged by the system. If the submission is late, we will apply an extension in the grading system and deduct the corresponding number of late points.
Your current late points will be visible in Canvas and will be updated when your assignments are graded. Note that you are responsible for keeping track of remaining points if you submitted an assignment late, but it has not been graded yet. If you run out of late points and anticipate further difficulties in completing work on time, then you should contact me to discuss your situation.
Frequently Asked Questions
Do I have to tell you when I want to use my late points?
No, we will apply credit automatically. I understand that things happen, and everyone probably needs a day or two here and there, so just take them automatically if you need them. It’s fine as long as you don’t take so many up front that you fall terribly behind.
Do these apply to the quizzes as well as the programming assignments?
These only apply to the programs. The quizzes are much shorter and worth less than the programming assignments, so you should plan to complete them by the deadline. They can be completed anytime within the first week of the module, so you would need a very convincing justification for an additional extension.
What if I get really sick or something and need an extension beyond this?
That is possible in rare circumstances, but you need to talk with me about this situation. You can expect that the first thing I will ask is: How have you used the late points that I have already given you? That’s quite a lot already, and are more really justified in this case?
Is there a penalty if I run out of late points and submit an assignment after the deadline?
If you use all your late points, we will grade the assignment with a late penalty of 5% for each day it is late.
If I don’t use all my late points by the end of the semester, will I receive bonus points?
No. The late points are meant to increase equity for students that are disadvantaged in this course. If they were redeemable for bonus points, then this would effectively penalize the students who need extensions for legitimate reasons beyond their control. If this seems unfair to you, then please consider this explanation from the National Association of Colleges of Employers: The term “equity” refers to fairness and justice and is distinguished from equality: Whereas equality means providing the same to all, equity means recognizing that we do not all start from the same place and must acknowledge and make adjustments to imbalances.
Wait List Policy
I am aware that this course is in high-demand and there are many students on the wait list. I receive a large number of permission number requests, and unfortunately it is simply not possible to accommodate everyone. Please note that this class is taught every semester. Therefore, as a general policy, I am only issuing permission numbers for graduating seniors in computer science or other students with another convincing justification for taking the class right now. If you believe that this describes your situation, then please feel free to contact me.
Frequently Asked Questions
I am currently on the wait list. Do I need to attend the first day of class?
All lectures will be recorded, so you will be able to watch the videos for any classes you miss if you are admitted late. You do not need to attend the first day of class if you are on the wait list.
What are my chances of getting into this course on the wait list?
The wait list is controlled by the registrar, and I do not have much visibility into how fast it moves. What I can tell you is that historically speaking, this is a popular course, and so the drop rate tends to be fairly low.
What would you consider to be a convincing justification for skipping the wait list?
In addition to graduating seniors, I have issued permission numbers for students that were starting research projects or summer internships involving computer graphics or video games. In these cases, the class provided a direct benefit that would help them be successful, and taking it in a future semester would have been to late for that specific opportunity.
I am not a computer science major, but I would still like to take this course. What are my chances of getting in?
Unfortunately, this is highly unlikely. Many computer science majors have been waiting patiently for multiple semesters for an opportunity to take this course before they graduate. Permission numbers will only be issued for students in other programs in rare circumstances.
Standard Policies
This class follows standard university policies. It’s your responsibility to be familiar with:
- Student conduct code
- Academic dishonesty
- Makeup work for legitimate absences
- Student responsibilities
- Grading and transcripts
- Sexual harassment
- Equity, diversity, equal opportunity, and affirmative action
Academic Integrity
First, please review the Departmental Policy on Academic Dishonesty; this is a little more specific than the university-wide policy above. How this applies to this class specifically:
Collaboration Policy
All work submitted for this course is required to be your original work. You are expected to do your own thinking, your own design, and your own coding. You are encouraged to discuss the content of the lectures and the texts with your peers. With respect to programming assignments, you are also permitted to discuss and make posts about programming in general (e.g., a syntax error you are stuck on, missing include file). However, your communication with others must stop before discussing a solution to the homework or assignment. If you have any question about whether discussing something with peers might go beyond what is permitted, then stop and ask us first for clarification on the policy.
Use of Web and External Resources
The web will be one of your best learning tools and sources of documentation for working with TypeScript and computer graphics toolkits used in the class, but you are not allowed to use web or other external resources to find solutions to the core computer graphics problems in your assignments.
What you can do: You are expected/encouraged to use the web to lookup questions about the APIs used and even to look at example programs written with TypeScript and computer graphics toolkits.
What you cannot do: You are not allowed to search for solutions to assignments. For example, if your assignment is to develop your own texture mapping routine for a sphere, you can lookup the API documentation to learn the right function to call and the right syntax to use to set the texture coordinate for each vertex in a mesh. What you cannot do is google for “texture map a sphere” and find out how to setup a for loop and use cos() and sin() equations to determine the correct texture coordinates for each vertex of the sphere. This is the difference between using the web as a programming toolkit reference vs. using the web as a reference for the computer graphics algorithms/solutions that are being taught in the course. With the exception of the small snippets of code that are found in the official language or API documentation, you should never copy code like a routine, class, object, etc. from a website and include it in an assignment or project.
Third-Party Art Assets
Although it is not required to complete assignments in the course, some students may want to include additional art assets (e.g., 3D models, images, sounds) in their programs. You are permitted to use third-party assets from the web, with the following requirements: (1) the content does not include any code, and (2) the content is cited in a readme file.
Consequences of Academic Dishonesty
Academic dishonesty in this class will result in a 0 on the assignment or exam in question for the first offense, and an automatic F in the class for the second offense. All cases of academic dishonesty are required to be reported to the University Office for Community Standards.
Inclusive Conduct
At this point in your careers, I trust you are already aware that computing as a field has a huge problem with a lack of diversity. At all levels, there is an underrepresentation of populations, including women, African Americans, Hispanics, American Indians, Alaska Natives, Native Hawaiians, Native Pacific Islanders, and persons with disabilities. I want to make sure you are aware of this because it is a problem, and it is something that you have a responsibility to help change as you continue in this field. One way we will do that in this course is to be sure to use inclusive language and be respectful in all of our interactions, including written and face-to-face communication. If you are in the majority in our field, I want to make a special appeal to you to join me in this line of thinking. Studies show, our interactions with women and other students who belong to groups with longstanding underrepresentation in our field often turn them away. I’m talking about experiences, often in the classroom, that turn students off to the point that they leave computing. This could take many forms, such as:
- An offensive joke by a professor
- Speaking over someone
- Limiting who we “allow” to participate when working on a group activity
- Someone who already has a lot of computing experience from outside of school providing a “know it all” explanation to the class that others can’t even understand making them feel like they don’t belong
- Commonplace daily verbal, behavioral or environmental slights, whether intentional or unintentional, that communicate hostile, derogatory, or negative attitudes toward stigmatized or culturally marginalized groups (microaggressions)
- And many more…
To those who may already feel as though they do not belong here, an experience like this within the classroom can be the thing that makes them switch majors. So, my appeal is to please keep this in the forefront of your minds in this classroom and others, but be especially careful in your computer science courses and eventual workplaces. Bias and rudeness show up in many settings, but these things are seriously damaging in computer science. So my feeling is that we need to resolve to do better than any other discipline on campus. Please join me in that. And, if you find yourself passionate about this, please consider working with the CS-IDEA committee, which you can find out more about on http://csidea.umn.edu.
Mental Health Information
The Department of Computer Science & Engineering strives to ensure all students have access to resources that will help them feel safe and supported. We are deeply committed to the wellbeing of all students, staff, and faculty. Your mental health is part of who you are and if you are unsure where to turn, we are here to help you. If you are encountering challenges, I encourage you to visit our department’s Mental Health Resources website and connect with one of our Mental Health Advocates, who are available to answer questions about campus mental health resources and services.
Disability Information
If you have already been working with the Disability Resource Center and have a letter from them to help direct your instructors on to set you up for success, then please send that to me at the beginning of the semester, and I will make every reasonable effort to make sure this class is a good experience for you.
University policy is to provide, on a flexible and individualized basis, reasonable accommodations to students who have documented disability conditions (e.g., physical, learning, psychiatric, vision, hearing, or systemic) that may affect their ability to participate in course activities or to meet course requirements. Students with disabilities are encouraged to contact the Disability Resource Center to discuss individual needs for accommodations.
Acknowledgments
Aspects of this syllabus (including this statement) were adapted from Nathan Taylor, Daniel Keefe, Blair MacIntyre, Shana Watters, Lana Yarosh, and the American Association of University Professors Joint Statement on Rights and Freedoms of Students, because writing a good syllabus is hard.