Pathfinding Dinamis Waktu Nyata?

19

Saat ini saya sedang melakukan beberapa riset pathfinding dan simulasi saya adalah sebagai berikut: Saya memiliki adegan 3d dengan titik awal dan akhir yang diwakili, saya mampu membuat mesh navigasi, titik arah dan poligon untuk membantu pathfinding.

Saya sudah mencoba algoritma A * dan beberapa variannya dan mereka bekerja dengan sempurna. Namun, sekarang saya lebih tertarik pada pathfinding 'dinamis'. Misalnya, ketika menemukan jalur dari titik A ke titik B, jika hambatan baru tiba-tiba muncul, saya ingin algoritme saya segera dapat merencanakan ulang jalur dan tidak mulai mencari dari awal lagi.

Saya telah melakukan beberapa pembacaan pada algoritma D * dan bertanya-tanya apakah ini akan sesuai untuk apa yang saya butuhkan atau akankah ini terlihat seperti pembunuhan berlebihan.

Jadi pertanyaan saya pada dasarnya adalah: Algoritma apa yang terbaik untuk Real Time Dynamic Pathfinding? ATAU kombinasi teknik apa yang bisa saya gunakan sebagai gantinya?

Andrei
sumber
Saya tidak yakin algoritma apa yang mereka gunakan, jadi ini bukan jawaban, tapi saya bayangkan inilah yang Anda coba tiru: video youtube
MichaelHouse
Bagaimana dengan memperpanjang A *? Memperluas apa yang disimpan dalam node set terbuka / tertutup dengan apa yang Anda inginkan dan memperluas A * untuk mempertimbangkannya.
user712092
Saya mencari jawabannya sama seperti Anda dan saya menemukan artikel tentang HPA * dan itu terkait dengan video game. Saya masih mencari artikel dan mungkin akan mengimplementasikannya. Sejauh ini masuk akal bagi saya untuk meningkatkan kinerja dan dapat digunakan di lingkungan statis dan dinamis. Berikut ini adalah artikel
NelsonPunch

Jawaban:

19

D * cukup terlibat - Saya tidak merekomendasikan mencoba untuk mengimplementasikannya. Bahkan ketika proyek-proyek yang didanai dengan baik, dan sedang dikembangkan oleh orang-orang pintar / berpengalaman, D * lite digunakan, karena D * begitu sulit untuk diperbaiki.

Anda mungkin tertarik dengan presentasi ini, yang mencakup pembahasan pathfinding Left 4 Dead:

http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf

Salah satu pendekatan adalah menggunakan pencarian level A * kasar untuk mendapatkan jalur umum untuk agen, dan kemudian melakukan pencarian detail level A * yang baik untuk lingkungan lokal agen. Dengan cara ini, Anda dapat dengan cepat menghitung ulang rincian pencarian A * jika medan berubah, dan kemudian dengan cepat menghitung ulang detail A * pencarian untuk segmen kecil dari lingkungan. Ini tidak sempurna. Ini berfungsi selama hambatan Anda tidak dapat memblokir beberapa node grafik detail saja, yang bagus untuk sebagian besar game. Ini adalah metode yang saya sarankan jika Anda memiliki kurang dari 100 agen.

Jika Anda ingin mendukung ratusan, atau ribuan agen, maka Anda dapat menerapkan sesuatu seperti orang banyak. Lihat penelitian ini: http://grail.cs.washington.edu/projects/crowd-flows/ Itu membahas metode murni berbasis CPU yang dapat mendukung ribuan aktor dalam lingkungan yang dinamis.

Jika Anda ingin mendukung puluhan ribu, atau ratusan ribu agen, maka Anda dapat mengimplementasikan sesuatu seperti orang banyak yang berkesinambungan, dengan bantuan GPU. Lihat di sini untuk penelitian yang relevan: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

Berikut adalah video yang menunjukkan kerumunan kontinum beraksi: http://www.youtube.com/watch?v=lGOvYyJ6r1c (Lewati ke 4:10 untuk melihat hambatan dinamis besar seperti mobil dan lampu lalu lintas yang memengaruhi ratusan orang yang berjalan di sekitar kota.)

Olhovsky
sumber
Terima kasih atas tautannya. D * Lite sepertinya benar dari apa yang saya baca
Andrei
9

Sudahkah Anda melihat perilaku kemudi yang sederhana?

http://www.red3d.com/cwr/steer/

Anda dapat menggunakannya untuk membelok dari jalur A * Anda untuk melakukan penghindaran kendala lokal, dan kemudian kembali ke jalur Anda setelah Anda selesai.

Ini juga cukup mudah untuk menggabungkan beberapa perilaku.

BigSandwich
sumber
+1. Saya tidak yakin mengapa itu diturunkan. Meskipun ini sederhana, dan mungkin bukan jawaban yang dicari si penanya, saya pikir ini sesuai topik dan saya merasa berguna :)
Olhovsky
1
Saya telah membaca dan menerapkan perilaku kemudi ini di game terbaru kami. Sekarang kita akan menggantinya lagi dengan metode lain. Saya pikir itu tidak bekerja dengan baik bersama dengan jalur optimal yang sudah terbentuk sebelumnya. "Kombinasi" berbagai perilaku biasanya menghasilkan hasil yang buruk. Jika Anda masih berencana untuk menggunakannya, jangan mencoba mengarahkan dan mengikuti jalan Anda pada saat yang bersamaan. Alih-alih, beralihlah ke kemudi 100% dan alihkan 100% kembali begitu Anda melewati rintangan.
Imi
4

Karena posting Anda ada di bagian "Pengembangan Game" dari pertukaran tumpukan, inilah yang akan dijawab oleh sebagian besar programmer game: Ini bukan tentang Real Time Dynamic Pathfinding, ini tentang Real Time Dynamic Path * mengikuti *!

Beberapa tepi kasus di mana tepi pada grafik navigasi Anda benar-benar terhalang akan memerlukan pathfinder untuk menghitung ulang jalur lain, tetapi sebagian besar waktu Anda hanya dapat mengarahkan entitas Anda di sekitar hambatan, melakukan prediksi posisi dan menghindari ke arah yang benar. Untuk sebagian besar gim, terlalu berat untuk memprediksi posisi agen dinamis dari waktu ke waktu, terutama karena Anda tidak dapat memprediksi tindakan pemain atau keputusan agen secara akurat.

Jadi, saran saya adalah mulai dengan menerapkan Perilaku Kemudi (http://red3d.com/cwr/steer/), menangani kasus di mana jalan menjadi tidak mungkin dan kemudian menambahkan lapisan di atasnya untuk menangani kasus tepi yang tidak t ditangani oleh dua solusi sebelumnya.

Semoga ini membantu

emartel
sumber
Eh, tidak. "Mengikuti jejak" sama dengan pencarian jalur. Ada banyak pendekatan yang memungkinkan pengaktifan ribuan agen saat ini ketika hambatan sedang berubah, pada PC desktop. Tentu saja tidak terlalu mahal untuk menemukan jalur untuk agen tunggal , ketika hambatan bergerak. Berikut adalah salah satu pendekatan tersebut, dari banyak: grail.cs.washington.edu/projects/crowd-flows Ada versi kerumunan kontinum GPU terakreditasi .
Olhovsky
Saya harus tidak setuju dengan yang ini. Setiap mesin akan memperlakukan pencarian jalur dan mengikuti jalur sebagai dua masalah yang berbeda, di mana yang pertama adalah pencarian grafik dari area yang dapat dilayari dan yang lainnya berniat dalam mencari vektor pergerakan optimal dalam ruang lokal. Saya telah bekerja pada simulasi kerumunan seperti memproduksi middleware yang digunakan oleh game AAA tanpa harus bergantung pada GPU. Sebagian besar implementasi akan menggunakan bidang aliran (pathfinder) dan kemudi untuk mengikuti aliran dan menghindari agen lain (pathfollower). Seperti yang dinyatakan oleh jawaban saya, ini adalah jawaban "programmer game", bukan jawaban akademis.
emartel
Saya tahu Anda tidak memerlukan GPU untuk orang banyak, itulah sebabnya saya menautkan versi berbasis CPU. Deskripsi path following Anda masih berupa pencarian pathfinding, itu hanya pencarian pathfinding pada level detail yang berbeda, pada dataset yang berbeda. Jadi apa yang Anda benar-benar miliki adalah lintasan pathfinding detail yang detail, dan lintasan pathfinding detail yang halus. Pada akhirnya Anda mencoba menemukan jalan yang harus diikuti oleh seorang aktor. Menemukan istilah baru untuk ini hanya membingungkan banyak hal.
Olhovsky
1
Maaf, "jalur mengikuti" bukan istilah yang ditemukan. Baca dokumen yang diproduksi industri dan Anda akan melihatnya berulang-ulang: tautan atau tautan hanya untuk menghubungkan beberapa saja. Sayangnya saya tidak dapat menghubungkan Anda dengan dokumentasi mesin / middlewares yang dilindungi NDA yang banyak digunakan di industri ini.
emartel
1
Tautan pertama Anda adalah tautan yang saya berikan dalam jawaban saya btw. Oke cukup adil, mungkin adil untuk menggambarkan tipe pencarian jalur tersebut sebagai mengikuti jalur. Pada akhirnya mereka berdua berusaha menemukan jalan untuk diikuti, tetapi saya pikir dalam hal ini saya salah, dan kita harus menyebut apa yang kita lihat di tautan kedua sebagai mengikuti jalur. Misalnya tindakan menghubungkan titik jalur kasar bersama-sama dengan kurva kubik / kurva biezer / masukkan-metode-Anda-di sini. Yang mengatakan, saya masih sangat tidak setuju bahwa tidak layak untuk menerapkan pencarian jalan di sekitar hambatan dinamis, seperti jawaban Anda tampaknya menyarankan.
Olhovsky