1 / 40

Motion Planning in Games

Motion Planning in Games. Pathfinding with A * Ronald Treur. Pathfinding - Intro. Eén van de meest voorkomende AI problemen in computergames Meestal is een simpel algoritme voldoende. Pathfinding - The Beginning.

regina
Télécharger la présentation

Motion Planning in Games

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Motion Planning in Games Pathfinding with A * Ronald Treur

  2. Pathfinding - Intro • Eén van de meest voorkomende AI problemen in computergames • Meestal is een simpel algoritme voldoende

  3. 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

  4. 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

  5. Avoiding Objects - Random

  6. Avoiding Objects - Random

  7. 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

  8. Avoiding Objects - Tracing

  9. Avoiding Objects - Tracing

  10. Avoiding Objects - Tracing • 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

  11. Avoiding Objects - Tracing

  12. Avoiding Objects - Tracing

  13. 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

  14. 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

  15. Pathfinding - Breadth First Search

  16. Pathfinding - Breadth First Search • Bi-directional werkt efficiënter

  17. 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

  18. Pathfinding - Dijkstra’s Algorithm

  19. 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

  20. 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

  21. Pathfinding - Best First Search

  22. Pathfinding - Best First Search

  23. 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)

  24. Pathfinding - A* 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

  25. 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

  26. Pathfinding - A*

  27. Pathfinding - A*

  28. Pathfinding - A*

  29. 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

  30. 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

  31. 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

  32. A* - Smoothing

  33. A* - Smoothing

  34. 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

  35. A* - Smoothing Solutions • Oplossing 2 • Postproces het pad met een smoothing functie

  36. A* - Smoothing Solutions

  37. A* - Smoothing Solutions

  38. 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

  39. 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

  40. Pathfinding - Questions ?

More Related