งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

A* Pathfinding and other path generator.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "A* Pathfinding and other path generator."— ใบสำเนางานนำเสนอ:

1 A* Pathfinding and other path generator.
Dr.Yodthong Rodkaew

2 Game Map โดยทั่วไป ฉากในเกมจะมีสองแบบ คือ
แบบคงที่ (ในเกมสมัยเก่าๆ = เกม flash ในยุคนี้) แบบเลื่อนฉากได้

3 Game Map แผนที่ในเกมจะแบ่งเป็น 2 ประเภทหลักๆ คือ
แผนที่แบบบล็อก (TileMap)- ใช้การจัดเรียงของบล็อกต่อๆ กัน เพื่อสร้างเป็นแผนที่ แผนที่แบบอิสระ (VectorMap) - ใช้รูปหรือขอบเขต polygon เป็นสิ่งกำหนดขนาดแผนที่

4 tileset tilemap tilemap = array 2x2

5

6 Game Map การเคลื่อนที่ในฉากแผนที่ของเกม เป็นสิ่งที่เป็นพื้นฐานที่ทุกเกมจะต้องมี ประกอบด้วย 1.คุณสมบัติของพื้นที่ เป็นส่วนที่กำหนดว่าพื้นที่นั้นมีลักษณะอย่างไร ตัว unit สามารถเคลื่อนที่ได้หรือไม่ (area property) 2.สิ่งกีดขวางและขอบเขตภายในแผนที่ (collision & boundry) 3.ฟังก์ชั่นการสร้างเส้นทางเคลื่อนที่ระหว่างจุดที่กำหนด โดยหลบหลีกสิ่งกีดขวาง (pathfinding & collision prevention)

7 Movement in Game Map เมื่อ unit มีการเคลื่อนที่ในฉากแผนที่ของเกม ข้อมูลที่ unit จะต้องมีคือ ตำแหน่งของ unit อ้างอิงจากแผนที่ ทิศทางในการเคลื่อนที่ ความเร็วในการเคลื่อนที่ จุดหมายปลายทาง อาจมีข้อมูลอื่นๆ เพิ่มเติมได้ เช่น เมื่อ unit เดินตาม unit อื่นๆ direction(x,y,z) velocity(x,y,z) position (x,y,z) target(x,y,z)

8 The Search Area เพื่อความเข้าใจง่ายขึ้นจะใช้ tile map สมมติให้ unit อยู่ที่ตำแหน่ง A และต้องการเคลื่อนที่จาก A ไปยังตำแหน่ง B A O B unit สามารถเคลื่อนที่ได้ 8 ทิศทาง O = obstacle = สิ่งกีดขวาง, อุปสรรค, ยุ่งยาก

9 A* Search แต่ละบล็อกของ tile map จะเรียกว่า node -- การค้นหาเริ่มดังนี้ 1) เริ่มจาก node A และใส่ลงไปใน "open list" ข้อมูลที่เก็บใน open list จะเป็นข้อมูลที่อาจเป็นเส้นทางที่ใช้ในการเคลื่อนที่ 2) มองหา ตำแหน่ง node ใกล้เคียง ที่อยู่ติดกับจุดเริ่มต้น node A ทั้งหมด ที่สามารถเดินไปได้ ถ้ามี node ไหนที่เดินไปได้ให้ใส่ใน open list ด้วย และกำหนดให้ A เป็น "parent node" ของตำแหน่งที่เพิ่มเข้าไปใหม่ (การกำหนด parent node จะช่วยในการ trace เส้นทางเดิน) 3) นำเอา node A ออกจาก open list และ ใส่ใน "closed list" แทน ซึ่งจะเป็นตัวบอกว่าไม่จำเป็นต้องค้นหาในตำแหน่งนี้อีก

10 Path Scoring การให้คะแนนของแต่ละเส้นทาง (จะมีลักษณะคล้ายกับ Best-FS) ตามสมการ ดังนี้ F = G + H G = ค่าสะสมของการเคลื่อนที่ (the movement cost) นับจากจุดเริ่มต้น (node A) มาถึง node ปัจจุบัน H = ค่าประมาณการเคลื่อนที่ (the estimated movement cost) นับจาก node ปัจจุบัน ไปยัง node ที่เป็นเป้าหมาย (the final destination, point B) ซึ่งค่า H นี้จะเป็นค่าฮิวริสติก (Heuristic) ใช้การคาดเดา เนื่องจากไม่ทราบค่าที่แท้จริงว่าใกล้เป้าหมายเท่าใด หรือต้องอ้อมไปยังเป้าหมายเป็นระยะทางเท่าใด การเลือกเส้นทาง จะเลือก node ใน open list ที่มีค่า F ต่ำที่สุด

11 ตัวอย่างใช้การประมาณ ฮิวริสติกแบบ Manhattan Method
H = 10*(abs(currentX-targetX) + abs(currentY-targetY)) การเคลื่อนที่ แนวเส้นตรงใช้ค่า 10 แนวเฉียงใช้ค่า 14 จากตัวอย่าง ประมาณค่า F ในแต่ละ node ได้ ตามรูปที่ 3 G H F เลือก F ที่มีค่าน้อยที่สุด = 40

12 4) เลือก node ที่มีค่า F น้อยที่สุด (สมมติชื่อ C) และนำออกจาก open list และใส่ใน closed list
5)  มองหา ตำแหน่ง node ใกล้เคียงกับ node C ทั้งหมด ที่สามารถเดินไปได้ ที่อยู่ติดกับ node C ที่ได้เลือกไว้ ถ้ามี node ไหนที่เดินไปได้ให้ใส่ใน open list ด้วย และให้ node C เป็น "parent node" ของตำแหน่งที่เพิ่มเข้าไปใหม่ 6) ถ้า node ที่เพิ่มเติมอยู่ใน open list อยู่แล้ว ให้ดูว่าอันไหนดีกว่า ให้เลือกใช้ node G ที่มีค่าน้อยที่สุด – จากนั้นคำนวณหาค่า F ใหม่

13 G H F

14 7) ทำซ้ำข้อ 4-6 จนกว่า target node จะอยู่ใน close list
H F 7) ทำซ้ำข้อ 4-6 จนกว่า target node จะอยู่ใน close list

15 Path ที่ได้ คือเส้นทางที่ย้อนกลับมาจากข้อมูลของ parent node
G H F Path ที่ได้ คือเส้นทางที่ย้อนกลับมาจากข้อมูลของ parent node

16 สรุป: 1) เพิ่ม "node เริ่มต้น" ลงใน open list -- ให้ "node เริ่มต้น" = current node 2) วนซ้ำ: 2.1) มองหา ตำแหน่ง node ใกล้เคียงที่สามารถเดินไปได้ ที่อยู่ใกล้ current node 2.2) ถ้ามี node ไหนที่เดินไปได้ให้ใส่ใน open list ด้วย และใส่ข้อมูล parent node ด้วย 2.3) คำนวณหาค่า F,G,H ของ node ที่เพิ่มมาใหม่ใน open list 2.4) เลือก node F ที่มี ค่าน้อยที่สุด ที่อยู่ใน open list 2.5) นำออกจาก open list ใส่ใน close list และ set ให้เป็น current node 3) หยุดเมื่อ: a) "node เป้าหมาย" อยู่ใน close list = หาทางเจอ b) ไม่มี node ใน open list = ไม่มีเส้นทาง 4) เก็บเส้นทางที่หาได้ โดยย้อนกลับจาก "node เป้าหมาย" ไปยัง "node เริ่มต้น"

17 Notes on Implementation
Other Units (collision avoidance) ตำแหน่งอื่นๆ = เคลื่อนที่เข้าไปไม่ได้ หรือ เคลื่อนที่แบบหลบๆ เวลาเดินสวนกัน Variable Terrain Cost การเคลื่อนที่ในภูมิประเทศแต่ละส่วนมีค่าแตกต่างกัน – Influence mapping มีตำแหน่งที่ทำให้เพิ่ม/ลดค่า เพื่อหลอกล่อให้ AI สร้างเส้นทางตามที่ผู้ออกแบบต้องการ (แก้ปัญหา AI เดินหลงเข้าไปใน maze) Handling Unexplore Areas มีส่วนที่ยังไม่ได้สำรวจ แต่ AI ก็จะสามารถเดินได้เหมือนรู้ทางหลบได้ -- ให้คิดว่าส่วนที่ยังไม่ได้สำรวจสามารถเดินได้ทั้งหมดไว้ก่อน Smoother Paths เส้นทางที่ได้จาก A* จะไม่นุ่มนวล หรือเคลื่อนที่เป็นสี่เหลี่ยม แก้ปัญหาโดยการเพิ่มตัวแปรในสูตรให้การเคลื่อนที่ดูดีขึ้น

18 Notes on Implementation
Non-square Search Areas ในแผนที่เกมคำนวณหาจาก ตารางสี่หลี่ยม แต่ถ้าให้สมจริง unit ควรจะเดินได้ทุกทิศทาง – อาจแก้ปัญหาโดยคำนวณตารางสี่หลี่ยมให้เล็กลง หรือเพิ่ม waypoint แบบใน vector map Some Speed tips: Smaller Map Fewer Unit Never do path finding for more than a few units at a time use larger square pre-calculating / pre-processing / caching optimize open list ( no sort, using binary heaps

19 Terrain navigation on vectormap
start point target point

20 A* on mesh node on triangle edge = A* node
add each node on trangle edge find path using node as A* start point target point

21 Waypoint System Waypoints must add by hand.
if not see target, find and move to the nearest waypoint if see target, move to target start point target point waypoint

22 Pre-defined path+Waypoint System
Paths + Waypoints must add by hand. if not see target, find and move to the nearest waypoint if see target, move to target start point target point waypoint

23 Bounce and Bound เด้งดึ๋ง = random walk เมื่อชนกับขอบ start point
target point


ดาวน์โหลด ppt A* Pathfinding and other path generator.

งานนำเสนอที่คล้ายกัน


Ads by Google