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?
sumber
Jawaban:
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.)
sumber
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.
sumber
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
sumber