Anton Brunberg,

Relevanta dokument
Richard Wiik 9/16/2011

Kognitionsvetenskapliga Programmet LiU. AI i spelet Magicka. Gruppbeteende/Grupprörelser. Jonathan Nilsson

Lektion 2: Sökagenter. Robin Keskisärkkä

DEN RUNDA TUNNELN EN UNDERSKATTAD FIENDE

Reagera på WoW-event Att använda OnUpdate Introduktion Att kapa funktioner Automatisering och AI

TJUVSTARTER I AGILITY - en kamp i envishet

Artificiell Intelligens inom datorspel Är det ett seriöst ämne?

729G Artificiell jakt och flockbeteende inom datorspel

Artificiell intelligens i en virtuell värld

Föreläsning 3.1: Datastrukturer, en översikt

Artificiell intelligens i spel

Programmerbara kretsar och VHDL 2. Föreläsning 10 Digitalteknik, TSEA22 Oscar Gustafsson Institutionen för systemteknik

16. VOLLEY Volley är tillåtet dock inte på serven.

Vägplanering och vägavrudning med SSF i navigationsnät

LEK MED BOLLEN. Svenska Fotbollförbundet

Kombinationer och banor i agilityträningen

Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

FÖRKORTA DIN VÄG PÅ BANAN

Uppdrag för LEGO projektet Hitta en vattensamling på Mars

Orienteringsteknik. Steg 1: Att förstå kartans symboler. Steg 2: Att förstå kompassen. Steg 3: Att förstå kartan. Steg 4: Koncentration.

Tips för laget/gruppen

Försvar. 1. Förberedande försvarsträinng (5 eller 6 spelare). 2. Försvar mot 1:a-tempo följt av 3:e-tempo (minst 6 spelare).

KIF HFK P04 7 MANNA SPEL. Spelidé och organisation för 7 manna spel

Lektion G43 Artificiell intelligens. Robin Keskisärkkä Ellinor Ihs Håkansson Cornelia Böhm

Instruktion Finta/dribbla

Språkäventyret. Mål. Verktyg. Inledande arbete

BANVERKTYGET. Verktygen

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Bermudatriangeln där alla problem försvinner spårlöst av Eva Bertilsson och Emelie Johnson Vegh publicerad i Canis 2008

Självständigt arbete på grundnivå

AIK P03 Träning v Träningsupplägg. Johan Berg

Räkna med Rutiga Familjen

Speldesign och projektledning Specialkurs 2B Spelprogrammet VT

Nr Hunden får inte visa störande aggressivitet eller tydlig skygghet. Hunden förs till prestationen försedd med munkorg.

Kort Sammanfattning av Schack MAS

Laboration D159. Sekvensnät beskrivna med VHDL och realiserade med PLD. Namn: Datum: Epostadr: Kurs:

Föreläsning Datastrukturer (DAT037)

Programmeringsappar. Av Alex

Spelutveckling - Gameplay. Design och produktion

Föreläsning Datastrukturer (DAT036)

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

12 Systemspecifika regler Europabanan Generellt Standardbanor... 4

Slutrapport för Pacman

Spekulativ exekvering i CPU pipelining

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Användarmanual Wapspel

[ÖVNINGSBANK] Sollentuna FK. Träffa linjen

Organisation: 4v4, boll, 35x20m 15min, 2 småmål. Anvisningar: När man är på sin egna planhalva får man bara spela 2 touch

Inbollning. Bagger 2 & 2: Parabola bagger som skickas rakt fram i axelhöjd utan båge (med böjda knän).

Genetisk programmering i Othello

Föreläsning 6. Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf

Real-time requirements for online games

3 augusti (G) Programmering: Lego

// //Constructor public function Main_Playground() { init(); }

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

Formula Dice Regelverk

Regler för Robotfemkamp under Robot-SM 2011

Post Mortem för Get The Treasure!

Några små tips om att träna på utsatt fågel

passning Passningsövningar stegrande svår 1/9 Created with Sideline XPS Trainer - 2/9

Föreläsning 6 Datastrukturer (DAT037)

Fotbollslekar. Ett kompendium av bra övningar för att leka och lära sig fotboll

4.3 Försvarsspel 2v2

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Artificial Intelligence

Övningar. Utespelare

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

Utveckling Av Artificiell Intelligens Till Datorspel LTH Ingenjörshögskolan vid Campus Helsingborg Datateknik

Datastrukturer. föreläsning 8. Lecture 6 1

BESTÄLLARSKOLAN #4: VAD KOSTAR DET ATT GÖRA FILM?

Programmering II (ID1019) :00-11:00

Teckenförklaring. Försvarspelare. Anfallsspelare. Spelare med boll. Löpning utan boll. Löpning med boll. Bollens väg. Kon

Fotbollsskolan. fintdribbling.indd

Passning och mottagning

Fotbollsövningar 2 P08 Mariaskolan

Tränarutbildning 6 för P03: Översikt teman 2. Översikt om hur gör vi 1. Hemläxa 2. Övningar v Andy Alzuhn

Din skattade profil inför 2012

Objektorientering i liten skala

JavaScript del 3 If, Operatorer och Confirm

Bouleträning. (Ovanstående text är inspirerad av Anders Gerestrands hemsida: geocities.com/boulesidan.)

Del 1, trepoängsproblem

Dagbok Mikael Lyck

FM-ultralång, Salo

Planering av ett större program, del 2 - for och listor. Linda Mannila

Veckans regelnöt nr

= anfallande spelare, spelare i anfallande lag eller i ett av lagen. = tredje lag t ex vid spel med 3 smålag eller joker. = spelarens väg med boll

Föreläsning 7 Datastrukturer (DAT037)

Förberedelser. Spelplanen

Ha rätt sorts belöning. Åtta tips för bästa sätt hur du tränar din hund. Grunden till all träning:

SLALOMINGÅNGAR hur svårt kan det vara?

Rapport. Engagemang. - Solis, Brian, 2011 (s. 282)

ALGORITMER, OPTIMERING OCH LABYRINTER

S i d a 1. Goda råd. från en erfaren. kranförare

Träningsguide för barn och ungdom inom IK Huge Fotboll

Välkommen till Ipad för nybörjare

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Fotbollsövningar UPPVÄRMING:

Upptäck 7 trick som förvandlar ditt nyhetsbrev till en kassako

Programmering i Scratch 2.0

Laboration D184. ELEKTRONIK Digitalteknik. Sekvensnät beskrivna med VHDL och realiserade med PLD

Transkript:

INSTITUTIONEN FÖR DATAVETENSKAP, LINKÖPINGS UNIVERSITET AI som är emot dig Ett arbete om AI i spel Anton Brunberg, antbr036@student.liu.se 2010-09-13

Innehåll Inledning... 3 Scripts... 4 Finite State Machine... 6 STRIPS... 8 Förflyttning... 10 Pathfinding... 10 Sökningen... 10 Nodkostnader... 11 Navigation Mesh... 12 Varför Navigation Mesh?... 13 Diskussion... 16 Referenser... 17 2

Inledning AI är ett vitt begrepp, även om man tar ner det på nivån som berör TV- och datorspel så kan AI skilja sig väldigt mycket från spel till spel, det kan även finnas en mängd skillnader inom spelet själv. Allt som i ett spel ger en illusion av intelligens i spel kallas för AI, även om denna illusion inte ens beter sig just intelligent. Även om AI:n är satt på att lösa vissa svåra uppgifter i ett spel så betyder inte det att den kan agera dumt och fortfarande utgöra en bra illusion av intelligent beteende. En AI som gör för många rätt på för få misstag blir väldig svår för spelaren att kunna vinna över, något som speldesigners fått lära sig att justera. Det är en av de stora saker som skiljer AI i spel från många andra delar inom AI, den har två viktiga faktorer som den måste ta hänsyn till för att kunna bli lyckad. Först som vi nämnde så måste den vara utmanande, men den får inte vara för bra, ett spel med en AI som aldrig gör ett fel blir väldigt svårt att vinna mot. Detta löser de flesta spelutvecklare genom att låta spelaren justera olika svårighetsgrader i spelet. En annan sak som är viktig för en AI i ett spel är hur kul den är, nog för att den ska klara av en massa uträkningar och bete sig på intelligenta sätt, men man får inte glömma att det är ett spel, och spels första uppgift är att underhålla spelaren. (Seemann, 2004) Det finns två viktiga AI-typer när man pratar om AI i spel, deterministisk och ickedeterministisk, en deterministisk AI är regelstyrd och har en regel för varje tillfälla, den lämnar aldrig något till slumpen. Sådan AI är simpel att programmera men känns oftast stel, efter ett tags spelande så kommer ren även att ha upprepat sig tillräckligt för att kännas repetitiv såväl som förutsägbar. Ickedeterministisk AI baserar sig istället på att lära sig, den behöver inga regler för minsta sak, då den ickedeterministiska AI:n blir mycket mindre stel så blir den även svårare för spelutvecklarna att testa, eftersom den inte har regler för alla olika händelser så måste spelutvecklarna testa alla möjliga sätt som spelarna kan agera på för att se att AI funkar på alla möjliga spelsätt. (Seemann, 2004) 3

Scripts Idag kan man ändra saker i många av de spel som släpps på marknaden. Vissa spel släpper även sina utvecklingsverktyg till spelarna så att de enkelt kan skapa nya banor eller äventyr med samma spelmotor. En av de största och även ett av de största sådana verktyg som kom till marknaden var BioWares Neverwinter Nights toolset Aurora. Med Aurora så kunde spelarna själva bygga upp till hela världar, skapa komplexa dialog-träd och även göra events för de datorstyrda agenterna att agera efter. Det som styr allt i Aurora är scripts, ett simpelt sätt att kunna skriva saker utan en egentlig kodvana, allt man behöver kunna är de mest fundamentala kodsträngar så som if-satser och programmeringsoperatorer så som == och >. Script i Aurora (Bild från www.bioware.com) Fördelar med scripting är att de som sagt inte lägger lika mycket vikt vid att utvecklaren kan programmera utan hjälper till en bra bit på vägen då det gäller utvecklingen av spel så man kan koncentrera sig på att lägga fram spelets story mer än att fastna i kodning. En annan mycket bra sak med scripting är vid mellansekvenser i spel. Istället för att ta spelaren ur spelmiljön för att sätta in en kort film så sköts detta med script för att hålla kvar spelaren i samma miljö. Nackdelar med scripting är att spel som använder dem för mycket kan ofta kännas stela. Ta ett ställe i ett svårt spel som du blir tvungen att spela om ett tiotal gånger, i sådant fall kommer du få uppleva stelheten i spelet på så sätt att det kommer förflyta likadant alla tio gånger så länge som du spelar någorlunda liknande varje gång. 4

Vilka spel använder scripting och hur? Förutom Neverwinter Nights som tidigare nämnt använder scripting vid det mesta i spelet så gör även det enorma spelet World of Warcraft det i form av LUAfiler. En av de vanligaste spelscriptstyperna som används idag. I World of Warcraft, eller WoW så kan man lätt märka scriptens enkelhet. Vissa datorstyrda agenter säger dialoger när de blir slagna på, om du slår på ett hundratal av samma typ så kommer du enkelt märka hur ofta dialogen kommer upp. Andra elakare agenter kan göra vissa saker som respons på dina egna handlingar. Om du försöker använda en egenskap i spelet så kommer de agenter som kan använda någonting för att förhindra dig att använda den egenskapen mot dem. 5

Finite State Machine Ett annat sätt att programmera agenters beteende i spel är så kallad Finite State Machine, eller FSM. FSM bygger på att det finns olika states för agenten, olika saker kan trigga dessa states så som att agenten blir skadad eller att agenten ser spelaren eller någon annan agent. Detta gör den mycket mer flexibel än scripts där allt exekveras av spelaren kommer inom en viss zon eller triggar något i scripten. En i ett spel som körs av FSM är hundar i första Quake nedan visas en bild på hundens olika states och deras innehållande ageringsplan. (Brownlee) visar på sin sida hur hunden agerar i de olika states som finns, de gråa rutorna med svart ram runt är de som får de olika states att aktiveras. Rutorna i vitt är typiska för all AI i Quake och de i grått är specifika för just den agenten. Fördelar med FSM är som det står på AI-junkies sida om FSM att den är simpel att koda, då den på många sett liknar sctrips i enkelhet beräknat. En annan mycket bra sak är att man lätt kan debugga FSM tack vare sin nedbrytbarhet till de states den kan befinna sig i och applicera en spårningskod på varje state för att se var den fastnar. Den följer deterministiska regler vilket är till fördel då den tar liten tid att köra kod som om A så gör B. FSM hjälper även till att skapa en mer trovärdig AI, då även vi ibland kan komma i states vilket gör att vi på enklare sätt kan förstå dens agerande och på så sätt finna den mer trovärdig. Ta bara hunden i exemplet ovan, så fort den tar skada av något slag så kommer den att attackera den som orsakade skadan, oavsett om det är en spelare eller en annan agent i spelet. Detta kan på många sätt tyckas likna en vanlig hunds beteende. (AI-Junkie) 6

Nackdelar med FSM är att de bara kan befinna sig i ett state åt gången vilket gör att om man ska programmera in någon slags personlighet i agenten så kommer man att programmera ett liknande beteende flera gånger i olika states, det finns med andra ord ingen högre nivå av states utan alla ligger på samma plan. (Champandard, AI-game dev) En regelstyrd FSM tenderar att bli väldigt förutsägbar då det är lätt att se hur den ska agera. (Brownlee) En annan nackdel med FSM är just dens enkelhet, då mer och mer krävs idag av spelen på marknaden så måste nya saker implementeras, detta görs genom att använda det underliggande programspråket för att skapa saker som minne eller räknare. (Champandard, AI-game dev) Vilka spel använder FSM och hur? Förutom det redan nämnda Quake så är ett mycket klassiskt spel som använder sig av FSM, PacMan. Spökena i PacMan jagar spelaren ända tills denna käkar ett så kallat power pill varpå spökena ändrar state från att jaga till att fly och försöker istället hålla sig borta från spelaren. I sportspel så hanteras spelarna som FSM, även hela lag hanteras som FSM men på en annan nivå, spelaren har states så som att de ska jaga bollen medan lagen har ett state så som att de ska försvara mål (kanske ligger de i överläge och vill dra på tiden tills matchen är över) (AI-Junkie) 7

STRIPS Stanford Research Institute Problem Solver, även kallat STRIPS är en relativ ny implementering inom spel då den sattes i bruk 2005, dock har den funnits en bra tid innan då den faktiskt skapades på tidigt 70-tal. (Champandard, AI-game dev) STRIPS är en planerare, och i planerare så försöker agenten uppnå ett mål av något slag genom att eliminera de faktorer som hindrar den från att uppfylla målkraven. Ta i ett actionspel där AI:n försöker att döda spelaren, en sak för AI:n kan vara att slå ner spelaren, men då måste vi befinna oss nära spelaren. Ett annat sätt kan vara att kasta en handgranat på honom, dock vill AI:n inte stå lika nära när den gör det då handgranaten exploderar. Ett av målen i STRIPS brukar vara just att döda spelaren, dock måste ofta AI:n på någon sätt veta var spelaren befinner sig för att kunna göra så. Därför brunkar de ofta ha ett mål med lägre prioritet innan den har fått syn på var spelaren gömmer sig. Det kan vara saker som att stå still, eller patrullera ett område. Detta kommer AI:n göra ända tills han ser spelaren och kan uppfylla sitt mål med högre prioritet. (Orkin) Ett exempel på hur STRIPS kan se ut (Bild från Ai game dev) Fördelar med STRIPS: Då STRIPS inte arbetar med states så kan samma mål nås på fler olika sätt mycket enklare. När man använder FSM så måste man göra ett state för varje vapentyp som AI:n är utrustad med, som jag förklarade innan då skiljer sig handgranater och knytnävar ganska mycket. STRIPS har istället en inbyggd sak som kallas för dependency tracking som håller koll på vilka saker som måste uppfyllas för en handling ska kunna utföras. Så genom samma plan kan två olika AI försöka eliminera spelaren på två olika sätt då de har olika förutsättningar. Detta gör att med STRIPS så får man enklare skillnad på olika fiender som man möter i spel och slipper den stora klumpen med fiender där alla gör exakt likadant. Då man kan göra allt detta med FSM genom att skapa ett träd till varje unik AI så gör STRIPS det mycket enklare, istället för att koda 20 olika träd för 20 olika fiender så måste man bara sätta ihop ett träd och dela ut olika egenskaper till AI:n. (Orkin) (Champandard, AIgame dev) 8

Nackdelar med STRIPS: Då STRIPS i många fall är en väldigt bra lösning så finns det ännu enklare implementeringar som kan lösa samma uppgift. Och eftersom STRIPS bygger få första ordningens logik (FOL) och kräver en kunskap inom den domänen så kan det vara smart att använda sig av A*. (Champandard, AI-game dev) Vilka spel använder sig av STRIPS och hur? F.E.A.R. av spelföretaget Monolith använder sig av en blandning mellan STRIPS och A*. Efter att ha gjort en plan med STRIPS så lade de en kostnad på alla handlingar som AI:n kunde utföra. Om vi sätter en kostnad för att kasta en handgranat till 1.0 och att handlingen kräver att vi har en handgranat, och kostnaden för att slå till spelaren till 2.0. Vi utrustar en AI med en handgranat. Målet för AI:n är att eliminera spelaren. Först kommer den att kasta iväg handgranaten mot spelaren, om spelaren fortfarande lever kommer AI:n springa mot spelaren för att slå honom. A* hjälper till på två sätt i detta fall. Först så söker den i STRIPS-planen efter den plan med lägst kostnad. Sedan när AI:n ska fram till spelaren så söker även A* efter kortaste vägen till spelaren. På så sätt så återanvänder de kod på ett då väldigt nyskapande sätt. 9

Förflyttning Efter att snabbt gått igenom tre grundprinciper för hur en AI kan agera i spel tänkte jag nu lite mer grundligt gå in på hur AI i spel förflyttar sig. För vad vore en AI som enbart stod still och försöker interagera med spelaren? Pathfinding En väldigt viktig komponent inom spel-ai är Pathfinding, det vill säga den komponent som gör att AI:n hittar mellan punkt A och punkt B. Givet att vägen mellan punkterna är mer komplex än en rak gång utan hinder så använder man sig av en sökalgoritm. Idag är den vanligaste sökalgoritmen A* då den är både komplett och optimal. (Seemann, 2004) Även om A* är både komplett och optimal, så finns det ett smärre problem vad gällande användningen i mer komplexa spelmiljöer. För att simplifiera en stor värld som AI:n kan röra sig i så används så kallade noder. Noder är en plats i världen dit AI:n kan söka sig till, genom att koppla samman noderna får vi ett nät som kommer vara AI:n möjliga rörelseschema. Så länge varje nod är kopplad till någon av de andra noderna i nätet så kommer AI:n att kunna ta sig mellan två givna noder. (Seemann, 2004) Sökningen Nu när vi har ett område att söka av så kommer vi gå igenom lite psuedokod för hur A* söker av vägen till målet. Add the starting node to the open list while the open list is not empty: current node = node from open list with the lowest cost if current node = goal node then: path complete else move current node to closed list examine each node adjacent to the current node for each adjacent node if it isn t on the open list and it isn t on the closed list and it isn t an obstacle move it to the open list and calculate cost Kod från Seemann(2004) Som vi ser i koden här över så är det första vi gör att lägga till startnoden i den så kallade open list, det är den lista med noder som vi vill använda oss av, det vill säga tillgängliga noder från där vi befinner oss just nu. Därefter gör vi ett måltest för att se om vi är framme på vår tänkta destination. Om så är fallet så stannar koden där, om inte så lägger vi den nuvarande noden i closed list. Den listan innehåller noder som vi inte längre anser vara intressanta, det vill säga noder där vi redan har varit. Nästa steg är att inspektera intilligande noder, se om de ligger i antingen open list eller closed list 10

eller om det finns ett hinder i vägen, typ en vägg. Om inte så flyttar vi dem till open list och räknar ut kostnaden och flyttar oss till den med lägst kostnad. Därefter repeterar vi koden tills det att vi är vid målnoden. (Seemann, 2004) Nodkostnader För att bestämma kostnaden för en nod i ett spel använder man sig av två saker, kostnaden att ta sig dit från startnoden och avståndet från noden till målnoden. Detta betyder att noder som ligger närmre mål kommer att ha en större kostnadsvärde för avståndet från startnoden, men en lägre kostnad från avståndet till målnoden. Att räkna på avståndet från start är lätt, vi aderar enbart ihop all kostnad från tidigare noders avstånd. När vi räknar ut avståndet till mål kan det bli svårare då det kan förkomma hinder på den vägen. Detta betyder att sökningen i många fall kommer att öppna noder som leder till sämre vägar, men senare kassera dessa då den hittar en nod som har mindre sammanlagd kostnad. (Seemann, 2004) Det finns andra slags kostnader som kan användas vid pathfinding, säg att det tar längre tid att gå en väg istället för en annan då den är utmärkt med lera. Då vill vi ge den vägen en högre kostnad på grund av detta. Den kostnaden är en extrakostnad som kan tilldelas varje nod. Sådan kostnad kan antingen vara statisk, så som teräng, eller dynamisk om det förefaller sig vara dåligt att stå på den noden i vissa scenarion. Om vi vill att AI:n ska undvika att bli sedd allt för mycket av spelaren så kan vi sätta noder som är inom spelarens synfällt att ha en högre kostnad. (Seemann, 2004) 11

Navigation Mesh Det finns mer än ett sätt att använda pathfinding, tidigare har jag förklarat navigering via noder, så kallat waypointing. Det finns dock gånger då waypointing blir utklassat av så kallat Navigation Mesh. Navigation Mesh är ett för spelaren osynligt 2D-lager som täcker den yta där AI:n kan röra sig på. Istället för att ge AI:n specifika punkter som den kan röra sig till så har den istället en yta varpå den navigerar. (Game Programming Gems, 2000) Meshen är uppbyggd av trianglar där varje triangel måste sitta ihop med en annan triangel på en sida, om det skulle bli avbrott så kommer AI:n inte kunna ta sig till de delar som är avskiljda från den mesh den befinner sig på. Inte heller får två trianglar överlappa varandra då det skapar krockar i lokaliseringen. AI:n bör enbart kunna vara på en position åt gången. (Game Programming Gems, 2000) När vi har vår mesh klar vill vi även att vår AI ska kunna navigera den, för att göra detta så skapar vi först och främst en kontrollpunkt. Kontrollpunkten sitter direkt under AI:n och kan aldrig lämna meshen. När vi vill att AI:n ska flytta sig så drar vi ett streck i meshen, från kontrollpunkten till önskad plats. Därefter så testar vi vårt dragna streck mot trianglarnas kanter i vår mesh. För att lämna en triangel och komma till en annan så måste vi korsa en av triangels tre sidor. Så för varje sida som vi korsar så kan vi får ett av följande tre resultat. (Game Programming Gems, 2000) 1. Sidan sitter inte ihop med en sida på en annan triangel. Vilket innebär att det finns ett hinder. Vi drar om banan för att undvika hindret och gör om testet. 2. Sidan gränsar till en annan triangel, vi flyttar kontrollpunkten till den triangeln och drar en ny linje till samma mål men som startar i triangeln vi står i. 3. Om linjen inte passerar någon av triangelns kanter betyder det bara en sak, att vi är framme vid vår önskade destination. Kontrollpunkten säger nu till AI:n att flytta sig till den platsen via den väg som har ritats upp. 12

Varför Navigation Mesh? Avsnittet nedan bygger på före detta spelutvecklare hos Nintendo, Paul Tozour, AI-blog. Det finns fler än ett skäl till varför man bör använda Navigation Mesh istället för waypoints i mer eller mindre alla fall. Kanske inte i en 2D miljö med rutnätsystem, men det är även ett av de ända fall då waypoint kan anses vara bättre. Jag kommer kort att gå igenom argumenten till varför Navigation Mesh är bättre än waypoints. 1. Vissa spel skulle kräva ett enormt antal noder. En stor och öppen yta kräver oftast väldigt stora mängder waypoints när navigation meshkan beskriva samma yta med enbart ett fåtal polygoner. Se bilderna nedan. Som vi ser på bilden ovan så krävs det cirka 30 waypoints för att täcka spelytan så att en AI ska kunna vandra nästan var som hellst. Om vi istället hade använt Navigation Mesh så hade det sett ut som på bilden nedan. Som synes så behövs inte hälften så många polygoner för att täcka samma yta. Detta innebär att sökningen för att AI:n ska kunna ta sig fram förenklas betydligt. 13

2. Waypoints får AI:n att sick-sacka. För att AI:n ska kunna röra sig mellan två noder i vår givna spelvärd så kommer den att sick-sacka fram mellan noderna, genom att använda samma miljö som i förra exemplet och markera den väg som vi vill att vår ska ta så kommer vi se hur konstigt det ser ut om en AI skulle gå så. Om vi nu gämför detta med hur det skulle se ut om vi skulle navigera mellan samma punkter fast med Navigation Mesh. Som vi ser på bilden ovan så är den helt rak. Navigation Mesh i sig skapar inte en helt rak linje utan till det så används Catmull-Rom Spline som, utan att gå in på matematiken, slätar ut kurvan mellan punkterna. Waypoints kan inte använda sig utav det då dess nätverk saknar information om kringliggande värld. Dock kan man lägga till noder så att AI:n kan gå rakt mellan alla punkter. Dock skulle antalet noder bli alldeles för stort för att kunna sökas i. 14

3. Kollisionstest behöver extra noder, medan navigation mesh klarar det utan extra tillägg. Eftersom waypoint nätet som tidigare nämnt inte har någon kunskap om kringliggande värld så får den stora problem med blockerade noder i vissa sammanhang. Om vi kollar på exempelbilden nedan så ser vi en bro med ett hinder. Hindret blockerar noden efter vilket AI:n ska navigera. Med andra ord kommer AI:n välja en annan väg, om möjligt, då den inte vet om den ska hålla till vänster eller till höger för att undvika hindret. Om vi istället skulle använda oss av en Navigation Mesh så skulle den kunna undvika hindret genom sin heuristik, som tidigare förklarat. Visst kan man undvika hindret genom att placera ut fler noder i waypoint nätet. Men det kommer i en större spelvärld ta aldeles för lång tid att söka igenom alla noder. (Tozour, 2008) 15

Diskussion Nu har vi gott igenom tre olika tekniker för AI i spel. Som det kanske märks så är de av olika ålder, vilket även innebär att de i dagens läge är olika användbara i spel. Scripts som är äldst används dock fortfarande i vissa spelutvecklarverktyg som är tänkte för folk som inte enbart är programmerare, annat än på lekmanna nivå. Även om STRIPS är långt överlägset än de andra två så är den även mycket mer invecklad och kanske inte funkar lika bra som en inkörsport till spelutveckling för lika många. Så jag tror att även om det är enkelheten som begränsar de andra två teknikerna så är det även enkelheten som gör att de fortfarande har en plats inom spel. Vad gällande förflyttning så finns det många skäl till varför man bör använda Navigation Mesh istället för Waypoints. Så varför använder man waypoints alls? Jag själv tror att det kan ha och göra med att Navigation Mesh är en nyare teknik. Waypoints har används länge i 2D spel, och översattes lätt till 3D. Det har funkat fint, och varför ändra ett vinnande koncept? Navigation Mesh är enligt Paul Tozour lika enkelt att implementera som waypoints. Dock kräver detta så klart någon som från början kan programmera in navigation meshen i spelet. Jag tror att många mindre spelföretag inte har haft råd att anställa en person enbart i egenskap av att göra en mesh. Dock kan vi numera se Navigation Mesh användas mer och mer flitigt i action-baserade spel, vilket tyder på att utvecklarna har hunnit ikapp tekniken. 16

Referenser Game Programming Gems. (2000). Charles River Media. Neverwinter Nights. (2002, July 3). EU: BioWare. AI-Junkie. (n.d.). AI-Junkie. Retrieved from http://www.aijunkie.com/architecture/state_driven/tut_state1.html Brownlee, J. (n.d.). AI-depot. Retrieved from http://ai-depot.com/finitestatemachines/fsm- Framework.html Champandard, A. J. (n.d.). AI-game dev. Retrieved from 10 Reasons the Age of Finite State Machines is Over: http://aigamedev.com/open/articles/fsm-age-is-over/ Champandard, A. J. (n.d.). AI-game dev. Retrieved from STRIPS: A New Approach to the Application of Theorem Proving to Problem Solving: http://aigamedev.com/open/reviews/stripstheorem-proving-problem-solving/ Iwantani, T. (1980, Maj 22). Pac-Man. Japan: Namco. Orkin, J. (n.d.). Three States and a Plan: The A.I. of F.E.A.R. Retrieved from http://web.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf Rob Pardo, J. K. (2005, Februari 11). World of Warcraft. EU: Blizzard Entertainment. Romero, J. (1996, Juni 22). Quake. Nordamerika: id Software. Seemann, D. M. (2004). AI For Game Developers. Tozour, P. (2008, July 26). Fixing Pathfinding Once and For All. Retrieved September 10, 2010, from AI-Blog: http://www.ai-blog.net/archives/000152.html 17