This document should serve as a learning resource and a reference for aspiring game engine programmers. It's focus is game engine programming, not game programming. It's going to cover low level topics such as networking, renderers, entitiy systems and physics engines. The language of interest in this document is C++ thus expect most of the resources use it.
This document is not fit for people with basic programming knowledge. Please acquire high level programming language knowledge before using this as a reference. If you are interested in learning C++ please check out this document.
Please use issues and create branches to make suggestions and comments.
Table of Contents
- Memory Management
- Rendering
- Physics
- Game Logic
- Networking
- Mathematics
- Audio
- Debugging and Developer Tools
D3D12 Memory Allocator - GPUOpen-LibrariesAndSDKs
Variance Shadow Maps - NVidia
Design Patterns for Low-Level Real-Time Rendering - CppCon 2017: Nicolas Guillemot
Rendering the World of Far Cry 4 - GDC 2015: Stephen McAuley
Sand Rendering in Journey - GDC 2013: John Edwards
The Rendering of Below - GDC 2017: Colin Weick
The Physics of Light and Rendering - QuakeCon 2013: John Carmack
Ray Tracing - Soft Shadows - Stack Overflow
Turing - Mesh Shaders - SIGGRAPH 2018: Christoph Kubisch
Geometry Reinvented with Mesh Shading - SIGGRAPH 2019: NVIDIA
Advanced Mesh Shaders - DirectX Developer Day: Martin Fuller
OpenGL - OpenGL Programming Tutorial Series by Brian Will
C++ 3D DirectX Programming - D3D11 Programming Tutorial Series by ChiliTomatoNoodle
Mesh Shaders - DirectX-Specs
DirectX Raytracing - DirectX-Specs
DirectX 12 - D3D12 Programming Tutorial Series by Microsoft
Performance Guide - GPUOpen
The benefits of buffr packing - ARM Developer
Geometry Caching Optimizations in Halo 5: Guardians - GDC 2017: Zabir Hoque and Ben Laidlaw
Visible Surface Algorithms - UC Davis Academics
Rendering the World of Far Cry 4 - GDC 2015: Stephen McAuley
Temporal Reprojection Anti-Aliasing in INSIDE - GDC 2016: Lasse Jon Fuglsang Pedersen
Between Tech and Art: The Vegetation of Horizon Zero Dawn - GDC 2018: Gilbert Sanders
DirectX's Compressed Textures Resources
DXT is NOT ENOUGH! Advanced texture compression for games - GDC 2012: Colt McAnlis
Adaptive Virtual Texture Rendering in Far Cry 4 - GDC 2015: Ka Chen
Virtual Textures (aka Megatextures) - GDC 2008: Sean Barrett
Frustrum Calculation and Culling, Hopefully Demystified - David Lively
Frustrum Culling tutorial - Rastertek
How Occlusion Culling Works - thebennybox
Radiositiy - Hugo Elias
Graphics Tech: Precomputed Lighting - Jonathan Blow
Lightmap Parameterization - Ignacio Castano
Hemicube Rendering and Integration - Ignacio Castano
Mesh Parameterization - full-day course given at SIGGRAPH Asia 2007
D-Charts: Quasi-Developable Mesh Segmentation - Dan Julius, Vladislav Kraevoy, Alla Sheffer
Vector Texture Maps on the GPU - Nicolas Ray, Thibaut Neiger, Bruno Levy, Xavier Cavin
Lightmap - Wikipedia
Packing Lightmaps - blackspawn
Physics for Game Programmers; Continous Collision - GDC 2013: Erin Catto
Convx Polygon Collisions - javidx9
GJK Algorithm Explanation & Implementation - Winterdev
Handmade Hero Day 050 - Basic Minkowski-based Collision Detection - Molly Rocket
The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever? - Reducible
Physics for Game Programmers: Understanding Constraints - GDC 2014: Erin Catto
Valve's Physics for Game Programmers - GDC 2014: Sergiy Migdalskiy
A/B Testing for Game Design Iteration: A Bayesian Approach - GDC 2014: Steven Collins
Intro to Game Physics - DigiPen Game Engine Architecture Club
Supercharged! Vehicle Physics in Skylanders - GDC 2016: Jan Erik Steel & Patrick Donnelly
Designing with Physics: Bend the Physics Engine to Your Will - GDC 2015: Bennett Foddy
3D Physics Engine Tutorial - thebennybox
Destructible Environments in Control: Lessons in Procedural Destruction - GDC 2020: Johannes Richter
Cloth Self Collision with Predictive Contacts - GDC 2018: Chris Lewin
Nuts and Bolts: Modular AI From the Ground Up - GDC 2016: Kevin Dill, Christopher Dragert & Troy Humphreys
Bringing Hell to Life: AI and Full Body Animation in DOOM - GDC 2017: Jake Campbell
Modular, Reusable Social Behavior In Video Game AI - GDC 2014: Michael Mateas & Bill Ferguson
Creating Complex AI Behavior in Stellaris Through Data-Driven Design - GDC 2017: Mehranz Amanat Bari
A Simple Entity Component System (ECS) [C++] - Austin Morlan
Implementation of a multithreaded compile-time ECS in C++14 - Vittorio Romeo
Pak files - Virtual file system - Simon Coenen
Valve's BSP Map Format - VDC
Half-space (geometry) - Wikipedia
Computational Geometry - Phylip Kindermann
Using Synchronization - MSDN
SIMD and Vectorization: Parallelism in C++(multitasking on single core) - Bisqwit
C++ SSE Optimization - ChiliTomatoNoodle
Practical Procedural Generation for Everyone - GDC 2017: Kate Compton
Math for Game Programmers: Mixing Geodetic, Hand-crafted and Procedural Geometry - GDC 2015: Graham Rhodes
IK Rig: Procedural Pose Animation - GDC 2016: Alexander Bereznyak
Skeletal Animation - From Theory and Math to Code - FloatyMonkey
FABRIK (Inverse kinematics) - EgoMoose
Freeform Animation Rigging: Evolving the Animation Pipeline - GDC 2020: Dave Hunt
Bringing Hell to Life: AI and Full Body Animation in DOOM - GDC 2017: Jake Campbell
I Shot You First: Networking the Gameplay of Halo: Reach - GDC 2011: David Aldridge
Networking for Physics Programmers by Glenn Fiedler - GDC 2015: Glenn Fiedler
The Blaze High Performance Math Library - Klaus Iglberger
Math for Game Programmers: Understanding Homogeneous Coordinates - GDC 2015: Squirrel Eiserloh
Math for Game Programmers: Mixing Geodetic, Hand-crafted and Procedural Geometry - GDC 2015: Graham Rhodes
An Interactive Sound Dystopia: Real-Time Audio Processing in NieR:Automata - GDC 2018: Shuji Kohata
Performance Based Sound Design - GDC 2017: Matt Piersall
Next-Gen Audio in Killer Instinct - GDC 2014: Mick Gordon & Jean-Edouard Miclot
Printing Call Stack - Stack Overflow
Introspections - TeamHypersomnia
Frostbite: Implementing a Scripting Solution for Your Editor - GDC 2015: Matthew Doell