729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
LINKOPINGS UNIVERSITET Pathfinding i spel Inte bara optimalt, utan även realistiskt. Richard Wiik
9/16/2011
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
Abstrakt
Hur AI används för att avgöra hur AI karaktärer väljer hur och var de ska gå i
Första Persons Actionspel. Vilka olika system att göra detta som är populära just nu, dess
skillnader och fördelar samt hur man får agenten i spelet att verka realistisk.
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
Innehåll_Toc304203218 1) Inledning ............................................................................................................................ 1 2) Pathfinding ......................................................................................................................... 2 2.1) Waypoint based system................................................................................................... 2 2.2) Navigation mesh ............................................................................................................. 3 2.3) Skillnader på Navigation Mesh och Waypoint based system ......................................... 4 3) Hur AI väljer vart och hur den skall röra sig ..................................................................... 6 3.1) AI val .......................................................................................................................... 6 3.2) Bästa valet ................................................................................................................... 7 3.3) Att ta sig till det bästa valet....................................................................................... 10 3.4) Att göra det realistiska valet ..................................................................................... 11 4) Referenser ........................................................................................................................ 12 729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
1) Inledning
Användning av Artificiell Intelligens (AI) är utbrett inom dagens spelindustri.
Styrkan, och det som möjliggör en stor utveckling av AI inom spel så som Killzone, Quake
eller exempelvis Starcraft, är de virtuella världar och karaktärer som skapas. Människor som
spelar dessa spel kan interagera med dem i en dynamisk omgivning och hålla AI:s utveckling
i full gång[1]. Det sagt har utvecklingen gått otroligt mycket framåt inom AI i spel och
kommer fortsätta.
Denna artikel kommer inte gå djupgående inom allt vad AI i spel innebär för att
ämnet är för stort för att täckas av mig. Istället kommer inriktningen ligga på agentens beslut
kring att röra sig i spel, så kallat pathfinding. Denna rapport inriktar sig på hur pathfinding
genomförs och byggs upp samt hur beslutfattandet hos den intelligenta agenten avgör vilken
väg som inte bara är den optimala, utan även att få agenten att verka realistisk för spelaren.
1
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
2) Pathfinding
Om AI styrda karaktärer(agenter) skulle blir nedsläppta i en virtuell spelvärld
som för en vanlig spelare skulle vara en fullt utvecklad värld redo att upptäckas med hus, fast
mark och så vidare, är det för NPCs ett tomrum. För att en AI karaktär skall kunna röra sig
behöver den veta vart den kan gå, även om marken under NPCn är fast. För att en NPC skall
veta vart den skall gå används huvudsakligen två olika system. Det första systemet kallas
”waypoint based system”, det andra kallas ”navigation mesh”. För att vi ska kunna gå vidare
behöver vi lära oss om dessa två system.
2.1) Waypoint based system
Waypoint based system (WBS) är det systemet som varit standard sen AI i tog
steget in i spelvärlden. WBS är ett nätverk av noder, där kopplingarna emellan dessa visar för
NPCn var den kan gå utan att riskera att gå rakt in i en vägg. Dessa noder sätts ut med
mellanrum som oftast på två meter eller mindre[2], där varje nod innehåller information om
avstånd till sina grannoder. Detta betyder att agenten ej kan gå utanför ramen för dessa noder,
vilket påtvingar ett väldigt tätt nodnätverk. Figur 1visar hur ett sådant system skulle kunna se
ut. Dock behövs det ett otroligt mycket större antal noder än vad som visas på bilden, men för
att inte göra visningen av WBS systemet för rörigt är det simplifierat.
2
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
Figur 1) Ett waypoint based system över Halaa, en stad I spelet World of Warcraft [3].
Systemet är välanvänt än idag, men är utvecklat från en tid när AI utvecklingen i spel var
väldigt begränsad[3]. Paul Touzour presenterar i boken ”AI Game Programming Wisdom”[4]
ett alternativ till WBS, kallat Navigation mesh.
2.2) Navigation mesh
Navigation mesh (NavMech) är ett nätverk av polygoner som läggs ut över
områden där AI karaktärer har möjlighet att röra sig. Dessa polygoner som byggs utöver
världen binds ihop till ett stort nätverk i dess hörn (vertex). NavMesh specificerar det vill säga
inte exakta gångmönster, utan allt inom en NavMesh polygon är mark där agenten vet att det
är möjligt att röra sig.
3
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
Figur 2) Ett Navigation Mesh system över över Halaa, en stad I spelet World of Warcraft[3].
2.3) Skillnader på Navigation Mesh och Waypoint based system
Över stora områden kräver WBS ett otroligt stort antal noder eftersom de är
tvungna att sitta tätt. NavMesh klarar stora områden genom att markera alla områden med en
stor polygon som säger att allt inom det här området är gåbart område för AI karaktären. WBS
skulle kunna ha färre noder, men detta resulterar lätt i orealistiska rörelsemönster, för agenten
riskerar då röra sig i ett ”zick-zack mönster”. Är noderna tätt placerade blir även det ett zickzack mönster, men mindre märkbart eftersom de sitter så pass tätt. Zick-zack mönster kan
mjukas upp med exempelvis en teknik som kallas Cubic Hermite Spine.
Men det finns ingen information i spelvärlden som förhindrar att denna uppmjukning av
gångvägen gör att AI fastnar eller ramlar utför ett stup. NavMesh däremot deklarerar exakt
var AI kan röra sig, och kan välja en optimalare väg och använda exempelvis Cubic Hermite
Spine tekniken för att få en mer realistisk gångväg från start till mål.
4
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
Många av dagens spel erbjuder en föränderlig miljö (lådor, förstöra väggar,
osv), WBS har problem med detta, då de inte har möjlighet att ”gå runt” sina kopplingar,
resultatet blir att AI behöver göra en back-track sökning för att hitta en alternativ väg, om
exempelvis en låda blockerar den enda WBS gången på exempelvis en bro. NavMesh skulle
erbjuda att gå runt lådan utan mycket extra sök-kostnad. WBS kan undvika detta med mer
waypoints, men det betyder större sökningar i WBS trädet.
Ytterligare skillnader är att olika WBS behövs för om det är AI i spelet som är
olika stora eller har en annan motorik, exempelvis i Battlefield 2 där bilar och stridsvagnar
förekommer. Om Battlefield 2 hade använt ett WBS system i sitt spel skulle varje fordon
behöva ett eget waypoint system, vilket resulterar i ett otroligt extra arbete. I NavMesh
behöver agenten bara vara medveten om sig själv och sin egen storlek så klarar den att röra
sig i systemet, det vill säga kan den röra sig i polygonerna utan att krocka.
Ytterligare en limitation för WBS är, som tidigare nämnt, att AI inte kan gå utanför sina
waypoint-kopplingar, så i spel där strider sker på nära avstånd, exempelvis med svärd eller
knytnävar, är AI fortfarande begränsade till sitt WBS så att röra sig mobilt blir väldigt
olämpligt.
5
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
3) Hur AI väljer vart och hur den skall röra sig
Nu har vi täckt hur vi möjliggör för agenten att röra sig i en spelvärld, men hur
agenten väljer hur och var den skall gå kvarstår. I och med att olika spel har olika uppgifter
för vad AI ska göra i spelet det används i har jag valt att utgå från ett spel för att kunna ge
konkreta exempel, spelet som jag kommer ta exempel från kallas Killzone. Killzone är ett
Första Persons Actionspel som kom ut 2004 och är uppbyggt med ett Waypoint based system
(WBS), vilket är täckt i en tidigare del av denna rapport, möjliggör för AI karaktärer att röra
sig runt i spelvärlden.
Killzone, likt många andra spel, använder noderna som utgör WBS för att lagra annan
information än bara nodens plats i världen och avståndet mellan den och angränsande noder,
det är denna information och hur den hanteras av AI som gör ett bra spel med trovärdig AI.
Samtliga sökningar som görs inom detta område är gjorda med A*.
3.1) AI val
När AI ska välja vart den skall förflytta är det mång faktorer som behöver
övervägas, framförallt är det viktigt att påpeka att dessa beslut inget fungerar som en min-max
graf, då inget i världen är helt säkert. Utöver det finns det praktiskt problem, exempelvis hur
stort område klarar agenten att söka av för att hitta en lösning. Ett för stort område skulle
exempelvis kunna leda till att för mycket datorkraft går åt till AI eller att sökningen tar för
lång tid så reaktionsförmågan hos agenten blir för långsam. Dessa sökningar är AI
beslutcykel, det betyder att denna sökning beslutar AI kommande drag. Hur ofta denna
sökning genomförs avgör hur ofta AI beslutar sig om vad denne ska göra. Killzone löste detta
att på ett ungefär förflyttade sig AI under en till tre sekunder från A till B, och vid ankomst
gjordes en ny sökning. Detta för att undvika att mitt under en förflyttning söka efter en ny
målnod, vilket kan resultera i att AI springer runt otroligt länge utan att nå ett enda mål[2].
Killzones AI är inriktad på att strida, mot både och AI motståndare och riktiga spelare. För att
nämna några exempel på attribut AI måste ta hänsyn till vid ett beslut om vart AI vill gå, är:
6
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
•
Avstånd till närmaste fiende
•
Vilka vapen den har till sitt förfogande (avgör vilket avstånd AI vill vara gentemot
fienden)
•
Avstånd till vänligt sinnad AI
Och så vidare. Tanken med dessa exempel är att visa att attributen är varierande både
beroende på tid, men även från vilken plats sökningen görs. Detta betyder att nya sökningar
måste göras, och nya resultat bearbetas. Exempelvis om AI vill röra sig från position A till B
måste en sökning göras över både positionen som man är på, samt den man vill röra sig till.
Utöver det tillkommer det vägen från A till B och varje nod längs vägen agenten planerar att
gå.
3.2) Bästa valet
Agenten måste därför undersöka sin omgivning och utefter det besluta vart
denne ska röra sig. För att fortsätta att ta exempel från Killzone är en av de vanligaste
reaktionerna att finna skydd när denne blir attackerad. WBS noderna är informationsbärarna,
information som lagras i dessa noder får aldrig ha ett negativt värde för att förhindra att
noderna negerar varandra[2]. Först måste AI limitera dess sökfält, det gör den genom att ta
alla noder som är runt agenten i ett cirkulärt område runt sig själv. Detta är nödvändigt för att
minska sökningen och oftast är ett närmare alternativ bättre för AI, samt är det nödvändigt för
nästa sökning, som är nämnt i del 3.1.
Som exemplet är, att AI ska hitta det bästa skyddet mot dess fiender gör den en
”line of sight” (LoS) sökning utifrån positionen dennes fiender har. Om den möter andra AI
motståndare står de antagligen på en nod, men om det är en riktig datorspelare står denne
eventuellt ej på en nod. I sådana fall görs en avståndssökning till dennes närmaste nod, och
LoS sökningen görs utifrån den. ”line of sight” sökning går till så att utifrån varje nod som är
inom AI karaktärens område (den cirkulära sökningen som gjordes först), där det avgörs om
en nod har partiellt skydd, helt skydd eller inget skydd alls mot skytten. Beroende på får varje
nod inom AI område ett värde, 0 för inget skydd eller 20 för skydd. Om det är flera skyttar
adderas deras värden och ett totalt värde skapas. Givetvis måste många fler beräkningar av
liknande sort göras, men i slutändan kommer den nod som ger det högsta skyddet och är
närmast att väljas av AI karaktären, och det blir målnoden dit den vill röra sig.
7
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
Killzones tillvägagångsätt för att lösa LoS problemet är annorlunda gentemot
vad jag har uppfattat som standard för hur detta problem löses. Varje nod w lagrar beroende
på om agenten är sittande eller stående (s) åt åtta olika riktningar d i ett polärt mönster utifrån
noden, det framgår inte hur värdet på d räknas ut, men antagligen är det manuellt eller med
hjälp av ”ray casting”, vilket jag återkommer till senare i rapporten. För bildförklaring på
polära mönstret se Figur 3. Hur som, om vi tittar på ”polar visibility” på wt noden ser vi att de
två riktningarna d1,2 norrut har värdet noll. Det betyder att om agenten befinner sig på
position wt är han skyddad från det hållet, även om en fiende skulle befinna vara z= 1 längs
d1,2. Så som exemplet på Figur 3 visar har agenten, om den står på nod wt skydd mot nod wa
om avståndet till nod wa är längre än fyra. Alltså vet agenten att den är skyddad vid nod wt
mot eventuella fiender vid nod wa.
Nod wa säger däremot att dennes riktning d mot nod wt har värdet åtta, och med värdet sju på
avståndet z mellan de två noderna så pekar informationen från wa noden att wa och wt har
LoS. Värdet på d utifrån en nod w är dock ett ”worst case scenario” värde, och om vi tittar
noga på visualiseringen av polarvärdet (Figur 3) på (wa, d) ser vi att d fick det höga värdet på
grund av att den sträcker sig precis ovan skyddet (markerad med röd linje på Figur 3).
Riktningen d utifrån wt ser vi dock ger ett mindre värde på d, som garanterat är sant. Eftersom
man kan anta symmetri i samtliga LoS beräkningar kan vi anta att wt ligger i skydd gentemot
wa, och vise versa.
Detta exempel visar, i min mening, bristerna med systemet, för även om man kan garantera att
agenten är definitivt i skydd om så är uträknat, men det finns risker att agenten faktiskt är
skyddad vid en viss nod, fastän uträkningarna säger att denna inte är det, på grund av ”worst
case scenario” tillvägagångssättet som används. Fördelen är att minnesanvändningen blir
linjär, vilket är väldigt bra. Jag nämnde tidigare att Killzone hade ett alternativt
tillvägagångssätt när det kom till LoS gentemot andra spel av liknande typ. Det är för att
informationen om LoS som Killzone har lagrat i noderna sker i andra spel under spelets gång.
Det finns en stor mängd variationer på hur detta görsi virituella 3d världar, men det är
variationer på ”ray casting”. Ray casting kan beskrivas som att utifrån agenten eller spelaren
skickas en ljusstråle ut i spelvärlden och studsar tillbaka, med information om vad den ser.
Eller som i LoS fallet, om den har möjlighet att se fienden eller inte. Detta, till skillnad mot
Killzones lösning på LoS, är att man helt enkelt får ett bättre resultat. Problemet är dock som
jag uppfattat det, är att man fortfarande inte har kommit förbi är att minnesförbrukningen
8
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
växer exponentiellt i och med avståndet som ray castingen täcker. Som allt inom AI är
exponentiella världen något man alltid vill undvika, vilket Killzone har lyckats göra, med risk
för sämre AI-motståndare i spelet. Hur ray casting fungerar rent praktiskt har jag inte till fullo
förstått, då matematiken för det ligger utanför mina kunskaper, men ett rektangulärt 3rd
mönster läggs ut i den virtuella världen, som sedan används för att räkna ut positionen av det
ray castingen träffar. Figur 4 visar hur en ray casting från punkt A till B blir avbruten av
terräng. Värt att nämna är att givetvis fungerar bara Killzones lösning på WBS baserade spel,
skulle ett spel använda Nav Mesh är Killzones lösning på LoS ej genomförbart, eftersom Nav
Mesh inte använder ett nodsystem.
Figur 3
Figur 4
9
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
3.3) Att ta sig till det bästa valet
När agenten vet vart det bästa valet är, kvarstår problemet att ta sig till denna
punkt. I spel där agenten inte behöver skydda sig mot fiender eller på annat sätt riskerar något
genom att gå en viss väg, är det ett enkelt val att välja den kortaste vägen till målnoden. I spel
som exempelvis Killzone där agentens liv står på spel, är den närmaste vägen sällan den bästa.
Figur 3) Visar den kortaste vägen från A till B, och hur denna lösning inte fungerar i shooterspel[2].
Lösningen är, till skillnad från att hitta målnoden där man söker efter det högsta värdet, att
hitta den vägen med det lägsta möjliga värdet från A till B. Attribut så som ”line of fire” eller
”inom granatavstånd” adderas från den tidigare sökningen, och sedan görs en sökning för att
hitta det lägsta värdet på en väg till målnoden. Problemet med detta är att sökningen kan bli
otroligt stor, då som visat i figur 3 är allt bakom de svarta skydden i figur 3 är möjliga
alternativ för sökningen. Killzones lösning på detta var att ange ett område som varje AI
karaktär ansvarade för och limiterade vidden av sökningen på detta sätt. Annat alternativ är att
utifrån AI ge varje nod ett progressivt högre värde desto längre noden är ifrån AI. Detta kan
dock resultera i buggar och ett fel val görs.
10
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
3.4) Att göra det realistiska valet
Mycket har skrivits om att göra det optimala valet men AI i spel behöver även
vara realistisk för att ge en bra upplevelse för spelaren. I många spel räcker det i många fall att
välja den bästa lösning, helt enkelt för att AI i spel har svårt nog som det är att göra bra val. I
spel finns ofta flera olika svårighetsgrader för spelaren att välja på. Beroende på hur bra
agenten visar sig vara är det möjligt att påverka deras beslut på två olika sätt. Antingen kan en
stor mängd sökningar göras i olika miljöer. Tittar man på medelvärdena kan man beroende på
svårighetsgrad, säga åt agenten i spelet välja det beslut som är inom ramen för
svårighetsgraden. Exempelvis om svårighetsgraden ”hard” skulle vara 120poäng och uppåt,
”normal” 90-120poäng och ”easy” 90 och nedåt kan man påverka hur bra beslut agenten, och
göra det lättare eller svårare för spelaren.
11
729G11 Artificiell Intelligens II
Fördjupningsarbete Ht -11
Richard Wiik
ricwi919
4) Referenser
[2] Straatman Remco, Willian van der Sterren and Arjen Beij
“Killzone's AI: dynamic procedural combat tactics”
Hämtat från http://www.cgf-ai.com/docs/straatman_remco_killzone_ai.pdf (2011-10-03)
[1] John E. Laird and Michael van Lent, AI Magazine volume 22
“Human-Level AI’s Killer Application”
[3] Paul Tozour, "Fixing Pathfinding Once and For All"
Hämtat från http://www.ai-blog.net/archives/2008_07.html (2011-10-03)
[4] Steve Rabin, "AI Game-Programming-Wisdom", Charles River Media
[5] Wikipedia,
http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline
Hämtat från (2011-10-03)
12