Penemuan jalur yang efisien di ruang kosong

12

Saya memiliki permainan yang terletak di luar angkasa, dan saya ingin mengeluarkan perintah gerakan, yang membutuhkan penelusuran jalan. Sekarang, ini pemahaman saya bahwa A * dan sebagian besar berlaku untuk pohon, dan bukan ruang kosong yang tidak memiliki node pathfinding. Saya memiliki beberapa kendala, yang saat ini dinyatakan sebagai AABB tetap - yaitu, tidak ada kendala "medan" yang tidak terbatas. Selain itu, saya berharap sebagian besar hambatan dapat diperkirakan sebagai kubus atau bola.

Jadi saya sudah berpikir untuk menerapkan algoritma pathfinding yang jauh lebih sederhana - yaitu, cukup melemparkan sinar dari posisi saat ini ke posisi target, dan kemudian saya bisa mendapatkan daftar hambatan menggunakan partisi spasial yang relatif cepat. Yang saya tidak begitu yakin adalah bagaimana menentukan bagian di mana unit yang diperintahkan melakukan manuver di sekitar rintangan.

Apa yang telah saya pikirkan sejauh ini adalah bahwa saya hanya akan menggunakan bidang potensial - yaitu, semua unit akan merasakan kekuatan tolak yang kuat menjauh satu sama lain dan kekuatan moderat menuju titik yang diinginkan. Ini juga memiliki keuntungan bahwa untuk mengeluarkan pesanan grup, saya hanya dapat memesan kekuatan tingkat menengah terhadap entitas lain. Tetapi ini jelas tidak akan mencapai solusi optimal.

Apakah bidang potensial akan mencapai perkiraan yang wajar mengingat parameter saya, atau apakah saya perlu solusi lain?

DeadMG
sumber

Jawaban:

7

Sementara bidang potensial dapat bekerja, saya kira Anda akan memiliki masalah dengan jalur yang tidak optimal dan "minimum lokal" di mana unit Anda akan terjebak oleh penghalang di sekitarnya. A * cocok untuk lingkungan ruang terbuka 3D. Ini hanya menjadi masalah menghasilkan mesh navigasi yang sesuai dengan kebutuhan Anda. Anda bahkan dapat menggunakan struktur seperti Octrees untuk navigasi nodes. Semakin kecil ukuran maksimum setiap oktan, semakin halus jalurnya. Lihat artikel ini dari permainan Tatap Muka (sekarang mati, tautan wayback ditambahkan). A * dikombinasikan dengan optimisasi jalur (seperti jalan pintas pandang) dan perilaku kemudi dan Anda akan baik-baik saja! Lihat gambar di bawah ini sebagai contoh menggunakan octree untuk path path:

MichaelHouse
sumber
Bagaimana ini akan skala ke peta yang lebih besar? Jika saya memiliki peta yang dua kali lebih besar di setiap dimensi, saya akan membutuhkan delapan kali jumlah node, yang akan bermasalah.
DeadMG
Belum tentu. Anda dapat menjaga ukuran simpul besar sampai pencarian Anda mendekatinya. Ini memungkinkan Anda untuk menjaga simpul yang tidak Anda minati lebih besar dan sedikit jumlahnya.
MichaelHouse
Properti yang bagus dari jerat navigasi ruang kosong adalah kesetaraan biaya perjalanan; Anda mungkin dapat menggunakan A * JPS
Will
@ Akan: Saya melakukan sedikit Googling, tapi saya tidak benar-benar mengerti satu-satunya algoritma pencarian jalan yang muncul. Mau memposting jawaban di atasnya?
DeadMG
@DeadMG, ini adalah penjelasan definitif: harablog.wordpress.com/2011/09/07/jump-point-search <br/> Jika Anda dapat menerapkan A *, Anda kemudian dapat menyesuaikan JPS dengan cukup mudah. Lakukan A * terlebih dahulu, dan tambahkan JPS sebagai optimisasi.
Will