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