1 / 21

Алгоритмы иерархического поиска пути в играх

Алгоритмы иерархического поиска пути в играх. Андрей Плахов andrey.plakhov@nival.com. Алгоритмы поиска пути Андрей Плахов. Три метода поиска пути. (По возрастанию сложности и эффективности) Эмпирический обход препятствий A* и распределенный А* Подробнее тут: http://dev.dtf.ru

Download Presentation

Алгоритмы иерархического поиска пути в играх

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Алгоритмы иерархического поиска пути в играх Андрей Плахов andrey.plakhov@nival.com

  2. Алгоритмы поиска пути Андрей Плахов Три метода поиска пути (По возрастанию сложности и эффективности) • Эмпирический обход препятствий • A* и распределенный А*Подробнее тут: http://dev.dtf.ru • Иерархический поиск пути

  3. Алгоритмы поиска пути Андрей Плахов Стратегические правила • Никогда не используйте сложный метод, если можно обойтись простым! • Заставьте геймдизайнеров иногда думать о поиске пути!

  4. Алгоритмы поиска пути Андрей Плахов Иерархический поиск пути Как ищут путь люди? Как использовать в играх похожие алгоритмы?

  5. Алгоритмы поиска пути Андрей Плахов Иерархический поиск пути Вот что такое граф областей

  6. Алгоритмы поиска пути Андрей Плахов Иерархический поиск пути Поиск происходит в 2 этапа

  7. Алгоритмы поиска пути Андрей Плахов Иерархический поиск пути Что входит в систему иерархического поиска? • Предварительное построение карты • Создание графа областей • Поиск в графе областей • Окончательный поиск с ограничениями • Пересчет областей, если карта изменилась

  8. Алгоритмы поиска пути Андрей Плахов Граф областей Разобьем карту на «квадратики». • Регулярное разбиение • Сторона квадратика – степень двойки (4 или 8) • Каждая область будет целиком входить в один из квадратиков

  9. Алгоритмы поиска пути Андрей Плахов Граф областей Выделяем области Как это сделать за 2 прохода по карте? • Первый проход: номер области определяется по ближайшим соседям На слайде номер отображается цветом. Внизу нарисована таблица соответствий

  10. Алгоритмы поиска пути Андрей Плахов Граф областей Строим граф областей Как это сделать за 2 прохода по карте? • Второй проход: области отождествляются • Номер области определяется по таблице соответствий

  11. Алгоритмы поиска пути Андрей Плахов Граф областей Разметка расстояний • Выбор центра области: Ближайшая к центру тяжести точка области • Таблица Т: расстояние от каждой точки области до ее центра. Один шаг стоит 2, по диагонали 3 • Расстояние между областями: минимум по их общей границе

  12. Алгоритмы поиска пути Андрей Плахов Граф областей Пересчет • Пересчет должен быть локальным • Смена персонажа вызывает такой же пересчет, как и разрушения • Таблицу Т нужно сохранить для ускорения пересчетов

  13. Алгоритмы поиска пути Андрей Плахов Граф областей. Объединение графов • Этажи зданий • Вложенные сетки, повернутые на угол, не кратный 90˚ • Пещеры, точки телепортации, ...

  14. Алгоритмы поиска пути Андрей Плахов Двухуровневый поиск пути • Поиск пути по графу областей. В итоге – список областей • Поиск пути по детальной карте только среди точек, близких к центрам областей из списка Алгоритм А* не используется – здесь алгоритм Дийкстры оказывается быстрее.

  15. Алгоритмы поиска пути Андрей Плахов Алгоритм Дийкстры Напоминаем: • Поиск пути основан на очереди с приоритетами • На каждом шаге обрабатывается первый узел в очереди. Его необработанные соседи попадают в очередь с приоритетом, равным суммарной стоимости пути до них • В итоге для каждой обработанной позиции в хэш-таблицу или 2d-массив попадает ее предок и стоимость пути до нее

  16. Алгоритмы поиска пути Андрей Плахов Быстрый алгоритм Дийкстры • Эмпирическое отбрасывание ложных смен поз • Стоимость хода – целое число, меньшее N. Для скорости полезно N – степень двойки. • Очередь с приоритетами моделируется при помощи N массивов фиксированной длины. Скажем «Нет» операциям с памятью! • Будьте осторожнее с STL, обращайте внимание на неявное выделение памяти

  17. Алгоритмы поиска пути Андрей Плахов Быстрый алгоритм Дийкстры • Очередь с приоритетами как N массивов • После N-того массива опять следует первый • Каждый массив свернут в кольцо Пусть обрабатывается массив с номером Х. В массиве с номером (X+С) mod Nнаходятся все ждущие обработки позиции стоимостью на С больше текущей.

  18. Алгоритмы поиска пути Андрей Плахов Быстрый алгоритм Дийкстры • На С++ полезно писать такой алгоритм как template • Cпециализаторы: тип «позиция»; таблица, хранящая информацию о стоимости и позиции-предке; число N Красный крест: позиция обработана Выделенная стрелкой позиция обрабратывается Позиции с рамкой будут добавлены на текущем шаге

  19. Алгоритмы поиска пути Андрей Плахов Способы оптимизации метода • Кэшируйте результаты • Запоминайте расстояние в графе областей от начальной области до остальных. 90% вызовов поиска пути начинаются с той же области, что и предыдущий вызов • Используйте предварительные вычисления: считайте, пока есть время • Не используйте отложенные вычисления

  20. Алгоритмы поиска пути Андрей Плахов Вот о чем мы поговорили: • Три способа организации поиска путей: какой использовать? • Иерархический поиск пути: построение и перерасчет графа областей • Двухуровневый иерархический поиск • Быстрый алгоритм Дийкстры • Как оптимизировать эти методы?

  21. Алгоритмы поиска пути Андрей Плахов

More Related