CSCI 181G PO
This is the website for CSCI 181G PO: Game Engine Programming. Course information is available in the syllabus.
- Canvas
- Assignments/reflections
- Slack
- Course announcements, chat, Q&A
- Miro
- In-class activities and whiteboards. The board password is always
recursion
. - Office hours
- MWF mornings (9-11:30), usually in my office but sometimes on Zoom (I'll announce when it's on Zoom)
- Contact me
- On Canvas or by email
- Other helpful chat channels
- On Pomona Slack:
#rust
,#text-editors
- Homework
- Due via GitHub Classroom (just push your commits!). Some assignments will be due via Canvas.
- Important:
- For childcare/work-life-balance reasons I will make no particular effort to answer emails or Canvas questions over the weekend or at night, so be sure to get started early and don't wait until the last minute to ask questions!
Schedule
We'll talk about 2-3 topics per week from the list below, and try to prioritize them based on the games we're working on and what we need to know when.
Deliverables are typically due the Sunday at the end of the week. For example, the Simulation Game is due by the end of February 4.
Dates | Deliverables | Topics | Board link | |
---|---|---|---|---|
1/16, 1/18 | Rust Book Report (Pt 1) | Intro to Rust | Version control and unit testing | board |
1/23, 1/25 | Rust Book Report (Pt 2), To-Do List | Stack v. heap, borrowing | Writing Rust well | board |
1/30, 2/1 | Simulation Game | Interactivity, Rust module system | Simulation Games | board |
2/6, 2/8 | Rogue-like | Entities and Spaces | Frame rate; controlling entities | board |
2/13, 2/15 | Graphical Rogue-like | Sprites and Graphics | Loading levels from disk; Unity | board |
2/20, 2/22 | Graphical Rogue-like (2/22) | Graphics, cont'd; Unity | Continuous Space, Collision Detection & Response | board |
2/27, 2/29 | Adventure Game (2/29) | Physics, movement, animation | Godot, Bevy; homework support | board |
3/5, 3/7 | Platformer (3/7) | Audio, sound effects; refactor to genre-specific | Resource pipelines, running on web; refactor to gameobject | |
Spring Break | ||||
3/19, 3/21 | Project plans | Team-up and project planning; refactor to ECS | progression, menus; Bitmap text, Game state and modes | |
3/26, 3/28 | Role-Playing Game (3/26) | Tech Talk 1 | Tech Talk 2 | |
4/2, 4/4 | Tech Talk 3 | Tech Talk 4 | ||
4/9, 4/11 | Playtest Report | Tech Talk 5 | Tech Talk 6 | |
4/16, 4/18 | Tech Talk 7 | Tech Talk 8 | ||
4/23, 4/25 | Tech Talk 9 | Tech Talk 10 | ||
4/30, Reading Days | Game Projects (Friday) | Demo Day | Reading Days | |
Exam Slot | None | Not Used :) |
Readings and Resources
Long-Form Notes
These longer lecture notes are from a previous version of a course, but should give you extra resources for implementing particular features or for more deeply understanding e.g. the graphics pipeline.
- Rust
- Games and Loops
- Game Design: Text-Based Interfaces
- The GPU and You
- Basic Input Processing
- 2D Scenes and Geometry
- Game Design: 2D Games
- Games vs Engines
- Controlling Time and Framerate
- 2D Animation
- Collision
- Audio, music, sound effects
- Menus and Other Game Stuff
- 3D Rendering
- Game Entities and AI
- 3D Scenes
- 3D Animation
- Collision in 3D
- Understanding Data and Performance
- 3D Cameras
- Workflow and Tooling
- Shadows and Lighting
- Multiplayer & Networking
Rust
- My general rust advice
- A half-hour to learn Rust, a quick tour through Rust's syntax and special rules
- Learn Rust—the Rust Programming Language ("the book"), Rust By Example, and links to documentation
- There's also an experimental version with inline quizzes and visualizations which may be even better.
- School of Rust, a website with articles and lessons on Rust
- RustConf 2018 keynote on data-oriented programming
- Tips
- Set up Visual Studio Code or Emacs or Vi to use Rust with rust-analyzer and LSP
- Learn to love rustfmt (
cargo fmt
) and clippy (cargo clippy
)
- A resource index for Rust learners
- Rust for the Polyglot Programmer
- Two interesting visualizations of ownership and borrowing.
- General debugging advice.
Performance Profiling
- cargo flamegraph for CPU time profiling (if it supports your operating system)
- cargo profiler also supports valgrind and cachegrind (but is Linux-only)
- On Linux we'll dig into perf
- On Mac OS, you'll want to use Instruments
- On Windows, use the Windows Performance Toolkit
- For GPU profiling we'll use RenderDoc on Linux and Windows and hopefully figure out something on Mac using Apple's Metal Debugger.
- Memory bandwidth napkin math, nice for a recent reproduction of the "latency numbers every programmer should know" table
3D
- Learn WGPU, an online book for using wgpu
- SHADERed, a tool we can use to write our 3D shaders
- A really nice tutorial for shaders
- A comprehensive guide to fragment shaders
- CMU slides on texture mapping
- Graphics in Plain Language
- A Trip Through the Graphics Pipeline
Game Programming
Books (all optional)
Many of these are available through the library via O'Reilly:
- Artificial Intelligence and Games, Yannakakis and Togelius
- Procedural Content Generation in Games, Shaker, Togelius, and Nelson
- Game Engine Architecture, Gregory
- Data Oriented Design, Fabian
- Essential Mathematics for Games & Interactive Applications, Bishop
- Game Physics, Eberly
- Real-Time Collision Detection, Ericson
- Artificial Intelligence for Games, Millington & Funge