Эта статья изначально появилась на AIandGames.com и является дополнением к видео YouTube, показанному выше. AI and Games - это краудфандинговая серия о применении искусственного интеллекта в видеоиграх.

Создание умных и привлекательных врагов, с которыми можно сражаться в видеоиграх, представляет собой головоломку для разработчиков игр. В каком-то смысле вы надеетесь привить некоторые доказательства стратегии и реакции, чтобы игрок чувствовал себя более вовлеченным в каждую схватку. Несмотря на это, эти неигровые персонажи (NPC) обычно создаются с той целью, чтобы мы стреляли и убивали их в очень короткие промежутки времени. Таким образом, необходимо представить все интеллектуальные способности этих персонажей в течение очень ограниченного периода времени.

В этой статье мы рассмотрим некоторые проблемы и решения разработчиков ИИ в Bungie, когда они были хранителями франшизы Halo. Хотя с тех пор серия перешла на принадлежащую Microsoft 343 Industries, есть важный путь, который можно увидеть в первых трех играх, поскольку системы совершенствуются и устанавливаются более обширные и сплоченные философии проектирования ИИ.

Серия Halo

Оригинальный Halo был выпущен в 2001 году для первой консоли Xbox. Halo играет ключевую роль в эволюции шутеров от первого лица (FPS), поскольку он не только продемонстрировал, как жанр может адаптироваться к оборудованию консоли и режимам ввода, но и сохранил калибр и качество, сравнимые с его собратьями на ПК. Halo зарекомендовал себя как «приложение-убийца» для оригинальной консоли Xbox на протяжении всего ее жизненного цикла.

Halo несет в себе некоторые интересные идеи в дизайне NPC AI, которые продолжают отличать ее от других игр в этом жанре.

Наследие серии Halo часто отражается в ее технических достижениях - Halo 2 стал одним из первых успешных консольных онлайн-шутеров - а также в созданной в ней механике. в современном дизайне шутеров от первого лица: подзарядка индикаторов здоровья, автомобильные бои и ограниченные арсеналы с тех пор проникли во все шутеры AAA и оказали влияние на подобные серии Call of Duty.

Однако, в отличие от многих своих современников, в дизайне NPC AI есть несколько интересных идей, которые продолжают отличать его от других игр в этом жанре. Это во многом обусловлено конструкцией Завета: вражеские силы должны сражаться в оригинальной серии Halo.

Завет

Ковенант - это союз инопланетных рас, которые ведут войну с человечеством на протяжении всей серии Halo. С точки зрения искусства, это позволяет создать целый ряд уникальных инопланетных рас, но это также является катализатором для различных моделей поведения и стратегий. Краткий список типичных противников Halo, встречающихся в этой серии, приведен ниже:

  • Ворчание: Маленькие и довольно безобидные враги, когда они находятся в одиночестве. Однако в группах они могут представлять опасность.
  • Шакалы: эти существа появляются либо на средней дистанции с энергетическим щитом и плазменным оружием, либо на большой дистанции с использованием снайперских винтовок.
  • Дроны: летающие враги, которые появляются группами по 10 и более человек. Хотя обычно они вооружены плазменным оружием, они не представляют такой большой угрозы из-за минимального здоровья. Однако, как и пехотинцы, они выигрывают от численности.
  • Элиты: бронированные солдаты завета, которые физически более внушительны, чем их собратья. Умный, жестокий и может владеть самым разным оружием.
  • Скверны: крупнее и внушительнее, чем элиты; обычно в броне и с тяжелым оружием, включая гравитационные молоты. Брут появляется в конце Halo 2 и берет на себя более заметную роль в Halo 3.
  • Охотники: самый крупный и смертоносный из противников: большой бронированный враг, вооруженный щитом на одной руке и тяжелой пушкой - на другой. Охотники могут понести серьезное наказание, если их единственная слабость окажется на их спине.

Каждый тип врага имеет собственное поведение ИИ, что оказывается полезным для игроков в понимании того, как изменить свою тактику на основе визуального подтверждения врага. Это проверенный и верный подход, восходящий ко временам Space Invaders и Pac-Man, но он значительно богаче в более современных играх.

ИИ Halo

Важнейшим элементом дизайна Halo, влияющим на ИИ, является среда: уровни Halo имеют тенденцию быть очень большими. В результате игра в значительной степени заинтересована в создании встреч: периодов, когда игрок обнаруживает несколько врагов, которых необходимо победить. Персонажи должны быть размещены в пространстве таким образом, чтобы местные геометрические элементы оказались полезными как для игрока, так и для противника в бою: например, силы противника, удерживающие плацдарм или вход в военное сооружение.

Неигровым персонажам Halo нужен интеллектуальный боевой ИИ, но он может адаптироваться к контексту текущей ситуации.

В рамках этого большого и открытого пространства игра часто переходит в периоды боевых действий на транспортных средствах. В отличие от многих других шутеров, где это был бы отдельный уровень или последовательность в Halo, здесь нет разделения. Кроме того, боевые действия на транспортных средствах легко могут быть асинхронными: это означает, что игрок может находиться в транспортном средстве, а враги - нет, и наоборот. Таким образом, NPC не только нуждаются в интеллектуальном боевом ИИ, но и должны адаптироваться к контексту текущей ситуации.

Для того, чтобы это оказалось полезным, персонажи должны быть способны к ряду основных поведений:

  • Режимы ожидания. Естественно, это будет включать в себя анимацию ожидания, но также может включать базовое навигационное патрулирование.
  • Боевое поведение: атакует игрока, если он виден, и ищет его цель, если он теряет поле зрения.
  • Защитное поведение. Бегство в укрытие, отступление на более укрепленные позиции, потенциально бегство, если все кажется потерянным.

Такое поведение должно быть не только быстрым и отзывчивым, но и гибким, чтобы во время большой и интенсивной боевой последовательности ИИ мог часто менять цели персонажа, и они отвечали тем же. В то же время игрок не должен быть в состоянии обнаружить, что такие изменения происходят. Это подводит нас к способам достижения этой цели ИИ. Естественно, что в любой игре существует большое количество элементов дизайна, которые объединяют все воедино. Однако для начала мы рассмотрим один из основных элементов инфраструктуры ИИ Halo: деревья поведения.

Деревья поведения

Деревья поведения (BT) имеют много общего с другой популярной техникой игрового ИИ: конечными автоматами (FSM). Это во многом связано с их природой, поскольку они предоставляют символические и абстрактные средства, с помощью которых можно идентифицировать оба конкретных поведения, которые вы хотите, чтобы NPC демонстрировал. Кроме того, вы можете довольно эффективно моделировать логику принятия решений, которая обеспечивает переходы между поведениями. Хотя, несмотря на их сходство, есть ряд различий, которые мы обсудим в ходе работы над этой статьей.

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

  1. Иерархия действий, которые выполняет NPC. Такая иерархия помогает придать сложному поведению более четкую форму.
  2. Поток управления более точен. Обычно, если мы хотим управлять тем, как происходят определенные переходы в автомате, мы должны стать невероятно строгими в его структуре. BT по умолчанию имеют четкую структуру управления из-за подхода к их исполнению сверху вниз.

ПОБОЧНОЕ ПРИМЕЧАНИЕ: Интересно, что деревья поведения сильно похожи на иерархические конечные автоматы (HFSM), поскольку они также диктуют иерархию моделирования знаний и последующего выполнения. В некоторых отношениях на самом деле сложно отличить HFSM от BT. Однако ради этой статьи и нашего желания обсудить приложения дерева поведения мы воздерживаемся от таких ассоциаций.

Дерево поведения состоит из узлов . Узел обычно имеет несколько дочерних узлов, у которых впоследствии будут собственные дочерние узлы. Вот как растут BT: начиная с одного узла и расширяясь с этого момента. Каждый узел может использоваться для того, чтобы диктовать последовательность действий, одно конкретное действие или применять логические операции, такие как условные выражения и отрицания. Базовый набор узлов дерева поведения следующий:

  • Leaf: узел, у которого нет дочерних элементов. Обычно листовой узел будет использоваться для выполнения определенного действия.
  • Селектор: узел, используемый для принятия решения о том, какие дочерние элементы (или целые поддеревья) должны быть выполнены. Учитывая их природу, ожидается, что у селектора будет множество дочерних узлов. Селектор похож на оператор if в языках программирования. Обычно селектор будет использовать знания, которые существуют где-то в памяти, чтобы принять решение на основе состояния игры.
  • Последовательность: узел, из которого должны выполняться все дочерние элементы ниже него. Это позволяет создавать более сложные и сложные формы поведения.

Простой пример дерева поведения можно увидеть на изображении ниже. Как мы видим, мы начинаем с корневого узла и продолжаем двигаться по дереву в обходе по порядку: то есть мы начинаем сверху и перемещаемся, затем посещаем каждый листовой узел и его дочерние элементы из слева направо.

В случае с этим деревом поведения, которое заинтересовано в перемещении между комнатами с использованием дверного проема, его можно упростить следующим образом:

  • Идем к двери.
  • Найдите способ сделать дверной проем доступным одним из следующих способов:

- Открытие двери.

- Разблокировка, затем открытие двери.

- Вышибить дверь

  • Пройдите в дверной проем.
  • Закройте дверь.

Как вы можете видеть в этом примере, основные действия - Walk to Door, Open Door, Unlock Door и т. Д. - все это конечные узлы дерево. Предполагается, что затем NPC выполнит это конкретное поведение, и по завершении мы перейдем к следующему узлу в дереве. Между тем состояния Selector более очевидны, учитывая, что они четко обозначены как таковые. Однако не очевидно, что состояния Selector потребуют доступа к некоторой информации, хранящейся в памяти, чтобы определить, какое из этих действий следует предпринять. В случае вышеприведенного примера вполне возможно, что он просто открывает дверь, если это разрешено, или разбил бы дверь, если бы она была заперта. В других случаях этот персонаж может не позволить разбить дверь, поэтому он должен найти ключ, чтобы открыть ее. Между тем, у вас могут быть персонажи, похожие на Халка, которые не могут просто открыть или отпереть дверь и могут только разбить ее. Как серия Halo решает этот тип гибкости, обсуждается позже.

Это также порядок, в котором дерево поведения будет перемещаться при выполнении. Это может быть достигнуто путем вызова дерева поведения из корневого узла в каждом кадре игры, чтобы определить, в каком узле сейчас находится NPC, что довольно интенсивно использует память. В качестве альтернативы мы можем сохранить текущую позицию в BT в памяти, а затем обратиться к этой конкретной точке на следующем тике AI в логике игры.

Возможно, это лучший подход - построить дерево поведения как асинхронный процесс; поскольку для выполнения определенного поведения может потребоваться множество отметок. Таким образом, если BT вызывается почти в каждом кадре, проверять, готов ли он к переходу, довольно расточительно. Поскольку мы часто ожидаем, что на выполнение поведения потребуется время.

Деревья поведения в Halo

Деревья поведения широко применялись в Halo на протяжении всей серии, и в ряде опубликованных работ обсуждались их применения как в Halo 2, так и Halo 3. Этим в основном и посвящена оставшаяся часть этой статьи.

Начнем с изучения деревьев поведения, используемых в играх Halo. Как обсуждалось ранее, агент персонажа в Halo (то есть диапазон различных действий и решений, которые они могут принять) очень велик по сравнению с большинством других неигровых персонажей в первую очередь. стрелков. В результате типичные деревья поведения, принятые в Halo, как показано ниже, довольно большие.

Что интересно в этих деревьях поведения, так это то, что каждый уровень действует как селектор: диктуя, какое конкретное действие NPC совершит в этот конкретный момент времени. Как мы видим, этот диапазон действий очень широк и включает в себя все различные сегменты боя, которые могут происходить в схватке Halo (подробнее об этом чуть позже). Первый уровень определяет, какие именно действия будет выполнять NPC, будь то вступление в бой с противником, укрытие или попытка бегства. Однако, когда мы переходим ко второму уровню, мы замечаем, что каждое из этих «поддеревьев стратегии» содержит ряд индивидуальных вариантов поведения. Например, чтобы вступить в бой с противником, будь то игрок или NPC, ИИ может выбрать атаку, бросив гранату, зарядить игрока (поведение, которое обычно демонстрируют элиты, охотники и скоты) или провести перестрелку. Даже в этом случае довольно легко представить, что каждое из этих действий, если они представлены столь абстрактно, представляет собой дерево поведения само по себе.

Контекст действия: определение применимости

Естественно, теперь мы избалованы диапазоном действий, которые мы можем совершать вживую в игровом процессе, но важно помнить, что, как упоминалось ранее, определенные действия потребуют некоторой оценки того, применимы ли они в этом состоянии. Хотя мы можем думать об этом на основе класса врага, на самом деле это больше о текущем контексте, в котором находится NPC. Мы обсудим это немного позже, но сначала давайте подумаем о том, что этот NPC в настоящее время делает и что их роль есть.

Если вы рассмотрите показанное дерево, некоторые из этих действий не будут применимы в определенных контекстах. Легче всего оценить это во время боя на транспортных средствах: учитывая, что теперь мы ограничены действиями, обеспечиваемыми этой машиной. Кроме того, это может измениться в зависимости от нашей роли с этим транспортным средством. Если мы рассмотрим набор деревьев поведения, показанный на изображении ниже, он показывает, какие сегменты дерева активны в зависимости от контекста и роли. Крайнее левое дерево показывает только то, что применимо, когда NPC действует как пехота. Как видите, это включает большую часть всего диапазона действий. Среднее дерево находится в контексте транспортного средства, но с этим NPC, берущим на себя роль водителя. Крайнее правое дерево также находится в контексте транспортного средства, но NPC берет на себя роль пассажира. Мы видим, что в результате этих изменений он постепенно становится более ограничительным.

В зависимости от типа персонажа и текущего сценария диапазон доступных действий будет динамически меняться на протяжении всей игры.

Кроме того, тип персонажа будет влиять на то, какие действия могут быть выполнены. В Halo 2 это было достигнуто путем определения областей дерева как «запрещенных»: это означает, что противник может выполнять только определенные типы действий в зависимости от того, кем и чем он является. Например, Бруты не стремятся к какой-либо тактике уклонения или защиты и по большей части действуют агрессивно. Эта идея развивалась со временем в Halo 3 с введением масок поведения, которые запрещали определенные части дерева в зависимости от «эмоционального состояния» NPC. Данный персонаж может быть нормальным, робким или агрессивным, и в результате диапазон доступных действий со временем будет меняться. Вдобавок к принятым деревьям поведения можно добавить настраиваемые поведения на этапе предварительной обработки «галочки» ИИ, что означает, что могут быть введены новые временные модели поведения.

Таким образом, в зависимости от контекста битвы и типа персонажа диапазон доступных действий будет динамически меняться на протяжении всей игры. Имея это в виду, как тогда NPC решает, какое действие предпринять?

Контекст действия: определение приоритета

Хотя эта система в значительной степени соответствует нашим целям, большая проблема с таким количеством различных действий на выбор заключается в том, как вы решить, какое из них лучше использовать? Это достигается в основном за счет использования списка на основе приоритета: где на основе приоритета этого действия дерево поведения выберет этот конкретный путь для выполнения. Такие приоритеты рассчитываются во время выполнения на основе того, что происходит в игре. Это означает, что приоритеты будут приобретать или терять важность в ходе битвы; что весьма актуально, учитывая, что приоритеты меняются во время встречи. В частности, поскольку вы, как игрок, будете продолжать принимать собственные решения прямо на поле битвы, это будет определять, что враг сделает в ответ. Однако с этим подходом есть небольшая проблема.

Если мы рассмотрим идею «приоритета действий», мы предполагаем, что эти приоритеты более или менее фиксированы. Это неверно, если мы посмотрим, как ход битвы может часто меняться в зависимости от происходящего. Таким образом, слои выбора дерева поведения продолжают повторно оценивать, является ли текущее выполняемое действие лучшим для данного момента времени. Это достигается путем переоценки приоритета каждого действия, то есть они изменят позицию в вышеупомянутом списке. Таким образом, по мере развития битвы со временем NPC будут отвечать тем же и реагировать на то, что происходит вокруг них.

Дополнительный момент, связанный с приоритетом, заключается в том, что после завершения определенных действий они несут задержку, чтобы действие не выполнялось снова в быстрой последовательности. Очевидный пример - бросание гранаты; в противном случае игрок будет постоянно уворачиваться от взрывчатки, поскольку персонажи постоянно бросают ее в вас.

Действуя импульсивно

И последнее, что нужно сказать о деревьях поведения Halo 2: каждый NPC действует на основе своей системы приоритетов. Эти приоритеты постоянно пересматриваются на протяжении всего срока их службы с использованием заранее определенной системы баллов. В большинстве случаев это работает нормально, но есть обстоятельства, когда такое ранжирование приоритетов больше не соответствует контексту. Пример, обсуждаемый в (Isla, 2005), - это когда NPC сражается с игроком, и они находятся рядом с транспортным средством. NPC предпочтут стоять на своем и сражаться. Учитывая, что любая попытка сесть в транспортное средство может быть неразумной, поскольку игрок может сократить разрыв и атаковать, пока NPC забирается в транспортное средство. Однако, если игрок находится в транспортном средстве, то попадание в пустой Призрак или Призрак поблизости, несомненно, лучший способ действий.

Для решения этой проблемы в Halo 2 используется подход, управляемый событиями, который называется стимулирующим поведением. Такое поведение вынуждает NPC импульс дать определенному действию приоритет в данный момент времени. Хотя некоторые из этих импульсов довольно малы или специфичны, как, например, в случае с автомобилем, бывают случаи, когда они более всеобъемлющи. Обычное поведение отряда - отступление меньших врагов в случае поражения более крупных классов, таких как Элиты или Бруты. Это происходит благодаря смерти лидера, вызывающей стимулирующее поведение других персонажей.

Едва царапая поверхность

Это лишь малая часть довольно существенных процессов искусственного интеллекта и инструментов проектирования Bungie. В этой статье мы представили серию основных систем искусственного интеллекта Halo и обсудили, в частности, их реализацию дерева поведения. Что не обсуждалось, так это довольно обширная работа, которая вкладывается в создание каждой уникальной схватки, через которую игрок будет проходить свой путь. Я расскажу обо всем этом и многом другом в одной из будущих статей, посвященных миру Halo.

использованная литература

Шампандард А. (2007) Объединение с искусственным интеллектом Halo: 42 уловки, которые помогут вашей игре, AIGameDev.com, 2007

Ислам, Д. (2005) Как справиться со сложностями в Halo 2 AI. GDC 2005 Proceedings, размещено на Gamasutra, 2005

Ислам, Д. (2010) Архитектура Blackboard и представление знаний в духе HALO. AIGameDev.com, 2010 г.

Симпсон, К. (2014 г.) Деревья поведения для ИИ: как они работают, Гамасутра, июль 2014 г.