A Goal-driven AI Architecture for Games Software

Download Report

Transcript A Goal-driven AI Architecture for Games Software

Scaling Up To More Sophisticated AI
Without Overburdening Developers Lessons Learned
Marc Atkin
Irrational Games
AGDC 4-Dec-2004
Motivation
Why Do We Want Better AI?
• Bad AI is always noticed
• AI often inconsistent between
games – why can’t we build on
previous work?
• The AI is a big part of what makes
a game world immersive and fun
What’s Stopping Us?
• What makes AI complex?
– AI has many possible reactions to
many situations
– Many behaviours are operating on
the AI at any given time
– Hard to account for all the possible
interactions
• Impression that academic AI
research isn’t applicable (too slow,
too complex, too flaky)
The Basic Idea: Use Modularity
• It’s not just for coding anymore!
• Produces AI that is easier to
understand and debug
• Produces AI that it reusable within
and between projects
• The key point: Design the AI
architecture so that it facilitates
modularity
Tribes: Vengeance
• First-person shooter
• Emphasises speed and freedom of
movement (jetpacks!)
• 3rd in the series
AI Challenges
• AI works in service of the game:
– AI characters shouldn’t act stupidly
– yet still be fun to fight
• AI’s should exhibit diverse
behaviour
• AI’s should jetpack and ski
• AI’s should react to their environment
• AI’s should have recognizable roles
– Sniper, duelist, mortar user, etc.
System Overview
Animation
System
AI
Navigation
System
Pathfinder
Physics
System
Game
World
What makes our game
characters “intelligent”?
• A large set of sophisticated, handdesigned behaviors
• Common sense reactions
• The ability to exploit opportunities
• A consistent long term view
of tasks to be accomplished
What makes our game
characters “intelligent”?
• A large set of sophisticated, handdesigned behaviors
• Common sense reactions
• The ability to exploit opportunities
• A consistent long term view
of tasks to be accomplished
Tyrion: An architecture for
specifying and executing
AI behaviour
How Tyrion Works
Resources, Goals, and Actions
• Goal: A description of a
desired world state
• Action (or behaviour):
A method for achieving a goal
• Resource:
An entity required to
perform an action
Resource Hierarchy
Team
Squads
Vehicles
Driver/Gunners
Characters
Legs/Arms/Head
Resource Hierarchy
Team
Strategic level
Squads
Tactical level
Vehicles
Driver/Gunners
Characters
Legs/Arms/Head
Individual
Units
Motor Control
Action/Goal Hierarchy
Squad
Attack From All Sides
Attack Goals
Grunt
Duelist
Character
NormalAttack
DuelistAttack
Legs /
Arms
MoveTo Goal
FireAt Goal
MoveTo
Fire Weapon
Action Structure
• Goal satisfied by action
• Selection heuristic
– Evaluates appropriateness of action
in a given situation
• Message callback functions for child actions
• Message callback functions for sensors
• Body (Unreal script latent code)
– Typically executes over a number of game ticks
Example Action: Search
• Satisfies:
SearchGoal( target, searchDistance )
– Only action that satisfies this goal
• Child action callbacks:
– Set errorCode
• Sensor callback:
– Terminate action if target spotted
Example Action: Search (cont)
• Body:
– Store location and rotation
– ActivateSensor( TargetSensor, target )
– Loop over searchPositions:
• WaitForGoal( MoveToGoal, searchPosition)
• Fail() if MoveToGoal was not achieved
• Play LookingAround animation
• Pause AnimationTime seconds
– WaitForGoal( TurnGoal, originalRotation )
– Succeed()
Sensor Hierarchy
• Sensors can build upon one another, too
DodgeSensor: Warns a
character about incoming
projectiles
TargetSensor: Triggers
when a particular unit
is visible
EnemySensor: Maintains
a list of visible hostiles
Vision System
AI and Scripting
• High level behaviours look a
lot like scripts
• A script is essentially a onetime use behaviour
• Tyrion could be used to drive
the scripting system
Example Script
• Executes when player enters
trigger
• Spawns AI’s
• Moves AI’s into position and
has them attack player
Example Script
• Executes when player enters
trigger
• Spawns AI’s
• Moves AI’s into position and
has them attack player
Sensor activation
Posting sub-goals
Execution Model
• 10 times a second:
– Iterate over every resource:
•
•
•
•
Order unmatched goals by priority
Find actions that achieve them
Tick every running action
Tick every active periodic sensor;
send messages
• If an action completes, mark its goal as
achieved/failed; send messages
A Day in the Life of a Grunt
• A Grunt AI with three goals:
– PatrolGoal (priority 40)
– AttackGoal (priority 50, dormant)
– DodgeGoal (priority 90, dormant)
• AttackGoal will activate when an enemy is
sighted
• DodgeGoal will activate when a visible
projectile will hit the AI
A Day in the Life (cont)
PatrolGoal AttackGoal DodgeGoal
Patrol is executing
legs
arms
40
A Day in the Life (cont)
PatrolGoal AttackGoal DodgeGoal
Patrol is executing
Enemy spotted!
Sensor wakes up AttackGoal
Attack executes; posts subgoals
for legs & arms
legs
40
arms
legs
arms
X
40
50
50
A Day in the Life (cont)
PatrolGoal AttackGoal DodgeGoal
Patrol is executing
Enemy spotted!
Sensor wakes up AttackGoal
Attack executes; posts subgoals
for legs & arms
legs
40
arms
legs
40
X
50
50
40
X
50
X
arms
Projectile spotted!
Sensor wakes up DodgeGoal
Dodge executes; needs legs
arms continue executing Attack!
legs
arms
50
90
A Day in the Life (cont)
PatrolGoal AttackGoal DodgeGoal
Patrol is executing
Enemy spotted!
Sensor wakes up AttackGoal
Attack executes; posts subgoals
for legs & arms
legs
40
arms
legs
40
X
50
50
40
X
50
X
arms
Projectile spotted!
Sensor wakes up DodgeGoal
Dodge executes; needs legs
arms continue executing Attack!
Dodge finishes: legs resume
Attack subgoal
legs
50
arms
legs
arms
40
X
50
50
90
Lessons Learned
Sophisticated AI != Expensive AI
• This is not an expensive system
– No search due to scoring function on actions
– Action to goal matching only occurs when goal
list changes for the resource
– Although there are many actions running
simultaneously, at any given time a lot are
sleeping
– Most of high-level AI was written in Unreal
Script (20x slower than C++) yet it still wasn’t a
bottleneck.
Some AI is expensive
• Superficially simple systems that
require large amounts of
debugging and tweaking (e.g.
emergent AI)
• Search (e.g. planning, pathfinding)
• Line checks (e.g. vision)
Analysis (pluses)
• Character actions were very useful in
coordinating squads and chaining subactions
• Useful to think of legs and arms as
separate resources
• Architecture no harder to use than others,
but quite easily reusable for other projects
• Using squad goals worked well: helped
reduce the amount of level design work
Analysis (minuses)
• Full potential of architecture not exploited:
FPS opponents are only human-like to a
degree; their required spectrum of
behaviours is fairly limited
• Exposed too much detail to designers;
editor could have been streamlined
• We didn’t use the AI architecture to drive
the scripting system: duplication of effort
General Lessons Learned
•
•
•
•
Create AI that’s required by the game
Create debugging tools early
Leave time for tweaking
Make sure the player knows when the AI
does something cool
• Does good AI make a game fun (or is it just
that bad AI makes a game not fun)?; do
games need scripted set-pieces?
Take-home Message
• powerful AI != expensive AI
• One AI description language
can control control teams,
squads, characters, and
scripting
• A modular AI is a reusable AI –
let the AI engine handle the
interaction complexities
The End
Unused Slides Follow….
Oh No, Not Another Hierarchy!
• Control hierarchies are a dime a
dozen in the AI/robotics literature
• Tyrion’s more interesting features:
– No set number of levels
– Uniform description language and execution
model used across levels
– Separate sensing system
– Dormant goals
– Supervenience: information is sent up, goals
are sent down
Relationship to AI Planning
• Tyrion can be viewed as a Task Network (or
Partial Hierarchical) Planner
Goal A
Possible Actions
Relationship to AI Planning
• Tyrion can be viewed as a Task Network (or
Partial Hierarchical) Planner
Goal A
Possible Actions
Sub-goals
Possible Sub-Actions
Relationship to AI Planning
• Tyrion can be viewed as a Task Network (or
Partial Hierarchical) Planner
Goal A
Possible Actions
Sub-goals
Possible Sub-Actions
x
Outcome for goal A