Gamedev Владимир Семыкин
8 075

Хаос — не помеха: системы управления ИИ в Just Cause 3

Зоны активных действий, дерево поведения и комментарии на локациях.

В закладки
Аудио

В Just Cause 3 игрок попадает в открытый мир, в котором он волен разрушать объекты окружения. Во многих действиях участвует ИИ противников, с которыми можно совершать огромное количество разнообразных действий.

Роберт Мейер, геймдизайнер Avalanche Studios, на GDC 2017 выступил со своим докладом про работу системы ИИ в Just Cause 3. Он рассказал про устройство дерева поведения, модули микроповедения, разнообразные комментарии для NPC и многое другое. Мы выбрали из его выступления главное.

Для адекватной реакции игрового противника на любые действия используется дерево поведения.

Дерево поведения для NPC-противников

Каждый лист на дереве представляет собой альтернативное состояние для NPC и содержит в себе ещё более глубокую структуру.

Иерархия, которая скрывается за каждым отдельным листом

Кроме дерева поведения у NPC есть система, которая показывает им наилучшие точки на карте для перемещения. Эта система контролирует их позиционированием в пространстве.

Зелёные точки — приоритетные позиции, в рамках которых NPC будут стараться держаться 

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

Вся система ИИ в Just Cause 3 имеет несколько значимых особенностей:

  • каждый NPC принимает решения за себя. Нет единой системы, которая координирует действия сразу многих противников;
  • система подходит для открытого мира, но не для заскриптованных моментов;
  • из-за сложности устройства деревьев поведения только ИИ-дизайнеры могут с ними работать.

Работа самого дерева поведения устроена сравнительно просто: ИИ проверяет условия, в которых находится NPC, и последовательно выбирает какое состояние подходит для нынешней ситуации.

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

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

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

Для этого настраиваются точки спауна и траектории движения. В свою очередь, это порождает новые вопросы, которые касаются, например, скорости передвижения, поведения вертолётов и так далее. И каждое условие прописывается отдельно в дереве поведения.

Ветвь дерева поведения

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

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

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

Кроме того, эта система корректирует поведение NPC в заскриптованных сценах. Например, дизайнер миссий решил, что будет эффектно, если вертолёт вылетит из-за горы и направится в сторону игрока. Но пользователь может за несколько секунд приблизиться к этой горе и оказаться рядом с её вершиной. Тогда система поведения вертолёта учтёт новое положение пользователя и отменит изначально задуманный заскриптованный путь. Такие решения необходимы в играх, в которых у игрока есть большая свобода действий.

Также для дизайнеров миссий актуально настраивать поведение прерывания действий. Это нужно для того, чтобы NPC меняли своё поведение в зависимости от целей миссии, которые со временем могут меняться и дополняться.

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

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

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

Или же это может касаться разных характеристик NPC. Например, однажды в одном задании дизайнер миссий попросил изменить дальность, с которой может стрелять снайпер: он сидел на башне высотой в 140 метров, а дальность его стрельбы — 120 метров. Несмотря на то, что такие коррективы сделали бы миссию более эффектной, ИИ-дизайнеры отказались делать это, потому что игроки должны привыкнуть к фиксированной дальности стрельбы снайперов.

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

На точки внедрения указывают оранжевые стрелки

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

Проблема заключается в том, что создание такой последовательности потребует много времени, потому что придётся искать баги, вносить изменения по требованию других разработчиков и так далее. Кроме того, такая последовательность не подойдёт для других ситуаций, потому что придётся создавать свою цепочку действий.

Если выстроить все действия в единую последовательность, то можно заметить, что они вписываются в разные блоки микроповедения.

Последовательности микроповедений встраиваются в основное дерево поведения: переход в укрытие становится входной точкой, далее идёт участие в бою, которое сменяется последующими действиями

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

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

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

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

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

К каждой задаче в этой миссии привязано поведение Марио

Благодаря этому, поведение NPC всегда синхронизировано с задачами миссии.

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

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

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

ИИ часто сам принимает решение по поводу позиционирования на поле боя. Это также касается и времени, которое он выбирает, например, для смены укрытия. При этом обновляется и его зона действий. Благодаря этой системе, он может сменить укрытие, но затем продолжить процесс стрельбы по тому же противнику.

В Just Cause 3 также существует система примечаний к различным зонам на игровой карте. Например, для ИИ отдельно выделяются точки, в которых можно укрыться.

Зелёные зоны — укрытия для NPC

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

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

Разработчики Just Cause 3 создали несколько систем для управления поведением ИИ. Одна из важнейших их находок — система модулей микроповедения и интерфейс для дизайнеров миссий, которые позволяют создавать последовательности действий, применимые во множестве разнообразных ситуаций.

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

#ИИ #justcause #лонг

{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["long","\u043b\u043e\u043d\u0433","\u0438\u0438","justcause"], "comments": 11, "likes": 56, "favorites": 76, "is_advertisement": false, "subsite_label": "gamedev", "id": 46827, "is_wide": false, "is_ugc": false, "date": "Tue, 16 Apr 2019 13:35:11 +0300" }
{ "id": 46827, "author_id": 94357, "diff_limit": 1000, "urls": {"diff":"\/comments\/46827\/get","add":"\/comments\/46827\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/46827"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }

11 комментариев 11 комм.

Популярные

По порядку

Написать комментарий...
16

Без этой демонстрации статья не считается полной

Ответить
4

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

Ответить
3

Вообще игра мега технологична, и местами круче всяких фаркраев и вайлдлендс по поведению НПЦ, взрывам и воздушной технике, ей бы стелс опциональный только и аренок для всех умений, а взрывы и полеты итак идеальны, 4я часть в этом плане ничего нового не добавила, к сожалению
А ещё это игра идеальна для геймпада, несмотря на то что это шутер без укрытий, хорошо что аваланчи рейдж делают

А ещё на gdc есть интересное видео про НПЦ для вачдогс2, где также каждому болванчику прописали целую систему симуляции эмоций и темперамента

Ответить
1

Интересно. Спасибо. К слову, этой игре бы оптимизации завезти и она стала бы ещё лучше.

Ответить
1

Играл через год после выхода, уже игралось нормально.

Ответить
1

А управление транспортом на ПК так и не смогли сделать нормальным.

Ответить
1

Подобное хотелось бы в видеоформате глянуть с пояснениями и футажами =)

Ответить
0

Так и просится мультиплеер)

Ответить
0

Прочитал "Xbox — не помеха".

Ответить
0

А игра все равно вышла унылой, а ИИ тупой

Может им не оттуда надо было начать.
Вторая часть то была заметно интересней

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Пять простых способов разогнать свой ПК
с помощью соли и чайной ложки
Подписаться на push-уведомления