Динамічне підсвічування в режимі реального часу?


19

В даний час я займаюся деякими дослідженнями проходження маршрутів, і моє моделювання полягає в наступному: у мене представлена ​​тривимірна сцена з початковою і кінцевою точкою, я здатна створювати навігаційні сітки, точкові точки та полігони, щоб допомогти в пошуку шляху.

Я спробував алгоритм A * та деякі його варіанти, і вони відмінно працюють. Однак зараз мене більше цікавить «динамічний» контур. Наприклад, під час пошуку шляху від точки А до точки В, якщо раптом з’являється нова перешкода, я хочу, щоб мій алгоритм одразу міг перепланувати шлях і знову не почати пошук з нуля.

Я прочитав читання алгоритму D * і цікавився, чи підходить це для того, що мені потрібно, чи це буде здаватися зайвим.

Тому в основному мої запитання: Який алгоритм буде найкращим для динамічного Pathfinding в реальному часі? АБО яке поєднання методів я можу використовувати замість цього?


Я не впевнений, яким алгоритмом вони користуються, тому це не відповідь, але я думаю, що це ви намагаєтеся наслідувати: відео на YouTube
MichaelHouse

Що з розширенням A *? Розширення того, що зберігається у вузлах його відкритих / закритих наборів на те, що ви хочете, і розширення A * для його розгляду.
користувач712092

Я шукав відповідь так само, як і ви, і знайшов статтю про HPA *, і це стосується відеоігор. Я все ще шукаю статтю і, ймовірно, збираюся її реалізувати. Поки для мене є сенс підвищити продуктивність, і його можна використовувати як в статичному, так і в динамічному середовищі. Ось стаття
NelsonPunch

Відповіді:


19

D * дуже задіяний - я не рекомендую намагатися його реалізувати. Навіть коли проекти, які добре фінансуються та розробляються розумними / досвідченими людьми, використовується D * lite, тому що D * такий біль, щоб виправитись.

Можливо, вам буде цікава ця презентація, яка включає дискусію щодо проходження маршруту лівих 4 мертвих:

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

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

Якщо ви хочете підтримати сотні чи тисячі агентів, тоді ви можете реалізувати щось на зразок безперервної натовпу. Дивіться це дослідження: http://grail.cs.washington.edu/projects/crowd-flows/ У ньому йдеться про метод, заснований на процесорі, який може підтримувати тисячі акторів в динамічному середовищі.

Якщо ви хочете підтримати десятки тисяч або сотні тисяч агентів, тоді ви можете реалізувати щось на зразок безперервної натовпу за допомогою GPU. Тут див. Відповідне дослідження: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

Ось відео, яке демонструє безперервні натовпи в дії: http://www.youtube.com/watch?v=lGOvYyJ6r1c (Перейдіть до 4:10, щоб побачити великі динамічні перешкоди, як автомобілі та крадіжки, які впливають на сотні людей, які гуляють по місту.)


Дякуємо за посилання. D * Lite здається правильним з того, що я читав
Андрій

9

Ви подивилися на просту поведінку керма?

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

Ви можете використовувати їх, щоб повернути з шляху A *, щоб уникнути локальних перешкод, а потім повернути на свій шлях, як тільки ви закінчите.

Це також досить легко поєднувати різні способи поведінки.


+1. Я не впевнений, чому це було знято. Хоча це просто і, можливо, не відповідь, що шукав запитувач, я думаю, що це на тему, і я вважаю це корисним :)
Ольховський,

1
Я прочитав та реалізував цю поведінку рульового управління в нашій останній грі. Тепер ми знову будемо замінювати його іншими методами. Я думаю, що це не спрацьовує добре разом із попередньо обчисленими оптимальними шляхами. "Комбінація" декількох форм поведінки зазвичай дає погані результати. Якщо ви все ще плануєте його використовувати, не намагайтеся одночасно керувати та слідувати своїм шляхом. Замість цього перемкніть на 100% рульове управління та переключіться на 100% назад, як тільки ви пройшли перешкоду.
Imi

4

Оскільки ваше повідомлення перебуває у частині обміну стеками "Розробка ігор", ось, на що б відповіли більшість ігрових програмістів: справа не в динамічному Pathfinding в реальному часі, а про динамічний шлях у режимі реального часу * наступний *!

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

Отже, моя порада полягає в тому, щоб почати із застосування керованої поведінки (http://red3d.com/cwr/steer/), обробляти випадки, коли шлях стає неможливим, а потім додати шар зверху до нього, щоб обробити крайові випадки, які не є ' t обробляються двома попередніми рішеннями.

Сподіваюсь, це допомагає


Ні, ні. "Шлях слідує" - це те саме, що і пошук шляху. Існує багато підходів, які дозволяють в режимі реального часу слідкувати за тисячами агентів, коли перешкоди змінюються, на настільному ПК. Звичайно, не дуже дорого знайти шлях для одного агента, коли перешкоди пересуваються. Ось один із таких підходів з багатьох: grail.cs.washington.edu/projects/crowd-flows існують версії, що підтримують графічний процесор GPU.
Ольховський

Я мав би не погодитися з цим. Будь-який двигун розглядає пошук шляху та наступний шлях як дві чіткі проблеми, де перша - це пошук графа судноплавної області, а друга має намір шукати оптимальний вектор руху в локальному просторі. Я працював над таким моделюванням натовпу, створюючи проміжне програмне забезпечення, яке використовується іграми AAA, не покладаючись на GPU. Більшість реалізацій використовуватимуть потокове поле (дорожник) та рульове управління, щоб стежити за потоком та уникати інших агентів (дорожній перегляд). Як було сказано в моїй відповіді, це відповідь "ігрового програміста", а не академічна відповідь.
emartel

Я знаю, що вам не потрібен графічний процесор для контиуумів, тому я зв’язав версію на базі процесора. Ваш опис слідуючого шляху все ще є пошуковим пошуком, це лише пошук маршрутного пошуку на іншому рівні деталей, для іншого набору даних. Отже, у вас дійсно є прохід із деталізацією курсу, а також пропуск із дрібними деталями. Зрештою, ви намагаєтеся знайти шлях, який повинен пройти актор. Винайдення нових термінів для цього просто заплутує речі.
Ольховський

1
Вибачте, але "шлях слідом" - це не вигаданий термін. Прочитайте вироблені в галузі документи, і ви побачите, що вони використовуються знову і знову: посилання або посилання лише для прив’язки декількох. На жаль, я не можу зв’язати вас із документацією, що захищена NDA, про двигуни / середні вироби, широко використовувані в галузі.
emartel

1
Ваше перше посилання - це посилання, яке я дав у своїй відповіді btw. Гаразд досить справедливо, може бути справедливо описати такий тип пошуку шляху як наступний шлях. Зрештою, вони обидва намагаються знайти шлях, який слід слідувати, але я думаю, що в цьому випадку я помиляюся, і ми повинні називати те, що ми бачимо у вашому другому посиланні, як наступний шлях. Наприклад, акт зв’язування грубих точок шляху разом з кубічними шипами / кривими biezer / insert-your-method-тут. Зважаючи на це, я все ще сильно не погоджуюся з тим, що неможливо здійснити пошук шляху навколо динамічних перешкод, як, здається, пропонує ваша відповідь.
Ольховський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.