Tìm đường hiệu quả trong không gian trống


12

Tôi đã có một trò chơi nằm trong không gian và tôi muốn phát lệnh di chuyển, đòi hỏi phải tìm đường. Bây giờ, tôi hiểu rằng A * và như vậy chủ yếu áp dụng cho cây và không phải là không gian trống không có nút tìm đường. Tôi có một số trở ngại, hiện được thể hiện dưới dạng AABB cố định - nghĩa là không có chướng ngại vật "địa hình" không giới hạn. Ngoài ra, tôi hy vọng hầu hết các chướng ngại vật có thể xấp xỉ một cách hợp lý là hình khối hoặc hình cầu.

Vì vậy, tôi đã nghĩ đến việc áp dụng thuật toán tìm đường đơn giản hơn nhiều - nghĩa là chỉ cần chiếu một tia từ vị trí hiện tại đến vị trí đích và sau đó tôi có thể nhận được một danh sách các chướng ngại vật bằng cách sử dụng phân vùng không gian tương đối nhanh chóng. Điều tôi không chắc lắm là làm thế nào để xác định phần mà đơn vị được lệnh điều động xung quanh các chướng ngại vật.

Điều tôi đã nghĩ cho đến nay là tôi sẽ đơn giản sử dụng các trường tiềm năng - nghĩa là, tất cả các đơn vị sẽ cảm thấy một lực đẩy mạnh mẽ cách xa nhau và một lực vừa phải hướng đến điểm mong muốn. Điều này cũng có lợi thế là để phát lệnh theo nhóm, tôi chỉ có thể ra lệnh cho một lực lượng trung cấp đối với một thực thể khác. Nhưng điều này rõ ràng sẽ không đạt được giải pháp tối ưu.

Các trường tiềm năng sẽ đạt được xấp xỉ hợp lý theo các tham số của tôi hay tôi cần một giải pháp khác?

Câu trả lời:


7

Mặc dù các trường tiềm năng có thể hoạt động, tôi tưởng tượng bạn sẽ gặp vấn đề với các đường dẫn tối ưu phụ và "mức tối thiểu cục bộ" nơi các đơn vị của bạn sẽ bị kẹt bởi các vật cản xung quanh. A * phù hợp với môi trường không gian mở 3D. Nó đơn giản trở thành một vấn đề tạo lưới điều hướng phù hợp với nhu cầu của bạn. Bạn thậm chí có thể sử dụng các cấu trúc như Octrees cho các nút điều hướng. Kích thước tối đa của mỗi octant càng nhỏ, đường dẫn càng mượt. Kiểm tra bài viết này từ các trò chơi Face to Face (hiện không còn tồn tại, đã thêm liên kết wayback). A * kết hợp với tối ưu hóa đường dẫn (như đường tắt của tầm nhìn) và hành vi lái và bạn sẽ thấy ổn! Xem hình ảnh dưới đây như một ví dụ về việc sử dụng octree cho các nút đường dẫn:


Làm thế nào điều này sẽ mở rộng để bản đồ lớn hơn? Nếu tôi có một bản đồ lớn gấp đôi mỗi chiều, tôi cần gấp tám lần số nút, điều này sẽ gây ra vấn đề.
DeadMG

Không cần thiết. Bạn có thể giữ kích thước nút lớn cho đến khi tìm kiếm của bạn gần nó. Điều này cho phép bạn giữ các nút bạn không quan tâm đến số lượng khá lớn và số lượng ít.
MichaelHouse

Một tài sản tốt đẹp của lưới điều hướng không gian trống là bình đẳng chi phí hành trình; bạn có thể sử dụng A * JPS
Sẽ

@ Will: Tôi đã làm một chút về Google, nhưng tôi không thực sự hiểu thuật toán tìm đường duy nhất xuất hiện. Quan tâm để gửi một câu trả lời trên đó?
DeadMG

@DeadMG đây là lời giải thích dứt khoát: harablog.wordpress.com/2011/09/07/jump-point-search <br/> Nếu bạn có thể triển khai A *, thì bạn có thể trang bị lại JPS cho nó khá đơn giản. Thực hiện A * trước và thêm JPS làm tối ưu hóa.
Sẽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.