Download - Алгоритмы иерархического поиска пути в играх
Три метода поиска пути(По возрастанию сложности и
эффективности)
Эмпирический обход препятствий
A* и распределенный А*
Подробнее тут: http://dev.dtf.ru
Иерархический поиск пути
Алгоритмы поиска путиАндрей Плахов
Стратегические правила
• Никогда не используйте сложный метод, если можно обойтись простым!
• Заставьте геймдизайнеров иногда думать о поиске пути!
Алгоритмы поиска путиАндрей Плахов
Иерархический поиск пути
Как ищут путь люди?
Как использовать в
играх похожие
алгоритмы?
Алгоритмы поиска путиАндрей Плахов
Иерархический поиск путиЧто входит в систему иерархического поиска?
Предварительное построение карты
Создание графа областей
Поиск в графе областей
Окончательный поиск с ограничениями
Пересчет областей, если карта изменилась
Алгоритмы поиска путиАндрей Плахов
Граф областейРазобьем карту на
«квадратики». Регулярное разбиение
Сторона квадратика – степень двойки (4 или 8)
Каждая область будет целиком входить в один из квадратиков
Алгоритмы поиска путиАндрей Плахов
Граф областейВыделяем области
Как это сделать за 2 прохода по карте?
Первый проход: номер области определяется по ближайшим соседям
На слайде номер отображается цветом.
Внизу нарисована таблица соответствий
Алгоритмы поиска путиАндрей Плахов
Граф областейСтроим граф областей
Как это сделать за 2 прохода по карте?
Второй проход: области отождествляются
Номер области определяется по таблице соответствий
Алгоритмы поиска путиАндрей Плахов
Граф областей Разметка расстояний Выбор центра области:
Ближайшая к центру
тяжести точка области
Таблица Т: расстояние
от каждой точки области
до ее центра. Один шаг
стоит 2, по диагонали 3
Расстояние между
областями: минимум по
их общей границе
Алгоритмы поиска путиАндрей Плахов
Граф областей Пересчет
• Пересчет должен быть локальным
• Смена персонажа вызывает такой же пересчет, как и разрушения
• Таблицу Т нужно сохранить для ускорения пересчетов
Алгоритмы поиска путиАндрей Плахов
Граф областей. Объединение графов Этажи зданий
Вложенные сетки, повернутые на угол, не кратный 90˚
Пещеры, точки телепортации, ...
Алгоритмы поиска путиАндрей Плахов
Двухуровневый поиск пути Поиск пути по графу областей. В итоге –
список областей
Поиск пути по детальной карте только
среди точек, близких к центрам областей из
списка
Алгоритм А* не используется – здесь
алгоритм Дийкстры оказывается быстрее.
Алгоритмы поиска путиАндрей Плахов
Алгоритм ДийкстрыНапоминаем:
Поиск пути основан на очереди с приоритетами
На каждом шаге обрабатывается первый узел в
очереди. Его необработанные соседи попадают в
очередь с приоритетом, равным суммарной
стоимости пути до них
В итоге для каждой обработанной позиции в хэш-
таблицу или 2d-массив попадает ее предок и
стоимость пути до нее
Алгоритмы поиска путиАндрей Плахов
Быстрый алгоритм Дийкстры Эмпирическое отбрасывание ложных смен поз
Стоимость хода – целое число, меньшее N. Для
скорости полезно N – степень двойки.
Очередь с приоритетами моделируется при
помощи N массивов фиксированной длины.
Скажем «Нет» операциям с памятью!
Будьте осторожнее с STL, обращайте внимание на
неявное выделение памяти
Алгоритмы поиска путиАндрей Плахов
Быстрый алгоритм Дийкстры
Очередь с приоритетами
как N массивов
После N-того массива
опять следует первый
Каждый массив свернут
в кольцо
Алгоритмы поиска путиАндрей Плахов
Пусть обрабатывается массив с номером Х.
В массиве с номером (X+С) mod Nнаходятся все ждущие обработки позиции стоимостью на С больше текущей.
Быстрый алгоритм Дийкстры
На С++ полезно писать
такой алгоритм как
template
Cпециализаторы: тип
«позиция»; таблица,
хранящая информацию
о стоимости и позиции-
предке; число N
Алгоритмы поиска путиАндрей Плахов
Красный крест: позиция обработана
Выделенная стрелкой позиция обрабратывается
Позиции с рамкой будут добавлены на текущем шаге
Способы оптимизации метода Кэшируйте результаты
Запоминайте расстояние в графе областей от
начальной области до остальных. 90% вызовов
поиска пути начинаются с той же области, что и
предыдущий вызов
Используйте предварительные вычисления:
считайте, пока есть время
Не используйте отложенные вычисления
Алгоритмы поиска путиАндрей Плахов
Вот о чем мы поговорили: Три способа организации поиска путей: какой
использовать?
Иерархический поиск пути: построение и
перерасчет графа областей
Двухуровневый иерархический поиск
Быстрый алгоритм Дийкстры
Как оптимизировать эти методы?
Алгоритмы поиска путиАндрей Плахов