UTİ 518 - Computer Graphics and Game Programming

Spring 2024


Course Description
[Caustic rendering by Chaos]
[Super Mario Run by Unity]
[BRDF Representation by Kurt]
[Siren by Unreal Engine]

This course focuses on advanced computational techniques in two-dimensional (2D) and three-dimensional (3D) computer graphics and game programming. Topics covered include 2D and 3D transformations, rasterization based interactive 2D and 3D graphics, shading and reflectance models, texture mapping, geometric modeling using Bézier and B-Spline curves, ray tracing, animation, game programming and advanced software tools. There will be an emphasis on both the mathematical and geometric aspects of graphics and game programming, as well as the ability to write fully functional 2D and 3D graphics programs and games. In this course, the students will learn fundamental algorithms and techniques and gain the knowledge necessary to understand and augment the latest innovations in computer graphics and game programming.

Pre-requisites for the course:
C, C++ or C# programming knowledge is required. Algorithms and data structures (pointers, lists, and memory allocation) will be used extensively.
Basic linear algebra, geometry, and calculus are also needed.


Instructor's Announcement

Welcome to the UTİ 518, Computer Graphics and Game Programming! In this course, you will learn advanced computational techniques in computer graphics and game programming. It is a project-based course in which students learn about and implement various methods in modeling, animation, game programming and rendering techniques. The course covers a range of topics in computer graphics and game programming, instead of providing a deep and highly detailed analysis of a particular topic.

We are also aware that not all the students are clear what this course is about. Mostly, there's confusion between this Computer Graphics and Game Programming course and other Computer Vision courses. We suggest that you read the syllabus below, to find whether this is the course that you are looking for. Basically, this course does not involve any "guesses", so it is not related to Machine Learning and Data Science. It is about understanding the mechanics that the real world and the computers generate and represent visual information. This course teaches how to use tools to create 3D scenes and games, and it will also tell you the science behind these tools to make animations, games and movies.

The EgeDers page for the course will be primarily used for assignment submissions, project submissions, announcements, and online discussions. If you are enrolled, you can find the Microsoft Teams links, lecture recordings, course slides, supplemenral course materials, and internal WhatsApp discussion group on our internal EgeDers page.


Instructor

Murat Kurt
Email: murat.kurt@ege.edu.tr
Office hour: Fridays 2:00 PM - 3:00 PM (GMT+3), Office 220, International Computer Institute Building


Teaching Assistant

Zehra Nur Özbay
Email: zehra.nur.ozbay@ege.edu.tr
Office hour: TBA

Please send an e-mail ahead of time if you would like to attend these office hours.


Time and Locations

Lectures:
Fridays
6:00 PM - 9:00 PM (GMT+3), International Computer Institute Seminar Hall

Note: The lectures will be in person, and they will not be recorded. Some of the lectures may be conducted via Microsoft Teams, and we may need to switch from in person to Microsoft Teams lectures on short notice. Check our internal EgeDers page for all the Microsoft Teams links.


Books Recommended

Donald Hearn, Pauline Baker, and Warren Carithers, "Computer Graphics with Open GL", 3rd or later edition. (The one of the main textbooks of the course)
Joe Hocking, "Unity in Action: Multiplatform game development in C#", 2nd or later edition. (The one of the main textbooks of the course)

Optional references:
Steve Marschner, and Peter Shirley, "Fundamentals of Computer Graphics", 3rd or later edition. (Recommended as "Reading" of each lecture)
Tomas Akenine-Möller et al., "Real-Time Rendering", 3rd or later edition. (Recommended as "Reading" of each lecture)

In addition to the main textbooks of the course, the lecture slides and supplemental course materials will also be your main references. Other related reading materials will be available to access from our internal EgeDers page before lectures.


Assignments and Grading

There will be four or five programming assignments in this course. All assignments must be written in C, C++ or C# using OpenGL and GLUT libraries. No prior knowledge of OpenGL is required for this course, as you will learn it during the semester. Besides, we provide code skeleton for each assignment to get started smoothly. The program source code will be read. Source code documentation and organization should make your programs easy to read and convey your understanding of the implemented functions. Poor documentation and programming style will result in a lower score. More detailed instructions regarding required documentation will be provided with each assignment. The assignments will require implementation of many of the following computer graphics processes: line and triangle rasterization and drawing, 3D transformations, clipping and depth culling, splines and surfaces, lighting and texture mapping. Use of advanced professional software tools (MeshLab, Blender, Shadertoy, Unity, Unreal Engine) will also be explored.

All assignments are due by 11:59 PM (GMT+3) on the dates specified. You should plan ahead. Each late day will cause a 2% off the final score of the corresponding assignment. We will use our internal EgeDers page for submissions. Detailed submission guidelines will be in the assignment descriptions.

You will work on the assignments individually. The total of all assignments takes 55% of your final grade.

There will be one final project of this course. You will be working on this project individually, and the topic of the project can be arbitrarily selected from all the topics covered in this course (detail TBA as the quarter proceeds). Group projects are not permitted. Therefore, each student must write their own code. Collaboration between students is encouraged, but code sharing is not permitted. External libraries and source code can be used only for additional functionalities that are not core parts of the projects, and they should be clearly indicated in comments within the source code. The final project takes 40% of your final grade. All project submissions are handled through our internal EgeDers page.

In summary, final grades are based on four or five programming assignments (55%), a final programming project (40%), and course participation (5%). Throughout the semester, there will ample opportunities for extra credit and student participation.


Grading Scheme
Grading Component Percentage
Participation 5%
Programming Assignments Reports ×4~5 20%
Programming Assignments ×4~535%
Final Project Proposal 5%
Final Project Report5%
Final Project Presentation5%
Final Project25%
TOTAL100%

Course Syllabus

The following topics will be presented during the semester lectures. This is only a rough outline of the schedule and entire topics may be added or removed. Our internal EgeDers page will document the lecture schedule and provide access to the slides and the videos used for each lecture.

Week Date Topics Reading Slides Videos Assignment
1 February 16 Introduction to Advanced Computer Graphics Chapter 1, 2 [Slides] [Video]
2 February 23 Mathematics for Computer Graphics Appendix A, Immersive Math [Slides] [Video]
3 March 1 Introduction to OpenGL Chapter 3 [Slides] [Video]
4 March 8 Graphics Output Primitives Chapter 4, 5, 6, 19 [Slides] [Video]
5 March 15 Geometric Transformations Chapter 7, 9 [Slides] [Video]
6 March 22 Two Dimensional Viewing Chapter 8 [Slides] [Video]
7 March 29 Three Dimensional Viewing Chapter 10 [Slides] [Video]
8 April 5 Illumination Models Chapter 17 [Slides] [Video]
9 April 12 Buffers and Mappings Chapter 18 [Slides] [Video]
10 April 19 Three Dimensional Object Representations Chapter 13, 14, 15 [Slides] [Video]
11 April 26 Visible Surface Detection Chapter 16 [Slides] [Video]
12 May 3 Computer Animation Chapter 12 [Slides] [Video]
May 3 Making Movies Chapter 12 [Slides] [Video]
13 May 10 Global Illumination Algorithms Chapter 21 [Slides] [Video]
14 May 17 Game Programming with Unity (Part1) [Joe Hocking] [Slides] [Video]
15 May 24 Game Programming with Unity (Part2) [Joe Hocking] [Slides] [Video]

Programming and Collaboration Policy

Programming assignments and final projects are to be implemented individually from scratch. That is, you should not derive solutions from existing sources or previous instances of this course (including previous postings from the online course, at other universities etc.). Discussion of programming assignments and final projects is allowed and encouraged, but copying of solutions or code from other students, or from students who previously took this course in any university or online setting is not allowed. If you do obtain substantial help from the instructor, teaching assistant/tutor or another student, you must document this in your program. Furthermore, you should in general not copy code from other sources. If in doubt, please ask. Further specifics are given in the assignment specifications.

To repeat, you may not copy solutions or code from other students, or students who previously took this or a similar class at a university or online. You must clearly declare any code and ideas that came directly from others, as opposed to what you created yourself. If you fail to do so, we can only assume you are presenting your own work. Of course, presenting other people's work as your own is academic dishonesty. Students who engage in dishonest activities, with an intent to alter their grade, will receive an FF for the course and be reported to the University for further action. Note that you will also be held liable for publicly posting your code on Github or other public websites, if another student subsequently copies from it.