Ефективний пошук шляху у вільному просторі


12

У мене є гра, розташована в космосі, і я хотів би видавати накази про рух, для чого потрібна обробка маршрутів. Тепер я розумію, що A * і подібні здебільшого стосуються дерев, а не порожнього простору, у якому немає вузлів прокладання маршруту. У мене є деякі перешкоди, які в даний час виражаються як фіксовані AABBs - тобто немає необмеженої перешкоди на "місцевості". Окрім того, я очікую, що більшість перешкод можуть бути досить приблизними як кубики чи сфери.

Тому я думав застосувати набагато простіший алгоритм прокладання маршруту, тобто просто передати промінь від поточного положення до цільового положення, і тоді я можу отримати список перешкод, використовуючи просторовий розподіл порівняно швидко. Я не так впевнений у тому, як визначити частину, де упорядкований блок маневрує навколо перешкод.

Я вже думав, що я просто використовуватиму потенційні поля, тобто всі одиниці відчуватимуть сильну відштовхуючу силу подалі одна від одної та помірну силу до бажаної точки. Це також має перевагу в тому, що для видачі групових замовлень я можу просто наказувати сили середнього рівня щодо іншого суб'єкта. Але це, очевидно, не дозволить досягти оптимального рішення.

Чи зможуть потенційні поля досягти розумного наближення, враховуючи мої параметри, чи мені потрібно інше рішення?

Відповіді:


7

Хоча потенційні поля можуть працювати, я думаю, у вас виникнуть проблеми з неоптимальними шляхами та "локальними мінімумами", де ваші одиниці будуть захоплені оточуючими перешкодами. A * підходить для 3D-просторів на відкритому просторі. Це просто стає проблемою створення навігаційної сітки, яка відповідає вашим потребам. Ви навіть можете використовувати структури типу Octrees для навігаційних вузлів. Чим менший максимальний розмір кожного октанта, тим більш гладкий шлях. Ознайомтеся з цією статтею від ігор обличчям до обличчя (тепер неіснуюча, додано зворотне посилання). * У поєднанні з оптимізацією шляху (наприклад, ярлики швидкого зору) та поведінкою керма, і вам буде добре! Дивіться зображення нижче як приклад використання octree для вузлів шляху:


Як це буде масштабувати масштабні карти? Якби у мене була карта, яка була вдвічі більшою у кожному вимірі, мені знадобилось би вісім разів більше вузлів, що було б проблематично.
DeadMG

Не обов'язково. Ви можете тримати розмір вузла великим, поки ваш пошук не наблизиться до нього. Це дозволяє зберегти вузли, які вас не цікавлять, досить великі та малочисельні.
MichaelHouse

Приємною властивістю порожніх космічних навігаційних сіток є рівність витрат на подорож; Ви можете бути в змозі використати A * JPS
Will

@Will: Я трохи погуглився, але не зрозумів єдиного алгоритму простеження маршрутів. Хочете опублікувати відповідь на нього?
DeadMG

@DeadMG це остаточне пояснення: harablog.wordpress.com/2011/09/07/jump-point-search <br/> Якщо ви можете реалізувати A *, ви можете потім доопрацювати JPS до нього досить просто. Зробіть спочатку A * та додайте JPS як оптимізацію.
Буде
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.