21
Алгоритмы иерархического поиска пути в играх Андрей Плахов [email protected] om

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

Embed Size (px)

DESCRIPTION

Алгоритмы иерархического поиска пути в играх. Андрей Плахов [email protected]. Алгоритмы поиска пути Андрей Плахов. Три метода поиска пути. (По возрастанию сложности и эффективности) Эмпирический обход препятствий A* и распределенный А* Подробнее тут: http://dev.dtf.ru - PowerPoint PPT Presentation

Citation preview

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

Андрей Плахов

[email protected]

Три метода поиска пути(По возрастанию сложности и

эффективности)

Эмпирический обход препятствий

A* и распределенный А*

Подробнее тут: http://dev.dtf.ru

Иерархический поиск пути

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

Стратегические правила

• Никогда не используйте сложный метод, если можно обойтись простым!

• Заставьте геймдизайнеров иногда думать о поиске пути!

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

Иерархический поиск пути

Как ищут путь люди?

Как использовать в

играх похожие

алгоритмы?

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

Иерархический поиск пути

Вот что такое

граф областей

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

Иерархический поиск пути

Поиск происходит

в 2 этапа

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

Иерархический поиск путиЧто входит в систему иерархического поиска?

Предварительное построение карты

Создание графа областей

Поиск в графе областей

Окончательный поиск с ограничениями

Пересчет областей, если карта изменилась

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

Граф областейРазобьем карту на

«квадратики». Регулярное разбиение

Сторона квадратика – степень двойки (4 или 8)

Каждая область будет целиком входить в один из квадратиков

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

Граф областейВыделяем области

Как это сделать за 2 прохода по карте?

Первый проход: номер области определяется по ближайшим соседям

На слайде номер отображается цветом.

Внизу нарисована таблица соответствий

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

Граф областейСтроим граф областей

Как это сделать за 2 прохода по карте?

Второй проход: области отождествляются

Номер области определяется по таблице соответствий

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

Граф областей Разметка расстояний Выбор центра области:

Ближайшая к центру

тяжести точка области

Таблица Т: расстояние

от каждой точки области

до ее центра. Один шаг

стоит 2, по диагонали 3

Расстояние между

областями: минимум по

их общей границе

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

Граф областей Пересчет

• Пересчет должен быть локальным

• Смена персонажа вызывает такой же пересчет, как и разрушения

• Таблицу Т нужно сохранить для ускорения пересчетов

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

Граф областей. Объединение графов Этажи зданий

Вложенные сетки, повернутые на угол, не кратный 90˚

Пещеры, точки телепортации, ...

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

Двухуровневый поиск пути Поиск пути по графу областей. В итоге –

список областей

Поиск пути по детальной карте только

среди точек, близких к центрам областей из

списка

Алгоритм А* не используется – здесь

алгоритм Дийкстры оказывается быстрее.

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

Алгоритм ДийкстрыНапоминаем:

Поиск пути основан на очереди с приоритетами

На каждом шаге обрабатывается первый узел в

очереди. Его необработанные соседи попадают в

очередь с приоритетом, равным суммарной

стоимости пути до них

В итоге для каждой обработанной позиции в хэш-

таблицу или 2d-массив попадает ее предок и

стоимость пути до нее

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

Быстрый алгоритм Дийкстры Эмпирическое отбрасывание ложных смен поз

Стоимость хода – целое число, меньшее N. Для

скорости полезно N – степень двойки.

Очередь с приоритетами моделируется при

помощи N массивов фиксированной длины.

Скажем «Нет» операциям с памятью!

Будьте осторожнее с STL, обращайте внимание на

неявное выделение памяти

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

Быстрый алгоритм Дийкстры

Очередь с приоритетами

как N массивов

После N-того массива

опять следует первый

Каждый массив свернут

в кольцо

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

Пусть обрабатывается массив с номером Х.

В массиве с номером (X+С) mod Nнаходятся все ждущие обработки позиции стоимостью на С больше текущей.

Быстрый алгоритм Дийкстры

На С++ полезно писать

такой алгоритм как

template

Cпециализаторы: тип

«позиция»; таблица,

хранящая информацию

о стоимости и позиции-

предке; число N

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

Красный крест: позиция обработана

Выделенная стрелкой позиция обрабратывается

Позиции с рамкой будут добавлены на текущем шаге

Способы оптимизации метода Кэшируйте результаты

Запоминайте расстояние в графе областей от

начальной области до остальных. 90% вызовов

поиска пути начинаются с той же области, что и

предыдущий вызов

Используйте предварительные вычисления:

считайте, пока есть время

Не используйте отложенные вычисления

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

Вот о чем мы поговорили: Три способа организации поиска путей: какой

использовать?

Иерархический поиск пути: построение и

перерасчет графа областей

Двухуровневый иерархический поиск

Быстрый алгоритм Дийкстры

Как оптимизировать эти методы?

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

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