Game engine architecture In this new and improved third edition of the highly popular Game Engine Architecture Jason Gregory draws on his nearly two decades of experience at Midway Electronic Arts and Naughty Dog to present both the theory and practice of game engine software development. In this book the broad range of technologies and techniques used by AAA game studios are each explained in detail and their roles within a real industrial strength game engine are illustrated. New to the Third Edition This third edition offers the same comprehensive coverage of game engine architecture provided by previous editions along with updated coverage of: computer and CPU hardware and memory caches compiler optimizations C++ language standardization the IEEE 754 floating point representation 2D user interfaces plus an entirely new chapter on hardware parallelism and concurrent programming. This book is intended to serve as an introductory text but it also offers the experienced game programmer a useful perspective on aspects of game development technology with which they may not have deep experience. As always copious references and citations are provided in this edition making it an excellent jumping off point for those who wish to dig deeper into any particular aspect of the game development process. Key Features Covers both the theory and practice of game engine software development Examples are grounded in specific technologies but discussion extends beyond any particular engine or API. Includes all mathematical background needed. Comprehensive text for beginners and also has content for senior engineers. Cover Half Title Title Page Copyright Page Dedication Table of Contents Preface I Foundations 1 Introduction 1.1 Structure of a Typical Game Team 1.2 What Is a Game 1.3 What Is a Game Engine 1.4 Engine Differences across Genres 1.5 Game Engine Survey 1.6 Runtime Engine Architecture 1.7 Tools and the Asset Pipeline 2 Tools of the Trade 2.1 Version Control 2.2 Compilers Linkers and IDEs 2.3 Profiling Tools 2.4 Memory Leak and Corruption Detection 2.5 Other Tools 3 Fundamentals of Software Engineering for Games 3.1 C++ Review and Best Practices 3.2 Catching and Handling Errors 3.3 Data Code and Memory Layout 3.4 Computer Hardware Fundamentals 3.5 Memory Architectures 4 Parallelism and Concurrent Programming 4.1 Defining Concurrency and Parallelism 4.2 Implicit Parallelism 4.3 Explicit Parallelism 4.4 Operating System Fundamentals 4.5 Introduction to Concurrent Programming 4.6 Thread Synchronization Primitives 4.7 Problems with Lock Based Concurrency 4.8 Some Rules of Thumb for Concurrency 4.9 Lock Free Concurrency 4.10 SIMD Vector Processing 4.11 Introduction to GPGPU Programming 5 3D Math for Games 5.1 Solving 3D Problems in 2D 5.2 Points and Vectors 5.3 Matrices 5.4 Quaternions 5.5 Comparison of Rotational Representations 5.6 Other Useful Mathematical Objects 5.7 Random Number Generation II Low Level Engine Systems 6 Engine Support Systems 6.1 Subsystem Start Up and Shut Down 6.2 Memory Management 6.3 Containers 6.4 Strings 6.5 Engine Configuration 7 Resources and the File System 7.1 File System 7.2 The Resource Manager 8 The Game Loop and Real Time Simulation 8.1 The Rendering Loop 8.2 The Game Loop 8.3 Game Loop Architectural Styles 8.4 Abstract Timelines 16 Runtime Gameplay Foundation Systems 16.1 Components of the Gameplay Foundation System 16.2 Runtime Object Model Architectures 16.3 World Chunk Data Formats 16.4 Loading and Streaming Game Worlds 16.5 Object References and World Queries 16.6 Updating Game Objects in Real Time 16.7 Applying Concurrency to Game Object Updates 16.8 Events and Message Passing 16.9 Scripting 16.10 High Level Game Flow V Conclusion 17 You Mean Theres More 17.1 Some Engine Systems We Didnt Cover 17.2 Gameplay Systems Bibliography Index 8.5 Measuring and Dealing with Time 8.6 Multiprocessor Game Loops 9 Human Interface Devices 9.1 Types of Human Interface Devices 9.2 Interfacing with a HID 9.3 Types of Inputs 9.4 Types of Outputs 9.5 Game Engine HID Systems 9.6 Human Interface Devices in Practice 10 Tools for Debugging and Development 10.1 Logging and Tracing 10.2 Debug Drawing Facilities 10.3 In Game Menus 10.4 In Game Console 10.5 Debug Cameras and Pausing the Game 10.6 Cheats 10.7 Screenshots and Movie Capture 10.8 In Game Profiling 10.9 In Game Memory Stats and Leak Detection III Graphics Motion and Sound 11 The Rendering Engine 11.1 Foundations of Depth Buffered Triangle Rasterization 11.2 The Rendering Pipeline 11.3 Advanced Lighting and Global Illumination 11.4 Visual Effects and Overlays 11.5 Further Reading 12 Animation Systems 12.1 Types of Character Animation 12.2 Skeletons 12.3 Poses 12.4 Clips 12.5 Skinning and Matrix Palette Generation 12.6 Animation Blending 12.7 Post Processing 12.8 Compression Techniques 12.9 The Animation Pipeline 12.10 Action State Machines 12.11 Constraints 13 Collision and Rigid Body Dynamics 13.1 Do You Want Physics in Your Game 13.2 Collision Physics Middleware 13.3 The Collision Detection System 13.4 Rigid Body Dynamics 13.5 Integrating a Physics Engine into Your Game 13.6 Advanced Physics Features 14 Audio 14.1 The Physics of Sound 14.2 The Mathematics of Sound 14.3 The Technology of Sound 14.4 Rendering Audio in 3D 14.5 Audio Engine Architecture 14.6 Game Specific Audio Features IV Gameplay 15 Introduction to Gameplay Systems 15.1 Anatomy of a Game World 15.2 Implementing Dynamic Elements: Game Objects 15.3 Data Driven Game Engines 15.4 The Game World Editor