Друзья, приветствую, с Вами Будуев Антон. В данной статье мы обсудим AI Agents (Navigation Agents) в Unreal Engine (UE5, UE4) или, как их еще называют по-русски, ИИ-Агенты. Разберём суть Агентов и их алгоритмы построения пути и обхода препятствий, а именно: Pathfinding (поиск пути), RVO (алгоритм уклонения на основе взаимных скоростных препятствий) и Detour Crowd Manager (менеджер по обходу толпы).
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Navigation Agents (AI Agents)
Navigation Agents (Nav Agents, AI Agents) или, по-русски, навигационные ИИ-агенты в Unreal Engine — это объекты искусственного интеллекта (обычно персонажи или ИИ-боты), использующие систему навигации для перемещения по игровому уровню.
Передвигаются ИИ-агенты с помощью управления контроллером искусственного интеллекта (AI Controller) и поиска пути (Pathfinding) по навигационной сетке (Navigation Mesh или NavMesh), которая создаётся автоматически инструментом Nav Mesh Bounds Volume на основе геометрии уровня и представляет собой упрощённую карту проходимых областей.

Навигационные Агенты позволяют реализовать реалистичное и эффективное перемещение ИИ-персонажей в игровом мире, учитывая препятствия, размеры и особенности ландшафта.
Таким образом, 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 можно растянуть по той территории уровня, по которой необходимо организовать движение AI-персонажа. При этом для визуального удобства на клавиатуре можно нажать клавишу P (при выделенном NavMesh), чтобы навигационная сетка окрасилась в зелёный цвет, наглядно демонстрируя пространство для перемещения.

После расположения инструмента 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.

- 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.

На примере ниже для ИИ-Агентов стандартная система RVO выключена (Use RVO Avoidance = False), но в замен включён менеджер по обходу толпы Detour Crowd Manager.
Как видно из примера, система Detour Crowd Manager имеет самое наилучшее воздействие на поведение ИИ-Агентов при обходе динамических препятствий. При использовании этой технологии Агенты вообще друг с другом не сталкиваются, а перестраивают свои маршруты заранее.
Настройки Detour Crowd Manager производятся в настройках самого проекта Unreal Engine: Edit / Project Settings / 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 формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.