This talk will briefly discuss performance threading of Quake4 and Quake Wars Engine. It will go over the issues involved parallelizing serial code, working with different backends, load balancing and design considerations. It will also offer some insight into extracting parallelism in game engines on next-generation hardware.Get a first-time look at Havok Behavior 5.5, demonstrating how the Havok Behavior Tool combines the fidelity of traditional animation assets with powerful physical and procedural animation techniques in a single creative environment. View Havok’s extensible end-to-end character content creation pipeline spanning physics, animation, and real-time behavior asset composition and conditioning.
19. ETQW Threading overview Game Logic Bot AI Sound Engine Renderer Sound Driver Graphics Driver MegaTexture Transcoding MegaTexture Streaming
20. Mega Texture Streaming Game Logic Bot AI Sound Engine Renderer Sound Driver Graphics Driver MegaTexture Transcoding MegaTexture Streaming
21.
22. Mega Texture Transcoding Game Logic Bot AI Sound Engine Renderer Sound Driver Graphics Driver MegaTexture Transcoding MegaTexture Streaming
23.
24. Sound Engine Game Logic Bot AI Sound Engine Renderer Sound Driver Graphics Driver MegaTexture Transcoding MegaTexture Streaming
25.
26. Game Logic Game Logic Bot AI Sound Engine Renderer Sound Driver Graphics Driver MegaTexture Transcoding MegaTexture Streaming
27.
28. Bot AI Game Logic Bot AI Sound Engine Renderer Sound Driver Graphics Driver MegaTexture Transcoding MegaTexture Streaming
29.
30.
31.
32. Bot AI static const int MIN_FRAME_DELAY = 0; static const int MAX_FRAME_DELAY = 4; HANDLE gameSignal; HANDLE aiSignal; Int gameFrameNum; int lastAIGameFrameNum; void GameThread() { for ( ; ; ) { SetCurrentGameOutputState(); AdvanceWorld(); SetCurrentGameWorldState(); gameFrameNum++ // let the AI thread know there's another game frame ::SetEvent( gameSignal ); // wait if the AI thread is falling too far behind while( lastAIGameFrameNum < gameFrameNum - MAX_FRAME_DELAY ) { ::SignalObjectAndWait( gameSignal, aiSignal, INFINITE, FALSE ); } } }
33. Bot AI void AIThread() { for ( ; ; ) { // let the game thread know another AI frame has started ::SetEvent( aiSignal ); // never run more AI frames than game frames while( lastAIGameFrameNum >= gameFrameNum - MIN_FRAME_DELAY ) { ::SignalObjectAndWait( aiSignal, gameSignal, INFINITE, FALSE ); } lastAIGameFrameNum = gameFrameNum; SetCurrentAIWorldState(); AdvanceAI(); SetCurrentAIOutputState(); } }