|
Прочая документация Помощь, книги, инструкции, описания |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
23.03.2010, 14:58 | #1 |
Администратор
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
|
Нахождение пути: Раз и навсегда (pathfinding)
материал является вольным переводом статьи от PaulT Насколько мне известно, большинство игр используют совокупность связанных путевых точек(waypoint graphs) для нахождения пути. И по-моему мнению такой подход устарел. Ниже я изложу ограничения данного подхода. Было время, когда подобный способ был актуален. Где-то в 80-х, 90-х разработчики сталкивались с серьезными аппаратными ограничениями и им приходилось срезать углы. Но теперь вокруг нас многомиллиардная индустрия. Нашими целевыми платформами являются многоядерные монстры с постоянно растущими объемами памяти и настал момент, когда мы можем позволить себе реализовать нахождение пути правильно. Есть поговорка среди программистов, занимающихся Искусственным Интеллектом: "Поиск пути реализован". У нас имеется множество подходов к каждой проблеме. Мы просто не всегда их используем. Нет причины по которой нахождение пути не может присутствовать в каждой игре. Почему путевые точки не предназначены для нахождения пути Давайте я покажу, как выглядит типичная совокупность связанных путевых точек. Вот небольшой кусочек города Штормград из World of Warcraft: Рисунок 1. Часть Штормграда в World of Warcraft.Вот так примерно выглядит совокупность связанных путевых точек в этой области. Рисунок 2. Часть Штормграда в World of Warcraft с примерным построением waypoint graphs.Есть и другой способ, включающий использование выпуклых многоугольников(convex polygons) для описания мест, в которых подконтрольные искусственному интеллекту объекты могут передвигаться. Вот так примерно выглядит навигационная сетка(navigation mesh): Рисунок 3. Часть Штормграда в World of Warcraft с примерным построением navigation mesh.Есть пять причин, почему путевых точек оказывается недостаточно для корректного нахождения пути. 1. Некоторые игры требуют нелепого количества путевых точек. Для огромных открытых зон обычно требуются тонны путевых точек, щедро усыпанных по всему игровому миру для достижения адекватного передвижения. С другой стороны, для таких зон навигационной сетке требуются лишь пара больших полигонов, найти пути через которые гораздо быстрее. Пример. На рисунке снизу изображен город Halaa из игры World of Warcraft. Он довольно большой, в основном состоящий из открытого пространства по которому необходимо перемещаться неигровым персонажам. Рисунок 4. Город Халаа из World Of Warcraft, видел сверху (слегка измененный)С системой на основе путевых точек нам необходимо много точек для достижения полного охвата зоны. Но даже количества точек как на картинке снизу будет недостаточно для передвижения неигровых персонажай без зигзагов. Рисунок 5. Город Халаа с совокупность. путевых точек.Однако, используя навигационную сетку мы можем описать этот район горсткой выпуклых полигонов: Рисунок 6. Город Халаа с навигационной сеткой.Простота навигационной сетки означает, что нам не нужно искать множество узлов, когда вызывается алгоритм нахождения пути и поиск пути будет происходить быстрее. 2. Они заставляют персонажей ходить зигзагами. Совокупность связанных путевых точек принуждает персонажей придерживаться графов. Это означает, что персонажи адекватно движутся по рельсам, но почти никогда не находят оптимального пути из точки А в точку Б, потому что самый прямой путь почти никогда не соответствует графу. Это вызывает неестественные артефакты при поиске пути, в частности персонажи ходят зигзагами справа налево. Пример. Скажем, мы хотим чтобы персонаж переместился из точки А в точку Б. Рисунок 7. Две точки в Халаа.Вот так будет выглядеть путь при использовании совокупности связанных точек, которые я привел ранее. Рисунок 8. Навигация из точки А в точку Б с использованием waypoint graphs.Как видите, искусственный интеллект будет много раз поворачивать, как будто он едет по железной дороге. В идеале, после того как мы создали путь, мы должны как-то уровнять его чтобы добиться плавности, возможно путём создания сплайна Катмулла-Рома вдоль пути. Проблема состоит в том, что сеть путевых точек не имеет никакакой информации о том, что творится вне сети и это делает невозможным сглаживание и выравнивание пути. Как можно создать сплайн, если сплайн будет находится вне совокупности связанных путевых точек и передвижение по кривой может стать причиной падения с моста? Рисунок 9. Навигация из точки А в точку Б с использованием navigation mesh.Так как мы располагаем информацией о безопасных для персонажа местах, мы можем сгладить путь как угодно, пока путь находится внутри навигационной сетки. ("Да," слышу я, "но я могу просто добавить больше соединений между путевыми точками и здоровски сгладить путь! Я соединю все возможные узлы в городе так, чтобы персонаж мог ходить между ними по прямой линии."Тот факт, что навигационная сетка сообщает нам о том, где наш персонаж может ходить означает, что мы можем использовать сплайны для сглаживания передвижения. Всё что нам необходимо, так это знать, что сплайны остаются внутри навигационной сетки. Возвращаясь к примеру со Штормградом, вот путь построенный по путевым точкам(красная линия) и сглаженный путь внутри навигационной сетки(синяя линия). Рисунок 10. Движение по путевым точкам(красный цвет) и путь по навигационной сетке(синий цвет). продолжение следует...
__________________
Подключение к Jabber-конференции MaNGOS. |
22 пользователя(ей) сказали cпасибо: | ANTOMA (30.03.2010), BloodWarrior (10.05.2010), BombermaG (24.03.2010), Burned (23.03.2010), Chestarfild (25.03.2010), CruncH (23.03.2010), ExC0tiC (26.03.2010), Gerald (23.03.2010), Hantet (31.05.2010), Immortal (27.03.2010), Konctantin (23.03.2010), Lightunit (28.03.2010), Lurker (29.03.2010), Medivh (23.03.2010), Neggod (23.03.2010), partizanes (23.03.2010), selector (23.03.2010), unlucky (29.03.2010), zergtmn (23.03.2010), Кот ДаWINчи (23.03.2010) |
27.03.2010, 22:00 | #2 |
Новичок
Регистрация: 09.03.2010
Сообщений: 10
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
|
http://www.ai-blog.net/archives/000152.html
это оригинал для тех, кто владеет английским |
28.03.2010, 07:34 | #3 |
Гость
Сообщений: n/a
|
http://github.com/gc/mangos/commits/master
товарищи используют navmesh |
Метки |
pathfinding, waypoint |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проход сквозь стены, коллизии, видимость целей, pathfinding, wmo | DeusModus | Опкоды, Формулы, Клиент | 18 | 12.04.2010 05:59 |