Pull to refresh

Искусственный интеллект Horizon Zero Dawn

Reading time10 min
Views27K
Original author: Tommy Thompson
Horizon Zero Dawn находится в списке одних из лучших эксклюзивов для Playstation 4. В роли охотницы Элой игроки путешествуют по постапокалиптическим ландшафтам будущего, чтобы раскрыть тайны её прошлого и узнать о причинах разрушения мира. Упадок человечества привёл к расцвету «машин» — роботов разных форм и размеров, свободно живущих повсюду. Эти животные-роботы умны, скоординированы и смертельно опасны: чтобы выжить, нужно быстро думать, чтобы уничтожить их — тщательно готовиться и планировать.


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

Предупреждение: в статье присутствуют спойлеры сюжета Horizon Zero Dawn.



Экология Horizon Zero Dawn


Автоматические животные Horizon Zero Dawn доминируют в мире и удерживают контроль над территорией. Каждая машина обладает уникальной эстетикой и структурой, отражающей её функционал и предназначение в рамках нарратива игры. В процессе прохождения сюжетной кампании игроки узнают о «Чуме Фаро» — армии мятежных военных машин, уничтоживших мир, а также о расе машин, сконструированной ИИ по имени ГЕЯ, которая должна была восстановить планету до её естественного состояния; их конструкция повторяет давно вымерших земных животных.


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

  • Роботы типа «собиратель» и «уборщик», например, «бизоны» и «жвачники». Эти машины рабочего класса обычно находятся в открытых травянистых областях и обрабатывают землю. Они относительно кротки и часто избегают конфронтации, но при провоцировании становятся смертельно опасными.
  • Машины типа «разведчик», например, «рыскари» и «долгоноги» патрулируют область в поисках угроз и предупреждают ближайшие машины, чтобы они могли сражаться или убегать.
  • Машины типа «транспорт», например, «бегемоты» и «скарабы» забирают ресурсы у роботов-собирателей, что делает их ценной добычей. Они медленней, неповоротливей и обычно защищены более проворными роботами.
  • И, наконец, боевые машины, например, «пилозубы» и «ловчие» обычно нападают на игрока и находящиеся поблизости угрозы.

Всего на просторах игры можно встретить 28 уникальных машин, у каждой из которых есть собственные пассивные и активные поведения. Игрокам нужно научиться находить к ним правильный подход. Хотя наибольшие угрозы на пути к Меридиану (такие как «буревестник» и «громозев») бродят по миру в одиночку, игроки всё равно могут наткнуться на менее смертоносные машины, работающие в стадах. Часто можно увидеть пасущихся рядом более мелких роботов, таких как «рыскари», «бизоны», «падальщики» и «копьероги»: они поддерживают друг друга в процессе выполнения своих базовых функций. Со временем эти стада увеличиваются в размерах и становятся разнообразнее, например, конвои из «скрабов», стаи «бизонов» и «пилозубов», защищающих «жвачников» и «копьерогов».


Чтобы справиться с этой задачей, игре требуется множество систем ИИ, определяющих поведение каждого робота, их поведение внутри стада, коллективный интеллект самих стад, но в то же время балансирующий силу стад в разных частях открытого мира ради более разнообразного игрового процесса. Разработчики Horizon Zero Dawn, компания Guerilla Games, приступила к этому проекту, не имея многих инструментов ИИ, необходимых для реализации подобного геймплея.

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

  • О системе иерархии агентов, управляющей поведением каждой машины и индивидуально, и как части стаи или стада.
  • О расширении изначально созданных для Killzone систем планирования и выполнения, позволяющих каждой машине принимать решения.
  • Про набор сенсорных систем, позволяющий машинам быстро и эффективно распознавать угрозы и при необходимости исследовать их.
  • О динамической и интеллектуальной системе навигации, обеспечивающей интересные паттерны движения для наземных роботов, которые соответствуют геометрии мира и разному размеру машин.
  • О полностью отдельной системе навигации, предназначенной для летающих машин, таких как «коршуны» и «буревестники».
  • Про систему анимаций, учитывающую строение каждой машины и обеспечивающую интеллектуальный подход к их движению и атакам.
  • О системе под названием The Collective, которая управляет каждой отдельной машиной, активной в игре, и о том, как они распределяются по стадам.

Давайте начнём с того, что узнаем, как каждый ИИ-персонаж принимает решения и как игра управляет поведением стад.

Иерархия агентов


Каждая машина представлена в мире игры как отдельный ИИ неигрового персонажа, называемый «агентом». Но интереснее то, что агентом является и каждое стадо. В Horizon Zero Dawn используется иерархия, в которой машина может существовать в качестве агента полностью индивидуально, или как дочерний элемент группового агента, который используется для хранения информации о стадах.


Пример групповой иерархии [из (Beij, 2017)]

Групповой агент не существует в игровом мире физически, но отвечает за координацию всех агентов внутри него. Каждый индивидуальный агент имеет собственный набор сенсоров, позволяющий ему слышать близкие звуки или замечать опасности рядом с ним. Но кроме того, групповой агент имеет систему blackboard, в которой хранится внутриигровая информация, которая может понадобиться машине. Это позволяет игре снизить затраты производительности благодаря сохранению информации, которую не придётся вычислять каждому отдельному агенту (например, безопасные места или активные маршруты патруля). Кроме того, что более важно, агенты в группе могут обмениваться информацией друг с другом. Поэтому когда машина-разведчик находит игрока, каждая машина может принять решение о том, как реагировать на эту информацию. Благодаря этому можно увидеть, как роботы-собиратели стада, например, «жвачники» решают бежать, в то время как находящиеся рядом боевые машины приближаются, чтобы атаковать.

Используемая в Horizon Zero Dawn система ИИ называется «планировщик сети иерархических задач» (hierarchical task network planner, HTN). В отличие от систем планирования, используемых в играх наподобие F.E.A.R., которые планируют одно действие за другим, планировщик HTN генерирует планы, составленные из макросов действий. Каждый макрос содержит несколько действий в заданной последовательности. Это идеально подходит для разработки игры, ведь дизайнеры могут создавать макросы хорошего поведения, которое ожидают увидеть в игре. Ранее я рассказывал, как планировщик HTN использовался в Transformers: Fall of Cybertron, но стоит заметить, что Guerilla применяла планировщик HTN ещё Killzone 2, то есть он не разрабатывался с нуля, а постепенно совершенствовался в течение нескольких лет и в разных проектах студии.


Схема планировщика HTN [из (Beij, 2017)]

Планировщик HTN используется машинами с двумя целями: отдельные агенты могут запрашивать план действий для решения конкретной задачи, например, поиска новых областей, нападения на человека или бегства. Групповые агенты могут выполнять планы, задающие цели, которые должны назначаться отдельным агентам, что позволяет группам активно делиться информацией друг с другом внутри иерархии, и потенциально формировать новые подгруппы или разрушать существующие. Если вкратце, то каждая отдельная машина всё равно несёт большую ответственность за собственное поведение и выполнение назначенных ей задач, а также использует планировщик для принятия решений. Группы сохраняют координацию отдельных машин, перегруппируют их на основании происходящих в мире событий и, что самое важное, назначают каждой машине роли, чтобы они знали свою задачу в функции поддержки стада.

The Collective


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

Это достигается с помощью системы под названием «Коллектив» («The Collective»). «Коллектив» — это супергруппа: все группы машин и отдельные машины существуют внутри коллектива. Он управляет добавлением всех машин в мир, отслеживает, находятся ли они в группе, контролирует переходы между группами и экосистему машин, чтобы это не снижало общую производительность.

Отдельные машины в мире могут передавать запросы на присоединение к существующим группам открытого мира, если они действуют в одиночку. Это полезная функция, с учётом того, что многие машины остаются изолированными после того, как оставшаяся предыдущая группа или убежала, или была уничтожена. Поэтому коллектив может повторно использовать изолированные машины и присоединять их к другим группам. Для этого у каждой машины есть «паспорт». В их «паспорте» хранится информация о машине (например, её уровень и тип), а коллектив использует эти данные, чтобы определить, удовлетворяет ли она требованиям другой группы, и только в этом случае перемещает машину в группу.

Пример стада


Теперь давайте узнаем, как работают стада, и как выполняются групповые агенты при взаимодействии с ними игрока. Обычно стада помещаются в мир в расслабленном состоянии, в котором они не испытывают тревоги и просто находятся в определённой области карты. Типичная группа состоит из смеси разведчиков, собирателей и боевых машин. Роботы-собиратели находятся в центре, а боевые и разведывательные патрулируют вокруг, чтобы защищать их.


Когда стадо помещается в мир, коллекция групп в этой иерархии запрашивает роль. Эта роль назначает всем машинам поведения, отражающие их предназначение. Такими поведениями могут быть патрулирование в поисках источников угрозы, поиск близких источников беспокойства, нападение на врагов или простой сбор ресурсов мира. С течением времени эти роли могут сменяться, а события заставляют стадо изменять своё поведение и структуру. Обычно существует ограничение на количество машин, выполняющих внутри стада определённую роль, чтобы их структура не была разбалансированной.

Роль машин определяет задачи, которые индивидуальный агент будет стремиться выполнить. Так как изначально стадо ведёт себя расслабленно, машины-сборщики будут использовать планировщик HTN и хранящиеся в группе данные для поиска ближайших зон добычи ресурсов. Тем временем разведывательные и боевые машины генерируют пути патрулирования, по которым нужно ходить. Пути патрулирования генерируются автоматически, исходя из локальной геометрии, они избегают неудобного рельефа, и, что более важно, избегают хождения по высокой траве и другой растительности, которую игрок может использовать для скрытного подкрадывания к стаду. Однако чтобы дать игрокам шанс в бою, многие пути патрулирования намеренно прокладываются рядом с растительностью, чтобы игрок мог ставить ловушки или проще взламывать роботов.


Стада подстраивают баланс своей структуры при наличии угрозы, формируя группы «бегства» (flee) и «боя» (combat) [из (Beij, 2017)]

Но, разумеется, они не всегда остаются в таком состоянии; когда игроки начинают нападать на машины, их поведение соответствующим образом меняется. Для машин, не являющихся частью стада, всё сводится к конкретному классу машины. Только немногие убегают, когда их провоцируют напрямую. Подавляющее большинство машин атакует игрока, и даже машины-собиратели, находясь в одиночестве, часто нападают на игрока.

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

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

Хотя после этого момента всё сильно усложняется, у игрока по-прежнему остаётся много возможностей повернуть ситуацию в свою сторону, потому что и системы группирования, и системы боевого ИИ обеспечивают увлекательный и одновременно сложный игровой процесс. Это достигается благодаря системе боевого ИИ, который пытается структурировать бой таким образом, чтобы он не был хаотичным или поломанным.

Сформированные боевые группы имеют разные роли и сбалансированные приоритеты, поэтому крупные машины стада распределяются по группе там, где это возможно, а более мелкие выстраиваются для их поддержки. Кроме того, группы выбирают машины для нападения на игрока не только на основании того, считает ли планировщик HTN, что он может выполнить определённое поведение, но и в зависимости от того, будет ли эта атака интересной. Если все машины просто атаковали бы игрока одновременно, то он бы довольно быстро принял мучительную смерть. Поэтому боевые системы используют подход, схожий с применяемым в Halo 3, когда баланс вражеских атак на игрока основывается на том, будет ли атака интересной в контексте боя.

Для этого требуется вспомогательная функция выбора действия, вычисляющая, насколько интересно будет, если машина атакует. Это зависит от текущего состояния машин, от того, знает ли игрок, что машина находится рядом с ним, от близости к игроку и от величины урона, полученного и нанесённого ею. Это значение становится входным условием для системы планирования HTN; его задача — не только обеспечить определённую сложность, но и добавить в бой долю разнообразия.

Но ещё важнее то, что когда от планировщика HTN требуют сгенерировать действия для атакующих групп, то пока выбирается атака, другим машинам группы тоже раздаются поведения движения вокруг игрока и ожидания своей очереди. Это сделано намеренно, чтобы создать игроку возможности или напасть на пассивную машину, или контратаковать только что ударившую его. Постепенно игрок сможет ослабить их, и в основном это происходит потому, что боевая система намеренно оставляет себя открытой для атак.

В заключение


Как понятно из данной статьи, машины в Horizon Zero Dawn могут оказаться смертельно опасными, как в одиночку, так и в группе. Благодаря планированию сети иерархических задач и системе иерархии интеллектуальных агентов машины могут бродить по миру сами по себе или при необходимости защищать и поддерживать друг друга. Именно взаимодействие с таким увлекательным миром не даёт игроку расслабиться.

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

Справочные материалы


  • Julian Berteling, 2018. “Beyond Killzone: Creating New AI Systems for Horizon Zero Dawn”, GDC 2018.
  • Arjen Beij, 2017. “The AI of Horizon Zero Dawn”, Game AI North 2017.
  • Wouter Josemans, 2017. “Putting the AI back into Air: Navigating the Air Space of Horizon Zero Dawn”, Game AI North 2017

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+36
Comments25

Articles