Download - Motion Planning in Games
![Page 1: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/1.jpg)
Motion Planning in Games
Pathfinding with A *
Ronald Treur
![Page 2: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/2.jpg)
Pathfinding - Intro
Eén van de meest voorkomende AI problemen in computergames
Meestal is een simpel algoritme voldoende
![Page 3: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/3.jpg)
Pathfinding - The Beginning
while not at the goalpick a direction to move toward the goalif that direction is clear for movement
move thereelse
pick another direction according to an avoidance strategy
![Page 4: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/4.jpg)
Avoiding Objects - Random
Beweeg in een random richting Doe random een stap terug en probeer het
nog een keer Als objecten klein en convex zijn kan de
player er waarschijnlijk wel langs Als objecten groot en / of concave zijn gaat dit
stukken lastiger
![Page 5: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/5.jpg)
Avoiding Objects - Random
![Page 6: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/6.jpg)
Avoiding Objects - Random
![Page 7: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/7.jpg)
Avoiding Objects - Tracing
Traceer een pad langs de randen van het object “Zet je hand tegen de muur en loop er langs” Werkt ook met grote en concave objecten Probleem: Wanneer stoppen met traceren
Wanneer de richting waar je heen wilde weer toegankelijk is
Als “de muur” ophoud
![Page 8: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/8.jpg)
Avoiding Objects - Tracing
![Page 9: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/9.jpg)
Avoiding Objects - Tracing
![Page 10: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/10.jpg)
Verbetering: Zodra je botst: bereken de lijn vanaf je positie
op dat moment tot het doel Traceer nu op oude manier tot je die lijn
doorsnijdt Stop als dit op je beginpositie is Werkt altijd!
O.a. gebruikt in Warcraft I: Orcs and Humans
Avoiding Objects - Tracing
![Page 11: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/11.jpg)
Avoiding Objects - Tracing
![Page 12: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/12.jpg)
Avoiding Objects - Tracing
![Page 13: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/13.jpg)
Pathfinding - The Smart Way
Vroeger voldoende Tegenwoordig: sneller en mooier Alternatief: bereken pad van te voren
Het snelste / goedkoopste pad vinden is hier een groter probleem dan ‘een’ pad vinden
Gebruikte datastructuur is hier veelal een graaf
![Page 14: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/14.jpg)
Pathfinding - Breadth First Search
Standaard BFS algoritme: Push de node waarin je start in een queue Loop door de queue heen tot deze op is of je een
pad hebt gevonden Haal elke iteratie een node van de queue en ga al
zijn buren langs. Stop als zo’n node het doel is. Voeg hem toe aan de stack als het een lege, onbezochte, node is.
Hou een linked-list bij met de bezochte, lege nodes
![Page 15: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/15.jpg)
Pathfinding - Breadth First Search
![Page 16: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/16.jpg)
Pathfinding - Breadth First Search
Bi-directional werkt efficiënter
![Page 17: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/17.jpg)
Pathfinding - Dijkstra’s Algorithm
Dijkstra’s “graph traversing” algoritme Loop: haal elke iteratie de dichtstbijzijnde,
nog onbezochte, node (t.o.v. de startnode) op Loop langs de buren van deze node en
initialiseer hun afstand tot de startnode of update deze eventueel
Gebruik hier geen FIFO queue voor (zoals bij BFS) maar een priority queue. Kleinste afstand heeft hoogste prioriteit
![Page 18: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/18.jpg)
Pathfinding - Dijkstra’s Algorithm
![Page 19: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/19.jpg)
Pathfinding - Best First Search
Hoewel Dijkstra’s algoritme beter werkt dan Breadth First Search qua het vinden van het kortste pad zijn ze beiden niet erg efficient
Richting waarin het doel zich bevind wordt genegeerd
Best First Search werkt beter
![Page 20: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/20.jpg)
Pathfinding - Best First Search
Best First Search Identiek aan Dijkstra’s algoritme behalve dat
het niet de afstand tussen de startpositie en de betreffende node opslaat maar de ‘geschatte’ afstand tot het doel
Snelste algoritme tot nog toe Houdt geen rekening met kosten van terrein Is niet direct, maar gedraagt zich als Trace
methode langs obstakels
![Page 21: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/21.jpg)
Pathfinding - Best First Search
![Page 22: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/22.jpg)
Pathfinding - Best First Search
![Page 23: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/23.jpg)
Pathfinding - A*
Combinatie van Dijkstra’s algoritme met de heuristiek gebruikt in Best First Search
f(n) = g(n) + h(n) f(n) is de score die aan node n gegeven wordt g(n) levert de kosten op van de goedkoopste
route naar n vanaf de start (Dijkstra) h(n) is de geschatte afstand van n tot het doel
(Best First Search)
![Page 24: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/24.jpg)
AStarSearch s.g = 0 // s is the start node s.h = GoalDistEstimate( s ) s.f = s.g + s.h s.parent = null push s on Open while Open is not empty pop node n from Open // n heeft de laagste f if n is a goal node construct path return success for each successor n' of n newg = n.g + cost(n,n') if n' is in Open or Closed, and n'.g < = newg
skip n'.parent = n n'.g = newg n'.h = GoalDistEstimate( n' ) n'.f = n'.g + n'.h if n' is in Closed remove it from Closed if n' is not yet in Open push n' on Open push n onto Closed return failure // if no path found
Pat
hfin
ding
- A
*
![Page 25: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/25.jpg)
Pathfinding - A*
Levert gegarandeerd het kortste pad op als de afstand tot het doel die h(n) oplevert in alle gevallen kleiner of gelijk is aan de werkelijke afstand tot het doel
Flexibel: kan ook gebruikt worden in Configuration space (verbind eventueel kosten aan orientatie veranderingen)
Kosten kunnen veel betekenen
![Page 26: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/26.jpg)
Pathfinding - A*
![Page 27: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/27.jpg)
Pathfinding - A*
![Page 28: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/28.jpg)
Pathfinding - A*
![Page 29: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/29.jpg)
A* - Beperkingen
Grote terreinen zullen veel geheugen en CPU tijd nodig hebben alvorens een pad is gevonden Oplossing: deel gebied op in grotere stukken
en kijk eerst op een hoger niveau naar de te nemen route
Oplossing: breek het pad op in subpaden met eigen subgoals
![Page 30: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/30.jpg)
A* - Beperkingen
Terreinen die niet grid-gebaseerd zijn kunnen met reeds behandelde methoden wel zo ingedeeld worden, waarna het A* algoritme alsnog kan worden gebruikt
![Page 31: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/31.jpg)
A* - Smoothing
Standaard ziet een A* pad er meestal niet erg realistisch uit. Het pad bevat vaak veel zig-zag bewegingen
Het proces om het pad glad te trekken noemen we smoothing
![Page 32: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/32.jpg)
A* - Smoothing
![Page 33: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/33.jpg)
A* - Smoothing
![Page 34: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/34.jpg)
A* - Smoothing Solutions
Oplossing 1 Laat de cost functie kosten in rekening
brengen als er een ‘turn’ wordt gemaakt Zorgt ervoor dat nodes met zelfde distance maar
zonder ‘turn’ voordeliger zijn Nog steeds niet erg realistisch
![Page 35: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/35.jpg)
A* - Smoothing Solutions
Oplossing 2 Postproces het pad met een smoothing
functie
![Page 36: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/36.jpg)
A* - Smoothing Solutions
![Page 37: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/37.jpg)
A* - Smoothing Solutions
![Page 38: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/38.jpg)
Pathfinding - More Complex
Bijna elk spel (zeker RTS) maakt gebruik van een ‘verbeterde’ vorm van A*
Toch is dit niet voldoende om echte intelligente manouvres te maken. Zeker als je met een groep units door een nauw steegje moet lopen gaat het vaak fout
![Page 39: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/39.jpg)
Pathfinding - More Complex De algoritmes van tegenwoordig moeten
meer: Rekening houden met terrein (Age of Empires 2
maakt hier een begin mee) Rekening houden met plekken waar mogelijke
hinderlagen kunnen komen Rekening houden met elkaar (flocking) Bochten maken in plaast van plots iets draaien Onderlinge snelheid aanpassen
![Page 40: Motion Planning in Games](https://reader035.vdocuments.us/reader035/viewer/2022062314/568148f7550346895db61908/html5/thumbnails/40.jpg)
Pathfinding - Questions
?