Contents:
All the technology that goes in making a AAA game!!!!
Foundations
Introduction
- Industry overview
- Structure of a Typical Game Team
- Engineers
- Artists
- Game Designers
- Producers
- Other Staff
- Publishers and Studios
- What is a Game??
- Video Games as Soft Real-Time Simulations
- What is a Game Engine??
- Engine Differences across Genres
- First-Person Shooter(Quake, Unreal Tournament, Half Life)
- Platformers and Other Third-Person Games(Gears of War, Dead Space, Red Dead Redemption, Uncharted)
- Fighting Games(Soul Calliber, Tekken, Fight Night)
- Racing Games(NFS, Gran Turismo, Mario kart)
- Real Time Strategy(Warcraft, Starcraft, Command and Conquer, Age of Empires)
- Massively Multiplayer Online Games(World of Warcraft, Destiny)
- Player Authored Content(Mods)(Minecraft)
- Other Games(sports, RPG, puzzle games, social sims, text based!!)
- Engine Differences across Genres
- Game Engine Survey
- The Quake Family of engines -- Quake, Sin, Medal of Honour (ID Software)
- The Unreal Family of Engines -- Unreal Tournament, Gears of War (Epic Games)
- The Half-Life Source Engine -- Half-Life, Team Fortress, Portal (Valve)
- DICE's Frostbite -- Battelfield, Mass Effect, Need for Speed, Dragon Age (EA)
- CryEngine -- Far Cry, Crysis, Warface (Crytek)
- Son's PhyreEngine -- Demon's Souls, Dark Souls, Darksiders
- Microsoft XNA Game Studio
- Unity
- 2D Engines, and others
- Open source and proprietary engines
- Runtime Engine Architecture
- Target hardware, device drivers, operating system,
- middleware and third-party SDKs,
- DS and Algo, Graphics, Collision and Physics, Character Animation, Character Models
- platform independence layer, core systems, resource manager, rendering engine,
- front end, profiling and debugging tools, human interface devices, audio, online multiplayer/networking
- gameplay foundation systems, event subsystem, scripting system, AI foundations, game specific susbsystems
- Tools and asset pipeline
- Digital content creation tools, Asset conditioning tools, World Editor, Resource database
Tools of the Trade
- Version Control
- Visual Studio / IDE
- Profiling Tools
- Memory Leak and Corruption Detection
Fundamentals of Software Engineering for Games
- C++ Review and Best Practices
- Data, Code and Memory
- Caching and Handling errors
- Pipelines, Caches and Optimization
- Parallelism, memory caches, instruction pipelining and Superscalar CPUs,
3D Math for Games
- Solving 3D Problems in 2D
- Points and Vectors
- Coordinate spaces, vector operations
- Matrices
- matrix operations, Homogeneous coordinates, transformations, matrices in memory,
- Quaternions
- quaternions operations, rotation, interpolation,
- Comparison of Rotational Representations
- Euler angles, matrices, axis + angle, quaternions,
- Other useful Mathematical Objects
- Lines, Rays and Line Segments
- Spheres
- Planes
- Axis-Aligned Bounding Box(AABB)
- Frusta
- Hardware Accelerated SIMD Math
- SSE Registors, intrinsics, vector-matrix multiplication
- Random Number Generation
- Linear Congruential Generators
- Mersenne Twister
- Mother-of-all and XorShift
Low Level Engine Systems
Engine Support Systems
- Subsystem Start-Up and Shut-Down
- Singleton Approaches
- OGRE example
- Naughty Dog's Uncharted/The Last of Us series.
- Memory Management
- Issues:
- Dynamic memory allocation
- Memory access patterns
- Custom Allocators
- Stack based allocators
- Pool allocators
- Issues:
- Containers
- Container Operations, Iterators, Algorithmic Complexity
- Building Custom Container Classes
- Strings
- Engine Configuration
- Loading and Saving Options and Per-User options
- Text files, XML, compressed binary, windows registry, command line options
- environment variables, online user profiles
- Examples
- Quake's Cvars
- OGRE : Windows INI
- Naughty Dog : In-Game Menu Settings, Command Line Arguments, Scheme Data Definitions
- Loading and Saving Options and Per-User options
Resources and the File System
- File System
- File names and Paths
- Across different operating systems, absolute and relative paths, search paths, path APIs
- Basic File I/O
- synchronous and asynchronous File I/O
- File names and Paths
- The Resource Manager
- Offline Resource Management and the Tool Chain
- Revision control of assets
- The Resource database
- Examples : UnrealEd, Naughty Dog's Builder, OGRE's Resource Management System
- The Asset Conditioning Pipeline
- Runtime Resource Management
- Responsibilities :
- Maintain a single copy in memory, Manage lifetime, load and unload, composite resources
- Maintain referential integrity, manage memory usage, custom processing on load
- Unified interface, Handles streaming
- Resource File and Directory Organization
- Composite Resources and Referential Integrity
- Handling Cross-References between resources.
- Post-Load Initialization
- Responsibilities :
- Offline Resource Management and the Tool Chain
The Game Loop and Real-Time Simulation
- The Rendering Loop
while(!quit) {
updateCamera();
updateSceneElements();
renderScene();
swapBuffers();
}
- The Game Loop
- Many interacting subsystems.
- Each subsystem may work at a different refresh rate and synchronize with each other.
- A Simple Example : Pong
void main() // Pong
{
initGame();
while(true) { // game loop
readHumanInterfaceDevices();
if(quitButtonPressed) {
break; // break out of the game loop
}
movePaddles();
moveBall();
collideAndBounceBall();
if(ballImpactSide(LEFT_PLAYER)) {
incrementScore(RIGHT_PLAYER);
resetBall();
}
else if(ballImpactSide(RIGHT_PLAYER)) {
incrementScore(LEFT_PLAYER);
resetBall();
}
renderPlayField();
}
}
- Game Loop Architectural Styles
- Windows Message Pumps
- Event Based Updating
- Callback-Driven Frameworks
// The Framework!!
while(true) {
foreach(frameListener) {
frameListener.frameStarted();
}
renderCurrentScene();
foreach(frameListener) {
frameListener.frameEnded();
}
finalizeSceneAndSwapBuffers();
}
// A frame listener implementation
class GameFrameListener : public FrameListener
{
public:
virtual void frameStarted() {
// Things that must happen before rendering
pollInputDevices();
updatePlayerControls();
updateDynamics();
resolveCollisions();
updateCamera();
// etc.
}
virtual void frameEnded() {
// Things to do after scene rendering
drawHud();
// etc.
}
}
- Abstract Timelines
- Real Time
- Game Time
- Local and Global Timelines
- Measuring and Dealing with Time
- Frame Rate and Time Deltas
- From Frame Rate to Speed
- Old-School CPU Dependent Games
- Updating Based on Elapsed Time
- Using a Running Average
- Governing the Frame Rate
- Screen Tearing and V-Sync
- Measuring Real Time with High-Resolution Timer
- High Resolution Clock Drift : In multi-processor architecture
- Time Units and Clock Variables
- 64-Bit Integer Clocks
- 32-Bit Integer Clocks
- 32-Bit Floating-Point Clocks
- Other Time Units
- Dealing with Breakpoints
- A Simple Clock Class
- Multiprocessor Game Loops
- Multiprocessor Game Loop Architectures
- Xbox 360, PlayStation 3, PlayStation 4, Xbox One
- SIMD
- Fork and Join
- One Thread per Subsystem
- Jobs
- Multiprocessor Game Loop Architectures
- Networked Multiplayer Game Loop
- Client-Server
- Peer to Peer
- Case Study : Quake II
Human Interface Devices (HID)
- Types of Human Interface Devices
- Interfacing with HID
- Polling
- Interrupts
- Wireless Devices
- Types of Inputs
- Digital Buttons
- Analog Axes and Buttons
- Relative Axes
- Accelerometers
- 3D Orientation with the Wiimote or DialShock
- Cameras
- Types of Outputs
- Rumble
- Force-Feedback
- Audio
- Other Inputs and Outputs
- Game Engine HID Systems
- Typical Requirements
- Dead Zone
- Analog Singnal Filtering
- Detecting Input Events
- Button Up and Button Down
- Chords
- Sequences and Gesture Detection
- Managing Multiple HIDs for Multiple Players
- Cross-Platform HID Systems
- Input Remapping
- Context-Sensitive Controls
- Disabling Inputs
- Human Interface Devices in Practice
Tools for Debugging and Development
- Logging and Tracing
- Formatted Output with
OutputDebugString()
- Verbosity
- Channels
- Mirroring Output to a File
- Crash Reports
- Formatted Output with
- Debug Drawing Facilities
- Debug Drawing API
- Should be simple, provide functionality to draw various primitives and control there properties.
- Should allow primitives to be drawn from anywhere and in any coordinate space.
- Debug Drawing API
- In-Game Menus
- In-Game Console
- Debug Cameras and Pausing the Game
- Cheats
- Screenshots and Movie Capture
- In-Game Profiling
- Hierarchical Profiling
- Measuring Execution times Hierarchically
- Exporting to Excel
- Hierarchical Profiling
- In-Game Memory Stats and Leak Detection
Graphics, Motion and Sound
The Rendering Engine
- Foundations of Depth Buffered Triangle Rasterization
- Describing a Scene : Using surfaces
- Representations Used by High-End Rendering Packages
- Parametric surface equations, patches
- Triangle Meshes
- Tesselation, LODs, dynamic tesselation, progressive meshes.
- Triangle lists, index lists, strips and fans.
- Model Space.
- World space and Mesh instancing.
- Representations Used by High-End Rendering Packages
- Describing the Visual Properties of a Surface.
- Introduction to Light and Color
- Vertex Attributes
- position, normal, tangent and bitangent, diffuse color, specular color, texture coordinates, skinning weights.
- Vertex Formats
- Attribute Interpolation
- Textures
- Materials
- Lighting Basics
- Local and Global illumination
- The Phong Lighting Model
- Modeling Light Sources
- The Virtual Camera
- View Space
- Projections
- The View Volume and the Frustum
- Projection and Homogeneous Clip Space
- Screen Space and Aspect Ratios
- The Frame Buffer
- Triangle Rasterization and Fragments
- Occlusion and the Depth Buffer
- Describing a Scene : Using surfaces
- The Rendering Pipeline
- Overview of the Rendeing Pipeline
- How the Rendering Pipeline Transforms Data
- Implementation of the Pipeline
- The Tools Stage(offline)
- Geometry and Material creation tools
- The Asset Conditioning Stage(offline)
- Load the data generated through DCC applications into engine ready format.
- Index the data into scene-graphs or BSP tree to make it ready for the application.
- A Brief History og the GPU
- Software rendering
- Fixed-function pipeline
- The GPU Pipeline(gpu)
- Vertex Shader - Transform and light individual vertices from modelspace to clip space. Now has access to texture data as well.
- Geometry Shader - Optional stage that can add/remove/modify primitives.
- Stream Output - Permits to stream data at this point back into the pipeline for effects like hair simulation.
- Clipping - Fixed function stage that chops the primitives to the frustum. User defined clip planes can be added.
- Screen Mapping - Fixed stage that shifts and scales the vertices fromhomogeneous clip space into screen space.
- Triangle Set-Up - Fixed initialization stage for rasterization hardware.
- Triangle Traversal - Rasterize triangles and interpolate vertex attributes to generate per-fragment attributes. Fixed stage.
- Early z-Test - Early z-test to avoid potentially expensive shading operating for occluded pixels.
- Pixel Shader - Programmable fragment shader. Gets per-fragment attributes and can access texture maps. Outputs a single color.
- Merging / Raster Operations Stage - Non-Programmable, highly configurable blending stage, also known as raster operations. Alpha test, stencil test, alpha blending for translucent objects, decals?.
- Programmable Shaders
- Accessing Memory
- Introduction to High-Level Shader Language Syntax
- Effects
- Antialiasing
- Full Screen Antialiasing(FSAA)
- Multi Sample Antialiasing(MSAA)
- Coverage Sample Antialiasing(CSAA)
- Morphological Antialiasing(MLAA)
- The Application Stage
- Visibility Determination
- Frustum Culling, Occlusion and Potentially Visible Sets
- Portals and Occlusion Volume(Anti-Portals)
- Primitive Submission
- Geometry Sorting
- Scene Graphs
- Quadtrees, Octrees and BSP trees
- Choosing a Scene Graph
- Visibility Determination
- Overview of the Rendeing Pipeline
- Advanced Lighting and Global Illumination
- Image-Based Lighting
- Normal Mapping
- Heightmaps: Bump, Parallax and Displacement Mapping
- Specular/Gloss Maps
- Environment Mapping
- Three-Dimensional Textures
- High Dynamic Range Lighting
- Image-Based Lighting
Comments
comments powered by Disqus