EECS 498 : Game Engine Architecture

Upper-Level CS (ULCS) course - Winter Semesters Only

Instructor : Austin Yarger (ayarger@umich.edu - ayarger.com)    -    Course Website : eecs498.com

From early programming education (top-left, MIT Scratch) and film production (top-right, Unreal Engine) to data visualization (bottom-left, Unity) and game development (bottom-right, Godot), game engines have become the foundational, enabling technologies behind many of humanity’s modern endeavors. In this course, you will study game engine internals and develop your very own engine– achieving speed through an efficient C++ core, and accessibility through the hosting of a convenient and user-friendly scripting language (Lua).

Seeking More GameDev / XR Courses?

Motivation / Course Contents        3

Approximate Schedule / Grading        4

Assignments        4

Assignments / Lesson Plans / Lecture Slides (TBD)        5

Grading Scale        6

Prerequisites        6

Required Courses        6

Required Computational Resources        6

Course Book (optional)        7

Workload        8

Graduate Student Advisory        8

Resources        8

Community        8

Health        9

Policies        9

Biweekly Quizzes        9

Midterm Exam        9

Discussion Section        9

Team Work        9

Accommodations        10

Lecture Recording        10

Submission        10

Runtime Performance Penalties        10

Late Assignment Submission        10

Incorrect Submission Format Penalty        11

Penalty Stacking        11

Attendance / Late Arrival        11

Regrades / Grading Disputes        11

Office Hours        12

Extra Credit        12

Respect and Maturity        12

Collaboration / Cheating / Honor Code        12

Staff AutoBios        13

Austin Yarger        13

Jacob Robinson        13

Junwen Yu        14

Discussion        14

Relation to EECS 494 (GameDev) and EECS 440 (XR)        14

I have Extra Time– How May I Prepare for the Course?        14

Free Up Storage Space        14

Obtain Development Tools        15

Play Around with Game Engines        15

Portfolio Website        15

Join Related Organizations        16

Mess around with SDL and other dependencies        16

Pre-Class Playlist        16

Motivation / Course Contents

From film production, data visualization, and national defense to artistic works, extended realities, and of course– digital games– “Game Engines” have become foundational technology for the diverse industries of our modern world, and the primary output of several $10B+ public corporations. While game engine usage is widespread and well-understood, game engine architecture (how they work under the hood) is a significantly less common category of expertise, requiring a strong knowledge of high-performance and user-expressive design patterns in addition to confidence with lower-level programming.

“EECS 498 : Game Engine Architecture” is a programming-intensive Upper-Level CS Elective that empowers students with the knowledge and experience to…

Students will conclude the course with a portfolio-ready, multi-platform, built-from-the-ground-up game engine meeting strict course standards and containing small customizations of their own design.

Approximate Schedule / Grading

Assignments

The approximate value of EECS 498’s assignment groups are listed below. Each groups is represented by a (often substantial) set of assignments (see further below).

Assignment

 Est. Grading Weight

Modern Game Engine Exploration

(homework_1) (homework_2)

Exploratory assignments. Hands-on with modern game engines. Emphasis on usage.

Team size : 1, Duration : 2 weeks

10%

In-Class Quizzes (biweekly - also possible to take remotely - lowest will be dropped)

Individual, in-class assessments covering topics from the previous two-week period.

Be sure to bring a charged device (laptop / phone) capable of taking canvas quizzes.

Team size : 1, Duration 20 minutes

10%

Game Engine Construction

(homework_3), (homework_4), (homework_5), (homework_6), (homework_7), (homework_8)

(homework_9), (postmortem),

Technical implementation of standard features via fundamental algorithms, data structures, and principles. Engine codebase carries from one assignment to the next.

Team size : 1, Duration : 10 weeks

40%

Exam

(information_and previous exams here)

An in-person examination to verify individual understanding of all previously-covered topics.

Team size : 1, Duration : 4 hours (exam designed for 2.5)

25%

Game Engine Research / Custom Feature

(custom_feature_milestone), (custom_feature_final)

Customize game engine codebase with a significant new feature not covered during class.

Team size :1, Duration : 2 weeks

15%

Assignments / Lesson Plans / Lecture Slides (TBD)

The course schedule is subject to industry interviews, field trips, and vacation days that may be difficult to predict-- causing small variations from semester to semester.

A portion of Winter 24’s EECS 498 WIP schedule. Read top-to-bottom, green means an assignment is launching and red means it is due. Lecture plans, including links to slides, announcements, etc, are available on the left once said day arrives.

Grading Scale

EECS 498 employs the standard grading scale below in converting scores to letter grades.

Final grade projections are released on Canvas in the final several weeks of the course. Students are granted a period of at least 24 hours to review and dispute final grades before their submission to Wolverine Access.

Prerequisites

Required Courses

Students are required to have successfully passed EECS 281 before taking this course. Non-CSE undergraduates / graduate students with ample programming experience may request permission without EECS 281, though CSE undergraduates must be prioritized (this course may be necessary for them to graduate).

Required Computational Resources

Windows, Mac OSX, and Linux operating systems

Through an escalating series of assignments, students will be tasked with the creation of a portable, multi-platform game engine capable of running on Windows, Mac OSX, and Linux. This implies the need for access to these three operating systems for testing (though most students will choose one to be their primary development environment). You may find all of these operating systems for free on-campus in various laboratories (windows and linux in various CAEN labs, and macs in the groundworks laboratory), but there are other approaches you may take explained in this chart–

You need (brief-but-recurring) access to all three desktop operating systems :

Windows

OSX

Linux

Time-Intensive Approach

Visit  CAEN lab (may need to restart machine)

Visit Groundworks machine

Visit CAEN lab (may need to restart machine)

Balanced

Virtualize Windows

Dual-boot windows

-

Virtualize Linux

Dual-boot linux on pc

Dual-boot linux on mac

Money-Intensive

Purchase a PC

Purchase a Mac

-

Relationship-Intensive

Borrow friend’s PC

Borrow friend’s Mac

Borrow friend’s device

Course Book (optional)

Game Engine Architecture (3rd edition)

by Jason Gregory

Workload

EECS 498 (Game Engine Architecture) is a challenging, programming-intensive course that requires, and rewards, a significant investment of time.

Please reconsider taking EECS 498 (Game Engine Architecture) if you...

The course will target a median grade of “B+ / B”.

Graduate Student Advisory

Graduate students are advised against taking EECS 498 (Game Engine Architecture) due to its substantial time requirements and undergraduate-style grading structure. Please discuss with your advisor and reach out to the course staff if considering registration. Note that undergraduate CS students get priority seating, as they need a course of this type to graduate (graduate students may be required to wait until a week or two after the semester begins to complete registration– reach out to the instructional staff to get access to the course canvas / piazza site in the meantime).

Non-CSE Graduate Students seeking to take the class should fill out this form.

Please reach out to ayarger@umich.edu if you have a unique case.

Resources

A number of resources exist to improve one’s EECS 498 (Game Engine Architecture) experience--

Community

Check the course canvas site for links to...

Health

Should you feel overwhelmed, or find yourself spending more than 12 hours on assignments per week, please reach out to the primary instructor via ayarger@umich.edu-- We will be happy to discuss your progress, techniques for time-efficiency / assignment planning, and ways to get back on track.

Should you find yourself unable to make progress due to factors beyond your control (sickness, family emergency, etc), please reach out immediately for extension consideration.

Policies

Biweekly Quizzes

This course features biweekly quizzes designed to verify / exercise student understanding of topics from lecture, discussion, and homeworks. They are designed to be light, and should be completable remotely or in-person during a strict timing window (first 20 minutes of class). Keep an eye on the schedule to know when they will take place, and keep up with lecture to hear about their contents / topics covered.

Your lowest quiz score (of five) will be replaced with a perfect score at semester’s end. Quizzes will be open book / open notes.

Be sure to bring a charged device (laptop / phone) capable of taking canvas quizzes.

Midterm Exam

This course features one “cumulative” midterm examination (typically happening in the last quarter of the semester), after which the course will shift away from standardized autograded assignments and towards your very own custom engine features. You may review previous exams on the exam specification document.

Be sure to bring a sharpened pencil (though we will likely have some for you if needed).

Discussion Section

Optional, shortened lectures that occur Fridays. They are typically dedicated to “the nitty gritty”-- examples, workshops, coding, and other things directly relevant to your homework assignments, quizzes, and exams. You are highly encouraged to attend in-person (as they typically have a Q&A section) but they are also recorded and may be enjoyed from home.

Team Work

All assignments in EECS 498 (Game Engine Architecture) are to be done individually– there is no teamwork. High-level, non-assignment-specific discussion of course concepts is encouraged among peers, however.

Accommodations

Students requiring accommodations should apply for an Accommodation Letter through Services for Students with Disabilities. I receive the letter automatically, and will adjust your timed assessment time limits.

Lecture Recording

Lecture recordings will be made available an hour or so after a given lecture concludes (check canvas for a link to the recording repository).

You may find lecture recordings from previous semesters, in addition to other gamedev content, on the course youtube channel.

Submission

All deliverables required of an assignment must be submitted to the appropriate course canvas site. The student is responsible for meeting every requirement of the assignment specification, and following submission procedures including deliverable naming, timeliness, etc.

Students are responsible for understanding the submission technology and processes used by canvas and the course autograder. Students will not be held responsible for submission difficulties outside of their control, such as widespread canvas or autograder server outages.

Runtime Performance Penalties

Beyond achieving correctness, all autograded deliverables must achieve performance standards comparable (or better) than the staff solution for any given test case. Test cases in which the student solution requires more than 25% additional time will receive a 15% reduction in score.

Late Assignment Submission

Non-autograded assignments (early exploration homeworks + final research homeworks) that are submitted late will be subject to the following policy, exhibited in the Python programming language (unless otherwise specified in the assignment specification)--

if hours_late < 0.0:

        return graded_assignment_score

elif hours_late < 24.0:

Return graded_assignment_score * 0.8

return 0.0

Note that Canvas’ assignment submission timestamp will be the ultimate authority of when something was turned in. Begin your upload early to account for networking or technology-related delays. Assignment extensions will only be granted for exceptional, extenuating circumstances beyond the student’s control, and not in situations where a teammate may carry the burden temporarily.

Autograded assignments that fail to receive an autograder score prior to the assignment deadline will be marked late and receive a 20% penalty. Note that this is not submission / commit time, but grade-received time. Please submit early and often, as autograders are likely to be busy with other submissions as the deadline nears.

Students may resubmit late autograded assignments with no further penalty until the “Autograders Off” date and time towards the end of the semester (typically just after the exam– check the course schedule to be sure).

Incorrect Submission Format Penalty

Submitted assignments that do not meet the submission requirements outlined in the “Deliverables” section of its assignment specification will have a 20% “incorrect submission format” penalty applied.

Penalty Stacking

The “Late Assignment Submission” and “Incorrect Submission Format” penalties described above may stack to form a single 40% penalty.

Attendance / Late Arrival

There is no explicit penalty for truancy, though much is likely to be missed without timely attendance. Those who cannot attend lectures in-person may watch recordings made available several hours later.

Regrades / Grading Disputes

Any released grade may be disputed, either at office hours or via email (ayarger@umich.edu), so long as the dispute is raised within one week of the released grade.

Grades will only be considered for adjustment in situations where the instructor’s grading process is “cut-short”, or rendered incomplete, due to the instructor failing to notice features / content of the deliverable, or being physically unable to due to a high difficulty or by demanding an unreasonably long time investment of the grading staff.

To clarify, the following are not valid reasons to request a regrade--

Office Hours

Office hours will be held weekly, in both in-person and virtual modes, with each instructional staff member contributing one hour per week. Students who cannot make the scheduled office hours may request an appointment through ayarger@umich.edu. Check the course Canvas site and calendar for office hour dates, times, and locations.

Extra Credit

EECS 498 (XR) provides extra credit opportunities in an effort to...

Respect and Maturity

EECS 498 (XR) is a highly collaborative course in which students engage often with one another and the course staff. Students will…

Students who fail to meet these expectations risk reduction of their participation score, or in egregious cases, referral to the Dean’s office.

Collaboration / Cheating / Honor Code

In their EECS 498 (Game Engine Architecture) collaboration, students must respect the following policies…

It is generally acceptable to discuss project goals and technical / design concepts at a high-level. Refrain from discussing exact solutions or viewing another student’s assignment code. If in doubt, ask the course staff.

Failure to comply with these policies may result in a reduction of the assignment grade and / or referral to the honor council.

Staff AutoBios

Austin Yarger

Austin is an international educator and Lecturer of Game Development in the University of Michigan’s College of Engineering, co-founder of the International Game Developers Association (Ann Arbor Chapter - https://igda2.org), and President of Arbor Interactive, a local game and software development firm (www.arborinteractive.com).

A long-time hobbyist game developer, Austin got his taste of professional game development in the summer of 2014 with an internship at Maxis (Electronic Arts) where he helped engineer 2015’s top selling computer game, The Sims 4. Austin has taught EECS 494 (eecs494.com) since 2017, EECS 440 (eecs440.com) since 2022, and EECS 498.007 (eecs498.com) since 2024. His students have achieved positions at prestigious game developers such as Microsoft’s 343 Industries, Volition, Zynga, Google, Gaudium, NetEase, Jackbox Games, and Amazon Game Studios.

In addition to stops at EA Mobile and Facebook, Austin served as President of the Wolverine Soft game development organization from 2011 – 2014. He co-founded the Ann Arbor chapter of the International Game Developers Association (www.igda2.org), curates the MichiGames Arcade Cabinet, mentors the Huron High School Game Development Team, consults with technology startups in downtown Ann Arbor, and organizes multi-university exhibitions with Eastern Michigan University and Lawrence Technological University. He acquired a Bachelors and Masters degree from the University of Michigan in 2015 and 2018, respectively. His research interests include non-gaming applications of game development tools, technologies, and techniques. Learn more at www.ayarger.com.

Jacob Robinson

Jacob Robinson is in his 4th year studying Computer Science at the University of Michigan. He is a proud member of the game development community at UofM, having spent 2 years in the WolverineSoft game development studio. Currently, he’s working with Yooper Game Studios on an upcoming project.

Using what he’d learned from taking EECS 498, he and a few friends created a brand new custom engine (Wolverine Engine: https://github.com/reidcam/Wolverine-Engine).

His favorite games are Persona 5, Shadow of the Colossus, and Xenoblade Chronicles.

You can learn more about Jacob Robinson at his website: https://robinsonjacob.com

Junwen Yu

Junwen Yu is a senior studying Computer Science at University of Michigan. He took 498 - Game Engine Arch in Winter 24 and 494 in Fall 24. He is passionate about real-time rendering and game engine technology. During the summer, he worked as an intern at Tencent developing the rendering module of Unreal 4. Junwen’s favorite games include Dark Souls III, Death Stranding, and Genshin Impact. Outside of gaming, he also enjoys watching anime and playing the piano.

Discussion

Relation to EECS 494 (GameDev) and EECS 440 (XR)

EECS 494 (GameDev) and EECS 440 (XR) are CSE capstone / MDE courses that introduce students to modern game development and extended reality development respectively. These courses, while intensive, place their focus on production and design (being MDEs - “Major Design Experiences”). They provide a high-level, pragmatic understanding of game engines without going overly deep.

In contrast, EECS 498 (Game Engine Architecture) concerns itself with the lower-level, more technical topic of game engine synthesis– how do these powerful applications work under-the-hood, and how may we construct our own?

I have Extra Time– How May I Prepare for the Course?

The course is designed such that one does not need to do any pre-semester preparation. If you find yourself with extra time however, you are recommended to…

Free Up Storage Space

If you plan to use your personal device for this course, you may benefit from having extra storage space. 25GB or so should be sufficient for the variety of software packages you’ll be asked to examine or utilize.

Obtain Development Tools

The following tools may be beneficial to have on a personal development device. If you do not have a personal computer, know that it is possible to complete the entire course using campus resources (CAEN labs, Groundworks, etc).

Play Around with Game Engines

The more familiar you are with game engines, the more confidence you will have as the course begins. These programs can be surprisingly engaging, so grab a couple and see if you can make something small–

Portfolio Website

Later in the semester you will be required to provide downloadable versions of your game engine (along with instructions) via a personal portfolio website. You will save some time if you have this website ready to go. Having a personal portfolio website may also be beneficial for interviews, CVs, etc.

Join Related Organizations

Learning is easier with helpful, friendly communities to support you. Fortunately, the University of Michigan has many–

Mess around with SDL and other dependencies

SDL is a middleware that abstracts away the input, audio, and graphics-related APIs that exist on different operating systems. Instead of needing to study the windows API, OSX API, Linux API, etc, we just need to study SDL to get our game engines opening windows, playing audio, etc. We’ll be using it alot in the second half of the course.

Likewise, other dependencies will be useful to us during the course. If you have some spare time, see if you can manage to install them yourself, then create a small “tech-demo”.

Pre-Class Playlist