|
[In this Intel-sponsored Gamasutra feature, game programming veteran Orion Granatir presents a practical look about how to use multi-core CPUs to thread game elements, in this case artificial intelligence (AI) for your game.]
Artificial intelligence (AI) drives gameplay, whether you're
talking about a complex system of AI or a simple scripting engine. To really
maximize your AI's potential, it needs to utilize the entire CPU and this means
threading. This article examines how to thread a simple AI and some of the
challenges in writing an AI that truly scales with multi-core CPUs.
The concepts described in this article were used in the
creation of the multithreaded AI of Intel's Smoke demo. This demo showcases
functional and data decomposition with multiple game technologies, including
physics, audio, and AI. The source code is free to download at Whatif.intel.com.
Why Thread?
Imagine you want to update a bunch of AI monsters. If you
have only one core, all of those monsters must be processed in order. However,
if you have multiple cores, you can process them at the same time.
More cores, and thereby more active threads, means you can
have more monsters in your game!
A Simple AI
Let's start by defining a simple AI. Our AI is going to be
an enemy that idles, waiting to spot the player. When it spots the player it
runs at them and explodes when it gets close.
Many games use a state machine to define AI behavior. So,
let's define our states...

The first state is AI_SPAWN. This is the initial state and
sets up the AI. Once the setup is complete, the AI is put into the AI_IDLE
state.

While in AI_IDLE, the enemy does a ray cast to determine
if it can "see" the player. If the ray cast reaches (hits) the player, the
state changes to AI_ATTACK.

While the AI is in the AI_ATTACK state it finds a path to
the player. When it gets close it changes to AI_EXPLODE, hopefully causing
damage to the player.

|