Рубрика развивается при поддержке
Gamedev
Artyom Kaleev
8027

Как устроен искусственный интеллект персонажей в стелс-играх — на примере Hitman Материал редакции

Комплексные системы поведения.

В закладки

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

Мы выбрали главное из большого разбора Томми Томпсона, автора YouTube-канала AI and Games — блогер рассказал о том, как устроен искусственный интеллект персонажей в последних частях серии.

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

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

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

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

Три самых известных «службы» в Hitman называются «Маскировка» (Disquise), «Смерть» (Deadbody) и Hitman. Первая работает, когда Агент 47 носит чей-то костюм, а NPC делают вывод, выглядит ли игрок подозрительно или нет. Вторая отвечает за то, что все ИИ в пределах небольшого расстояния узнают о нахождении трупа. Третья же собирает все данные, известные об игроке — например, выдал ли он себя, или где он последний раз засветился.

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

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

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

Граждане могут обладать разной информацией и в зависимости от неё по-разному реагировать — что хорошо видно на уровне в Париже из Hitman 2016 года. Приглашённые гости обратят на вас внимание, если ваши действия будут уж слишком вызывающими, в то время как персонал (особенно тот, что окружает цель) может вас заподозрить куда быстрее.

«Охрана» же куда острее реагирует на некоторые чрезвычайные события, вроде нахождения трупов, людей без сознания или прочих объектов, которые лежат не на своём месте. Также она может организовать поимку игрока.

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

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

Как уже было сказано ранее, впервые современное древо поведения появилась в Hitman Absolution. В Hitman 2016 года её модифицировали, и одним из главных нововведений стали роли VIP (Целей) и телохранителей — целая подсистема внутри древа, со своими принципами работы.

Её создали из-за того, что в новых частях разработчики захотели продумать специфичные взаимодействия Цели и «охраны» — однако это было невозможно в рамках старой системы. Всё из-за того, что по факту ИИ не знали о существовании друг друга и действовали лишь в рамках своих поведенческих настроек. Да, в Hitman есть «ситуации», где персонажи объединяются ради общей цели — но они не контактируют и не обмениваются данными друг с другом, а лишь полагаются на «сенсоры» и «службы».

Потому в IO создали отдельный тип ИИ. VIP — это вариация «граждан», в то время как телохранитель — «охраны». Они знают о существовании друг друга: Телохранители всегда следуют за VIP и стабильно проверяют, в каком состоянии они находятся. Сами VIP же научились «командовать» другими ИИ: например, они могут приказать остановиться, остаться за дверью, проследовать дальше или что-то проверить.

Так в том числе объясняется одна из условностей: игрок рискует, убивая Цель на глазах у телохранителей, зато если VIP попросит охранников, чтобы они оставили его одного, у главного героя открывается окно для убийства.

Более того, телохранители стабильно проверяют состояние VIP. Если Цель уже довольно долго сидит в своей комнате, ИИ охраны войдёт внутрь (или туда, где было последнее известное местоположение), чтобы узнать, всё ли в порядке. В случае, если никто не может найти VIP, телохранители начинают поиск — и к ним подключается остальная охрана.

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

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

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

Стоит отметить, что в последних двух частях из-за увеличения масштабов уровней в IO не смогли не обойтись без LODding-system, или level-of-detail (уровня детализации). В локации могут существовать 300 NPC, у каждого из которых активно поведенческое древо — однако, чтобы не нагружать процессор, чем дальше ИИ от игрока, тем реже обновляются их базы знаний.

В конце ролика Томпсон подвёл итоги — по его мнению, в последних частях Hitman одна из самых комплексных систем искусственного интеллекта в играх.

В общем, Hitman — одна из самых продуманных игр, которые я когда-либо рассматривал. В ней большое количество отлично настроенных и оптимизированных систем управления NPC — при этом производительность не падает. Это стандарт для размера и масштабов реагирующих в реальном времени ИИ — и, надеюсь, в будущем во франшизе IO Interactive всё будет ещё интереснее.

Томми Томпсон
ведущий AI and Games
{ "author_name": "Artyom Kaleev", "author_type": "editor", "tags": ["\u0440\u0430\u0437\u0431\u043e\u0440","\u043e\u043f\u044b\u0442","\u0438\u0438","hitman"], "comments": 30, "likes": 97, "favorites": 244, "is_advertisement": false, "subsite_label": "gamedev", "id": 63195, "is_wide": true, "is_ugc": false, "date": "Fri, 09 Aug 2019 11:48:32 +0300", "is_special": false }
0
{ "id": 63195, "author_id": 17412, "diff_limit": 1000, "urls": {"diff":"\/comments\/63195\/get","add":"\/comments\/63195\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/63195"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
30 комментариев
Популярные
По порядку
Написать комментарий...
27

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

Ответить
1

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

Ответить
5

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

Ответить
7

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

Ответить
3

В Блад Мани в нескольких уровнях такое было. Точно помню на локе "Новая жизнь" приезжали ФСБ если труп найдется или стрельба будет какая

Ответить
0

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

Ответить
2

В GTA танки приезжают, если долго куролесить.

Ответить
0

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

Ответить
2

Комментарий удален по просьбе пользователя

Ответить
3

Это да, офигенная миссия. Проходил два раза. Почти всех убивал скальпелем. Гонял как поехавший.

Ответить
0

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

Ответить
0

Не, ну жизнь то продолжается. Будет новый хозяин.
А вообще забавно, как охрана тащит по полу черный мешок с трупом мимо людей в соседнюю комнату))

Ответить
5

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

Ответить
4
Ответить
0

Это если Мартинез столкнуть у него на глазах в реку с пираньями?

Ответить
3

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

Кстати вот не знаю, может щас уже пофиксили (баг?), но когда я практичести на старте затриггерил это там как раз подошел внизу его брат и стал как ни в чем не бывало спрашивать охранников "Пацаны, как там мой бегемот?", а на беднягу Гектора ему было вообще похуй. Мне наверное еще никогда не было так жаль NPC в игре, как тогда.

Ответить
4

Люблю Хитмана, но AI там просто никакущий. Такое ощущение что в Blood Money он был убедительнее, хотя возможно воспоминания подводят. Если действовать в рамках задуманного разработчиками поведения, получается более менее нормально и AI не сильно напрягает. Но стоит устроить в последних двух частях кровавую резню на весь уровень как AI ломается и рушит всю атмосферу. Пол уровня завалено трупами а NPC мирно между ними снуют и занимаются своими делами как ни в чём не бывало.

Ответить
5

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

Ответить
1

Ну как неправда если я такое проделывал несколько раз самостоятельно. "Зона опасности" у граждан очень маленькая. Можно буквально в соседней комнате высаживать очереди из автомата и взрывать бомбы а чувакам будет пофиг. Как и на трупы спустя время. Достаточно было бы сделать что бы все были напряжённые на вид, сменили бы анимацию на условно тревожную. А не попивали бы коктейли и предавались бы светским беседам в метрах двадцати от горки трупов. Симуляция поведения NPC на хаос вокруг в той же GTA будет убедительнее. Хотя там болванчики не делают ничего сверхординарного, просто дают дёру в панике.

Ответить
1

Ну вот снова ты не прав, в этом Хитмане выстрелы слышны за закрытыми дверьми и стенами, а про ГТА это вообще смешно, там никаких правил нет по сути, там можно убить койота из пистолета с глушителем в пустыне и получить звезду розыска, просто постоять рядом с полицейским 5 сек уже достаточно что бы тебя арестовали и так далее. В Хитмане же ресурсы ИИ тратятся на куда более сложные вычисления и проверки. У этой игры намного больше багов и проблем с определением статуса игрока (Спокойствие, Розыск Подозрение, Раскрытие) чем с ИИ, пусть разработчики сначала их исправят :)

Ответить
3

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

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

Ответить
0

Еще мне всегда хотелось больше изменений в механике, обусловленных сюжетом.
Простой пример — на военной базе (Колорадо) можно было бы сделать так, чтобы выстрелы не привлекали ничьего внимания (потому что террористы к этому привыкли), но и шумовые отвлечения бы тоже не работали. Такое изменение механик заставило бы искать новые пути.
Жаль, мало такого.

Ответить
0

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

Ответить
0

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

Ответить
0

Это и в первой было. Некоторые нпс-"начальники" отправляли на шум "подчиненных". Редко, но бывало.
Тоже никакой вариативности, просто больше времени уходит, чтобы всех по одному выманить и вырубить.

Ответить
1

Это все, конечно, хорошо. Но Хитману все еще далеко до идеального AI от гения.

Ответить
0

Хорошая попытка Тодд

Ответить
1

Ещё в документалке от Ноклип проскакивал редактор аи и прочей мишуры
На удивление, одно удовольствие смотреть как местные спидраннеры наебывают аи лысого.

Ответить
1

После зачистки в открытую от вооруженных npc хочется чтобы на агента 47 подтягивали различные силовые стркутуры, а все "полноценные" гражданские попросту убегали как это делает массовка при первом увиденном трупе. Да в плане шутера игра так себе, так как стрельба работает по старому методу где игнорируются стены перед оружием в руках, но думаю было бы интересно для многих испытать роль жертвы.

Ответить

Прямой эфир

[ { "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": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "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, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "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" } } } ]