This course is designed to help students understand, modify, and develop game engines. The game engine creation process is inherently a dialogue among artists, programmers, and those that span both of those categories; this course will focus not only on the technical details of engine creation, but on the artistic consequences of these technical details (and visa-versa).
Game engines consist of reusable runtime and asset pipeline code. They provide game-relevant abstractions of low-level system services and libraries, making it easier to create bug-free games that work across multiple platforms. Game engines also handle content creation, providing or integrating with authoring tools for sounds, images, scripts, and other content to ease the process of creating high-fidelity games.
In this course, we will discuss the problems game engines attempt to solve, examine how current state-of-the-art engines address these problems, and create our own engines based on what we learn. We will cover both the content authoring and runtime aspects of engines. In the first half of the course, we will be developing our own game engine, suitable for use in the LD48 game-making competition. In the next half, groups will be working to extend a modern engine of their choice.
All work will take place in groups with diverse skill sets. Technical communication among group members will play an important role.
Prior knowledge will not be assumed. A will to learn will be.
Languages: C++, Javascript (browser, nodejs), and a smattering of Python.
this
is determined by how a function is calledRevision Management: Git.
3D Modeling: Blender.
Much of the work of this course will occur in class and in groups. We will use a design-then-build-then-evaluate process, which tends to involve more talking about code than actually writing it.
Students will discuss and design different subsystems of an engine suitable for creating single-page HTML5 games for the Ludum Dare 48 hour competition.
Students will work in groups to extend an existing commercial engine. Topics will be selected through a pitching process.
All exercises with a deliverable are graded out of 1 point, so there are (approximately) 1-2 points per week. Projects will have points assigned relative to the number of weeks they occupy.
There is a lot of code floating around on the internet. Feel free to read and learn from it. If you use it as part of code you write for the class:
If there is a doubt in your mind about whether you need to mention where you got the code, mention where you got the code. Plagiarism is anathema to me as an academic. If I discover that you have used code that is not your own without properly crediting the source you will fail the course and I will do my best to make sure you are removed from Carnegie Mellon.
week of | topic | work | note |
---|---|---|---|
Jan 12 | Game Engines | Exercise: build system | |
Jan 19 | Timing, Images | Exercise: main loop, scenes | work day on the 20th |
Jan 26 | 2D Graphics; Tile Maps; Sprite Sheets | Exercise: 2D map pipeline | work day on the 29th |
Feb 2 | Collision and 2D Physics | D2: collision math C2: collision code | |
Feb 9 | SALD Review | D+C3: SALD cleanup | |
Feb 16 | Sound and Music | A4: synth E5: crate | |
Feb 23 | 3D Graphics | Exercise: 3D model pipeline | |
Mar 2 | pre-spring/GDC break | ||
Spring Break | |||
Mar 16 | Modern Game Engines; UE4; C++ | A6: UE4 C++ | |
Mar 23 | Scene Graphs; Components | Project: Pitches (Concept, Design) | |
Mar 30 | (project time) | Project: Pitches (Plan) | |
Apr 6 | Arithmetic Coding; Level Of Detail; Culling | ||
Apr 13 | A*, Navigation Meshes, and their ilk | ||
Ludum Dare on Apr 17! Use our engine! | |||
Apr 20 | Lea Albaugh guest lecture on Tuesday. | Project Midpoint due on the 23rd | |
Apr 27 | (Bonus Material: Everything I Forgot To Mention) | Project: Final due on the 30th | |
May 4 | (Final Exam Week; no class exam) |