Navigation Agents (AI Agents) в Unreal Engine и алгоритмы обхода препятствий

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим AI Agents (Navigation Agents) в Unreal Engine (UE5, UE4) или, как их еще называют по-русски, ИИ-Агенты. Разберём суть Агентов и их алгоритмы построения пути и обхода препятствий, а именно: Pathfinding (поиск пути), RVO (алгоритм уклонения на основе взаимных скоростных препятствий) и Detour Crowd Manager (менеджер по обходу толпы).

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Navigation Agents (Nav Agents, AI Agents) или, по-русски, навигационные ИИ-агенты в Unreal Engine — это объекты искусственного интеллекта (обычно персонажи или ИИ-боты), использующие систему навигации для перемещения по игровому уровню.

Передвигаются ИИ-агенты с помощью управления контроллером искусственного интеллекта (AI Controller) и поиска пути (Pathfinding) по навигационной сетке (Navigation Mesh или NavMesh), которая создаётся автоматически инструментом Nav Mesh Bounds Volume на основе геометрии уровня и представляет собой упрощённую карту проходимых областей.

Navigation Agents (Nav Agents, AI Agents) - навигационные ИИ-агенты в Unreal Engine
Navigation Agents (Nav Agents, AI Agents) — навигационные ИИ-агенты в Unreal Engine

Навигационные Агенты позволяют реализовать реалистичное и эффективное перемещение ИИ-персонажей в игровом мире, учитывая препятствия, размеры и особенности ландшафта.

Таким образом, Navigation Agents (AI Agents) — это объекты, которые с помощью системы навигации Unreal Engine способны находить и проходить оптимальные маршруты по игровому уровню, учитывая свои физические и поведенческие характеристики.

Основные особенности Navigation (AI) Agents

  • использование навигационной сетки — ИИ-Агент ориентируется в мире только с помощью NavMesh, специальной навигационной сетки, которая генерируется по уровню и определяет проходимые области. Именно по этой сетке Агент ищет путь, чтобы добраться до цели.
  • поиск пути — навигационный Агент рассчитывает оптимальный маршрут по NavMesh, используя алгоритмы поиска пути, выбирая путь с минимальными затратами (стоимостью) перехода между полигонами сетки Navigation Mesh.
  • обход препятствий — Агенты поддерживают методы избегания столкновений с динамическими объектами и другими Агентами, что позволяет им плавно маневрировать в многолюдных сценах.
  • размер и форма — навигационные Агенты имеют определённые параметры, такие как радиус, высота и другие характеристики, которые учитываются при построении пути по навигационной сетке, чтобы Агент мог проходить через доступные пространства без застревания.
  • типы движения — Агент может иметь разные возможности передвижения: ходить по земле, прыгать, плавать, летать. Эти возможности влияют на то, как Агент будет строить маршрут и передвигаться по уровню.
  • множество агентов — одна навигационная сетка может поддерживать несколько Агентов с разными параметрами.

Pathfinding (поиск пути для AI Agents)

Как уже говорилось ранее, изначально ИИ-агенты передвигаются с помощью поиска пути (Pathfinding) по навигационной сетке (Navigation Mesh или NavMesh).

Навигационная сетка (Navigation Mesh, NavMesh) в Unreal Engine — это упрощённое представление проходимых областей уровня, созданное на основе геометрии уровня инструментом Nav Mesh Bounds Volume. Используется она для того, чтобы Агенты искусственного интеллекта могли эффективно находить пути и перемещаться по игровому миру.

Чтобы добавить на уровень навигационную сетку, необходимо воспользоваться специальным инструментом Nav Mesh Bounds Volume, который находится в Unreal Editor в меню Quickly add to the Project / Volumes.

Инструмент Nav Mesh Bounds Volume в Unreal Engine (UE4, UE5)
Инструмент Nav Mesh Bounds Volume в Unreal Engine (UE4, UE5)

После чего Nav Mesh Bounds Volume можно растянуть по той территории уровня, по которой необходимо организовать движение AI-персонажа. При этом для визуального удобства на клавиатуре можно нажать клавишу P (при выделенном NavMesh), чтобы навигационная сетка окрасилась в зелёный цвет, наглядно демонстрируя пространство для перемещения.

Рабочая область Nav Mesh Bounds Volume
Рабочая область Nav Mesh Bounds Volume

После расположения инструмента Nav Mesh Bounds Volume на уровне, система автоматически генерирует навигационную сетку на основе геометрии столкновений на уровне и делит сетку на плитки. Затем эти плитки делятся на полигоны, образуя граф, который используется Агентами для поиска пути при перемещении к месту назначения. Каждому полигону присваивается стоимость, которую Агенты используют для поиска оптимального пути с наименьшей общей стоимостью.

Агент определяет наиболее оптимальный маршрут до пункта назначения, сравнивая стоимость каждого навигационного полигона в навигационной сетке. Если все полигоны на маршруте имеют одинаковую стоимость, то Агент выберет кратчайший путь до цели (обычно это прямая линия).

Также разработчик сам может влиять на стоимость навигационных полигонов с помощью объёмов, модификаторов навигации или фильтров запросов навигации.

Поиск пути определяет маршрут только вокруг неподвижных объектов. То, что при движении ИИ-Агента на его пути могут появиться динамические препятствия, поиск пути не предусматривает.

На примере выше ИИ-Агенты приводятся в движение только на основе поиска пути при помощи стандартного использования функции AI Move To (код настройки этой функции, аналог которого использовался в примере выше, Вы можете изучить в статье, посвящённой разбору AI Move To).

Каждый ряд ИИ-агентов двигается к своему кубу по заранее построенному пути Pathfinding, то есть для каждого Агента заранее произведён поиск пути до цели. Но в результате того, что ИИ-Агенты двигаются все сразу, в итоге они становятся помехой друг для друга, и AI Move To завершает свою работу. Как итог, большинство ИИ-Агентов не достигают своей цели, просто застопорившись друг об друга. Всё это происходит потому, что поиск пути производится при постановке задачи, а не в самом процессе перемещения. Когда ставилась задача для системы навигации, то никаких преград не было. Преграды возникли уже динамически в процессе движения.

Avoidance в Unreal Engine (алгоритмы обхода/уклонения для AI Agents)

В то время как поиск пути может определить маршрут вокруг неподвижных объектов, алгоритмы обхода (Avoidance) лучше подходят для работы с движущимися динамическими препятствиями. Существует два метода обхода, которые Агенты могут использовать для перемещения вокруг динамических препятствий и друг друга: Reciprocal Velocity Obstacles (RVO) и Detour Crowd Manager.

Reciprocal Velocity Obstacles

Reciprocal Velocity Obstacles (RVO, взаимные скоростные препятствия) — метод рассчитывает максимально приближенный к предпочтительному направлению вектор скорости для ИИ-Агента в пределах заданного радиуса. При этом предполагается, что Агент движется с постоянной скоростью в течение каждого временного шага. При достижении вектором скорости Агента какого-либо динамического препятствия, RVO пытается уклониться от него, временно меняя направление так, чтобы ИИ-Агент в итоге смог достичь своей цели.

Система RVO включает улучшения, позволяющие избежать постоянного пересчёта пути, и систему приоритетов для разрешения потенциальных столкновений. Она полностью независима от NavMesh (вследствие чего Агенты могут быть «вытолкнуты» за пределы навигационной области) и встроена в функционал компонента Character Movement класса Character, но по умолчанию отключена. Её настройки находятся во вкладке Details компонента Character Movement в разделе Character Movement: Avoidance.

Character Movement: Avoidance - настройки Reciprocal Velocity Obstacles (RVO)
Character Movement: Avoidance — настройки Reciprocal Velocity Obstacles (RVO)
  • Use RVO Avoidance — включает или отключает использование алгоритма RVO для динамического обхода столкновений. Для многопользовательских игр запускается только на сервере.
  • Avoidance Consideration Radius — радиус вокруг Агента, в пределах которого учитываются другие Агенты для расчёта обхода. Чем больше радиус, тем больше соседей учитывается, но также и выше нагрузка.
  • Avoidance Weight — вес (важность) обхода для данного Агента. Чем выше вес, тем сильнее Агент будет менять траекторию, чтобы избежать столкновения.
  • Avoidance UID — уникальный идентификатор Агента в системе RVO.
  • Avoidance Group — группа, к которой принадлежит Агент. Позволяет настроить, с какими группами избегать столкновений, а с какими нет.
  • Groups to Avoid — группы, которые данный Агент должен избегать. Позволяет гибко настраивать взаимодействия между разными типами Агентов.
  • Groups to Ignore — группы, которые Агент игнорирует при расчёте обхода. У Groups to Ignore приоритет выше, чем у Groups to Avoid.

На примере ниже для ИИ-Агентов включена система RVO (Use RVO Avoidance = True) с радиусом действия алгоритма (Avoidance Consideration Radius) = 150.

Из примера видно, что ситуация для ИИ-Агентов по достижению своих целей изменилась. Теперь, при достижении вектором скорости в рамках своего радиуса динамического препятствия, RVO отклоняет Агента от препятствия и в итоге Агент достигает своей цели.

При включении алгоритма обхода RVO поведение ИИ-Агентов заметно улучшилось, но до сих пор не идеально, так как Агенты всё равно сталкиваются с препятствиями (на расстоянии заданного радиуса) и только затем уже отклоняются от них.

Чтобы улучшить ситуацию, воспользуемся вторым методом обхода динамических препятствий — Detour Crowd Manager.

Detour Crowd Manager

Detour Crowd Manager (менеджер по обходу толпы) — более продвинутая система обхода, использующая адаптивный метод выборки RVO путем вычисления грубой выборки скоростей со смещением в сторону Агента, что позволяет значительно улучшить качество обхода динамических препятствий для большого количество AI-Агентов по сравнению с традиционным методом RVO. Также система использует оптимизацию видимости и топологии коридора траектории для дальнейшего улучшения предотвращения столкновений.

Система Detour Crowd Manager обладает широкими возможностями настройки, включая параметры для определения шаблонов выборки, максимального количества Агентов и радиуса действия Агентов. Доступна она через отдельный класс AI-контроллера — Detour Crowd AI Controller и может использоваться с любым классом Pawn.

Соответственно, чтобы подключить Detour Crowd Manager, в классах Pawn (Character) во вкладке Details в разделе Pawn / AI Controller Class в качестве контроллера необходимо выбрать Detour Crowd AI Controller.

Подключение AI-контроллера Detour Crowd AI Controller к Pawn
Подключение AI-контроллера Detour Crowd AI Controller к Pawn

На примере ниже для ИИ-Агентов стандартная система RVO выключена (Use RVO Avoidance = False), но в замен включён менеджер по обходу толпы Detour Crowd Manager.

Как видно из примера, система Detour Crowd Manager имеет самое наилучшее воздействие на поведение ИИ-Агентов при обходе динамических препятствий. При использовании этой технологии Агенты вообще друг с другом не сталкиваются, а перестраивают свои маршруты заранее.

Настройки Detour Crowd Manager производятся в настройках самого проекта Unreal Engine: Edit / Project Settings / Crowd Manager.

Настройки Detour Crowd Manager
Настройки Detour Crowd Manager
  • Avoidance Config — конфигурация параметров уклонения от препятствий, включающая веса и смещения, влияющие на поведение Агентов при обходе друг друга. Позволяет тонко настраивать стиль движения и реакцию на столкновения (как Агент выбирает новую скорость и направление движения при столкновениях).
    Velocity Bias: смещение центра выборки в сторону текущей скорости Агента. Чем выше, тем сильнее алгоритм ориентируется на текущее направление движения.
    Desired Velocity Weight: вес, определяющий, насколько сильно Агент стремится двигаться в желаемом направлении (цели).
    Current Velocity Weight: вес влияния текущей скорости Агента. Помогает сглаживать изменения направления.
    Side Bias Weight: вес, отвечающий за склонность Агента обходить препятствия в стороны, а не останавливаться или пытаться пройти прямо.
    Impact Time Weight: вес, учитывающий время до возможного столкновения с препятствием или другим Агентом. Чем выше, тем сильнее Агент избегает потенциальных столкновений.
    Impact Time Range: временной интервал (в секундах), в течение которого оценивается возможность столкновения.
    Custom Pattern Idx: индекс пользовательского шаблона выборки направлений. Значение 255 означает использование стандартных шаблонов. Использование других значений без корректной реализации может привести к сбоям.
    Adaptive Divisions: количество сегментов на каждом кольце выборки. Влияет на детализацию направлений.
    Adaptive Rings: количество колец выборки вокруг центра. Влияет на радиус и количество проверяемых направлений.
    Adaptive Depth: количество рекурсивных итераций уточнения выборки. Влияет на качество и точность выбора направления.
  • Sampling Patterns — шаблоны выборки скоростей для расчёта обхода. Определяют, как система выбирает альтернативные направления движения с приоритетом на направление Агента, улучшая качество уклонения от динамических препятствий.
    Angles: углы (в градусах или радианах), определяющие направления выборки вокруг текущего вектора движения Агента. Позволяют задать, в каких направлениях Агент будет искать альтернативные пути.
    Radii: радиусы, определяющие расстояния от центра текущей скорости, на которых будут расположены точки выборки направлений. Позволяют создавать кольца с разным радиусом для оценки вариантов движения.
  • Max Agents — максимальное количество AI-Агентов, одновременно учитываемых системой обхода. Влияет на производительность и точность расчётов.
  • Max Agent Radius — максимальный радиус Агента, учитываемый при расчётах обхода. Используется для определения зоны влияния и предотвращения столкновений.
  • Max Avoided Agents — максимальное количество других Агентов, от которых текущий Агент пытается уклониться одновременно. Позволяет ограничить вычислительную нагрузку.
  • Max Avoided Walls — максимальное количество стен или препятствий, которые Агент учитывает при уклонении. Помогает балансировать между качеством обхода и производительностью.
  • Navmesh Check Interval — интервал времени (в секундах) между проверками состояния NavMesh для Агентов. Позволяет оптимизировать частоту обновления навигационных данных.
  • Path Optimization Interval — интервал времени между оптимизациями пути Агента, что помогает сглаживать и улучшать траекторию движения.
  • Separation Dir Clamp — ограничение отклонения влево/вправо от направления Агентов при уклонении. Влияет на то, насколько сильно Агенты расходятся в стороны.
  • Path Offset Radius Multiplier — множитель радиуса смещения пути, который помогает избежать слишком близкого прохождения Агентов друг к другу.
  • Resolve Collisions — включить устранение столкновений между Агентами в симуляции обхода толпы. Если отключено, обработка столкновений будет обрабатываться компонентом движения (Movement Component).

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.




наш Телеграм канал

Оцените статью
( 3 оценки, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.