360 likes | 642 Views
Pathfinding. Basic Methods. Pathfinding. Different types of pathfinding problems exist No one solution appropriate to every problem! Qs: Is the destination moving or stationary? Are there obstacles? What is the terrain like? Is the shortest solution always the best solution?
E N D
Pathfinding Basic Methods
Pathfinding • Different types of pathfinding problems exist No one solution appropriate to every problem! • Qs: • Is the destination moving or stationary? • Are there obstacles? • What is the terrain like? • Is the shortest solution always the best solution? • Is it required to reach a specific destination or just a partial route will do? • What map representation is used?
Pathfinding • You have heard of the A* Algorithm, the most popular & famous pathfinding algorithm • But we will first look at some basic pathfinding methods (that are not as complex as A*and more suitable than A* in various situations)… • A* will be covered in the next lesson
Basic Pathfinding • The most simple, easiest and fastest solution to pathfinding is to re-use the Chase movement…but “chase” a destination position! if(positionX > destinationX) positionX--; else if(positionX < destinationX) positionX++; if(positionY > destinationY) positionY--; else if(positionY < destinationY) positionY++; • Probably produces the most unnatural-looking path
Basic Pathfinding • OK, the better approach would be to use the Line-of-Sight Chase to get a more natural path (using line-drawing algorithm on TBE and steering forces on CE) • However, these methods are not suitable for certain scenarios. Can you figure out?
Obstacles? • Problems with obstacles • Random Movement Obstacle Avoidance • Simple and effective method • Works well in environments with relative few obstacles if Player In Line of Sight Follow Path to Player else Move in Random Direction
Tracing Around Obstacles • Another simple method – Tracing Around Obstacles • When encounter obstacle, switch to “tracing” state • Tracing follows the edge of the obstacle to work way around it
Tracing Around Obstacles • Another simple method – Tracing Around Obstacles • When encounter obstacle, switch to “tracing” state • Tracing follows the edge of the obstacle to work way around it • Basic Tracing Movement:
Tracing Around Obstacles • We need to decide WHEN to STOP tracing! • One easy way: Calculate a line from the point the tracing starts to the desired destination • Continue Tracing until that line is crossed, then revert back to L-o-S pathfinding • Improved Tracing:
Tracing Around Obstacles • Incorporate line-of-sight with tracing method • At each step of tracing state, utilize line-of-sight to determine if a straight line-of-sight path can be followed to reach destination immediately • If a line-of-sight path is possible, switch back to line-of-sight pathfinding state • Tracing with Line-of-Sight:
Breadcrumb Pathfinding • Able to make NPCs appear intelligently, because the player is unknowingly creating the path for the NPC! • Each time the player takes a step, he leaves an invisible marker or “breadcrumb” in the game world • Breadcrumb trail:
Breadcrumb Pathfinding • When the NPC encounters a breadcrumb, it simply begins to follow the trail until the end • In a real game, the number of breadcrumbs dropped will depend on the game and how smart you want the NPCs to appear. • The player never sees the breadcrumb trail!
Breadcrumb Pathfinding • Implementation • Begin by creating a trail row and column arrays and setting each element value to -1 • Checks for the player’s direction key presses and records them down “dropping a breadcrumb” • Since there is a max trail length, the oldest position will be dropped so that a new position can be added
Following the breadcrumbs • Example: Troll moves randomly (8 possible directions) • Loop through the trail locations to determine if the troll has moved into a breadcrumb location • If a breadcrumb is found, set the troll to use the path
Following the breadcrumbs • Due to possibility that the player’s path overlap itself or adjacent to previous location in path • Not Smart: NPC ends up taking exact footsteps of player • Solution: Allow NPC to always look for adjacent tile containing the most recent breadcrumb, skipping over breadcrumbs
Path Following (in TBE) • To confine a NPC to a certain terrain element such as road, we can use terrain labeling • Example: Labeling road terrain tiles as 2s and other out-of-bounds terrain as 1s
Path Following (in TBE) • We do NOT want to make it move randomly allow the road tiles Unnatural • From 8 possible directions to move, eliminate those that are not part of the road. Then, decide on which of the remaining directions to take • Set neighboring road tiles to a big number and those out-of-bounds to 0. • Tip: Keep the NPC moving in the same general direction, turn only when have to • Tip: Assign a number to each direction
Path Following (in TBE) • Weigh the directions so that priority will be given to maintaining previous direction • Example: Current direction: 1 • Traverse the direction array in search for the most highly weighted direction, move to that direction in the next step
Path Following (in TBE) • How do we increase the robustness of this path following movement (to look more natural and intelligent)?
Wall Tracing • Does not calculate path from a starting to ending point • Most useful in game environments with many rooms or mazes • Obstacle tracing (discussed earlier) can also be used to trace walls • Random movement in such environments is commonly used to increase uncertainty but NPCs often get stuck in small rooms for long periods of time
Wall Tracing • How to make the troll EXPLORE and move in a systematic way around this environment?
Wall Tracing • Simple solution Left-handed approach • If the NPC always move to the left, it will do a thorough job exploring the environment • Move LEFT WHENEVER POSSIBLE (Remember: Left of the NPC, not the player!) • Example: NPC facing player’s right • Direction 2 is the NPC’s LEFT • If that is blocked try STRAIGHT, then try RIGHT • If still blocked, choose to reverse BACK
Wall Tracing • Implementation: 4 IF-ELSE blocks to check for the directions to take (8 if accommodating all 8 directions!) • Should be able to traverse almost every room, but not guaranteed to work in all geometries!
Waypoint Navigation • Pathfinding Time-consuming, CPU-intensive operation • To reduce this burden: Pre-calculate paths • Waypoint Navigation – Carefully place nodes in the game environment, then use pre-calculated paths or other inexpensive methods to move between each node. • Useful for both TBE and CE (plus point!) • Example: Placing suitable nodes on a simple map with 7 rooms • What can you observe from these 7 nodes???
Waypoint Navigation • Every node is in the line-of-sight of at least ONE node! • Setting up like this, a NPC is able to reach every single room in the world using simple line-of-sight algorithm • Game AI just needs to know HOW the nodes are connected to one other
Waypoint Navigation • Using node labels and links, we can now determine a path from any room to any room • Example: Moving from room with node A to room with node E Move following ABCE path
Waypoint Navigation • Can these different paths between rooms be PRE-calculated beforehand? • If NO, WHY? If YES, HOW?
Waypoint Navigation • To move from node to node, determine the node that is nearest to the player’s location and in player’s line-of-sight • Use a lookup table to store data of shortest paths between any two nodes • Establish the connections between nodes • Left side: Starting nodes • Top side: Ending nodes • Determine best path by looking at intersection on the table between starting and ending nodes
Waypoint Navigation • We can discover the connections and fill in the table either 1) manually or 2) by simulated traversal of nodes • Example: Moving from A to all other nodes resulted in B as the nearest node
Waypoint Navigation • Continue doing this until the entire node connection table is completed
Waypoint Navigation • Example: Determine path from node B (triangle) to node G (square) by repeatedly finding the intersection, starting with nodes B and G. Using the intersected nodes as the subsequent locations to move on
Waypoint Navigation – Post-mortem • Question 1: What are some drawbacks of this method? • Question 2: Are there ways to improve this current method of waypoint navigation
Next… • A* Algorithm An extremely popular pathfinding algorithm used widely in games • Map Representations for A* Pathfinding (Grids, Polygonal Maps, Navigation Meshes, Hierarchical)