Выпущенный компанией IO Interactive в 2016 году Hitman вернул франшизу к её корням: созданию богатых и интересных сценариев, в которых Агент 47 должен устранять свои цели, часто импровизированным и непрактичным способом. Для решения этой задачи внутри игры применяется множество систем ИИ, именно их мы и будем изучать. Мы углубимся в структуру систем ИИ, отвечающих в последнем поколении игр Hitman за различные функции: создание реагирующих на ситуацию NPC, телохранителей, системы толп, управляемые искусственным интеллектом анимации и многое другое.


Об игре Hitman


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


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

  • Управляемая ситуациями система деревьев поведений, при которой более 300 персонажей уровня могут принимать решения о своих дальнейших действиях на основании происходящего вокруг них и реагировать на события, что часто на руку игроку.
  • Отзывчивые и практичные системы охранников и телохранителей, которые усложняют работу Агента и распределяются для защиты усложняющих игроку добирание до цели.
  • Мощная система управления и симуляции поведения толп, позволяющая использовать на уровне толпы до 1000 NPC, реагирующих на действия игрока.
  • И, наконец, тщательно настроенный фреймворк анимаций, обеспечивающий всем этим персонажам максимально реалистичный внешний вид и поведение.

Я объясню, как работают все эти системы, а также расскажу о более тонких настройках, использованных как в игре 2016 года, так и в сиквеле 2018 года. Однако прежде чем начинать разговор об ИИ любой игры, нужно взглянуть на источник, с которого начинается тулчейн ИИ и изучить основные принципы его дизайна. Поэтому мы начнём с Hitman Absolution.

Выпущенная в 2012 году Hitman Absolution реализовала более гладкую и линейную интерпретацию формулы франшизы. Несмотря на относительно низкую по сравнению с более новыми играми популярность, она стала базисом основных технологий и инструментов, применяемых в играх 2016 и 2018 годов. Одной из самых важных причин этого стало то, что Absolution была первой игрой во франшизе после Hitman: Blood Money 2006 года (в промежутке между ними IO Interactive занималась играми серии Kane & Lynch, а также Mini Ninjas. Поэтому для Absolution были созданы новые инструменты и системы, лучше отражавшие амбиции команды на будущее. Базовая архитектура ИИ неигровых персонажей Hitman, а также системы для толп и анимаций были созданы для Absolution и усовершенствованы для релизов Hitman 2016 и 2018 года.

Базовая архитектура ИИ


ИИ Hitman разрабатывался с целью реализации возможности различных стилей прохождения, которые были доступны в Absolution и последующих играх. Это значит, что система позволяет использовать скрытность, маскировку и сливаться с окружением (разработчики называют это «социальным стелсом») или же выбрать более агрессивный подход и побряцать оружием.

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


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

Но прежде чем дерево поведений сможет принять решение, каждый персонаж должен узнать, что же происходит в окружающем его мире. Для этого у каждого активного ИИ-персонажа в мире есть база знаний. База знаний составлена из двух множеств данных: общее знание, то есть информация, публично известная о предмете или персонаже, а также информация, отражающая его состояние. Но есть и приватное знание, которое персонаж сохраняет о последних известных ему позициях объектов или персонажей. Также он хранит историю знания об конкретных предметах. Следовательно, персонаж начинает замечать, что находящиеся рядом вещи пропадают или перемещаются; аналогично, он не будет пытаться найти персонажей, которые пропали или погибли, а также взаимодействовать с ними.


База знаний накапливается сбором всей информации, происходящей в текущий момент в определённой точке игрового мира, с последующей её фильтрацией при помощи датчиков и служб. Датчики (Sensors) позволяют персонажам обновлять свои личные данные и реагировать на замеченные ими изменения, а также слышать происходящее поблизости. Службы (services) обновляют общую базу знаний. Тремя самыми распространёнными службами являются Disguise (маскировка), Deadbody (труп) и Hitman (убийца). Служба Disguise используется, когда Агент 47 переодет в костюм; она помогает персонажу узнать, должен ли костюм Агента быть ему подозрительным. Служба Deadbody помогает персонажам поблизости понять, что недавно неподалёку от них был найден труп. Наконец, служба Hitman позволяет обмениваться общими знаниями об Агенте 47, например, информацией о том, был ли игрок скомпрометирован, и где в последний раз его видели. Забавной чертой датчиков является то, что они обеспечивают любопытный баланс контекстного знания, в то же время оставляя пробелы, которые может исследовать игрок. Датчики предоставляют непосредственную информацию о мире, но их действие может быть прервано преграждением области видимости или отвлечением персонажей. Службы не всемогущи и обновляются только с определённой периодичностью. Следовательно, большая часть получаемой от служб информации довольно быстро устаревает, что позволяет игроку манипулировать персонажами в своих интересах.

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

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

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

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

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


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

Система деревьев поведений впервые появилась в Absolution и к выпуску игр 2016 и 2018 годов была сильно усовершенствована и дополнена. Она использует систему уровней детализации (LOD). Это значит, что когда на уровне находится более 300 активных ИИ-персонажей, управляемых деревьями поведений, те из них, которые расположены вдали от игрока, обновляют своё поведение реже, и приоритет ресурсов ЦП для обновления ИИ отдаётся самым близким персонажам. Кроме того, у этих далёких ИИ-персонажей анимации или упрощаются, или полностью отключаются. Как говорилось выше, подавляющее большинство персонажей на уровне управляется системой ИИ толпы, но при необходимости каждый персонаж в толпе может быть наделён ИИ дерева поведений, что повышает его в возможностях до реагирующего и скоординированного персонажа.

Толпы


Теперь, прежде чем мы перейдём к системам, разработанным для игры 2016 года, давайте рассмотрим вторую базовую систему, созданную для Absolution: фреймворк искусственного интеллекта толпы. В Absolution он мог поддерживать до 1200 агентов в одной толпе, и 500 из них могли быть видимы одновременно. Я этого ещё не говорил, но системы толп очень сложно реализовать правильно. Толпы часто состоят из множества ИИ-болванчиков, которые не сравнятся по уму с обычными ИИ-персонажами. В основном это вызвано тем, что их слишком много, но часто это ещё и вполне логично — люди в толпе просто повинуются инстинкту толпы и движутся в пространстве к своей цели. Но разработчики Hitman поставили перед собой задачу максимально размыть границу между толпами и ИИ деревьев поведений.


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


Одна из реальных опасностей наличия такого количества агентов в системе управления толпой заключается в том, что они опрашивают навмеш для поиска пути или просто проверяют, могут ли они достичь нужной точки. Навмеши (Navigations meshes) — это система, обычно используемая в 3D-играх для перемещения персонажей по окружениям. Компания IO осознала, что это довольно критический момент, поэтому наложила поверх навмеша 2D-сетку принятия решений, сообщающую ИИ-персонажу, можно ли пройти по заданному пространству, нужно ли его избегать (если это охраняемая область), точки выходов для NPC, а также запретные области в случае возникновения паники, вызванной Агентом 47 — было бы странно, если бы люди спокойно пробегали рядом с ним. Сетки принятия решений есть и у искусственного интеллекта толп, и у деревьев поведений. Для деревьев поведений сетки обеспечивают быстрый и эффективный способ выполнения проверок видимости, поиска подходящих локаций рядом с важными точками и обнаружение тактических локаций относительно заданного персонажа без излишней нагрузки на сам навмеш.

Но самое сложное начинается, когда в систему добавляется Агент 47. Толпа ходит вокруг него и занимается своими делами, но когда игрок начинает сеять хаос, системы ИИ должны иметь возможность реагировать на него. Персонажи в непосредственной близости от игрока должны выглядеть паникующими и пытаться сбежать, но это будет иметь кумулятивное воздействие на всю толпу — она начнёт движение по пространству, как только каждый расположенный поблизости персонаж начинает бежать от источника тревоги. Эта проблема решается двумя системами, называемыми зонами поведений (behaviour zones) и потоками паники (panic flows).


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

  • Первая заставляет находящихся на линии огня падать на пол.
  • Вторая заставляет персонажа в непосредственной близости от игрока паниковать.
  • Третья заставляет всех в определённом радиусе от игрока узнать о ситуации и перейти в состояние повышенной тревоги.

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

Такие зоны поведений создаются дизайнерами для каждого уровня, ведь они нужны, чтобы персонажи реагировали на происходящие в мире события, но их реакции при этом имели смысл в конкретном контексте. Например, если в Hitman 2016 года в баре на показе мод начнётся драка, это окажется очень неуместным и толпа будет реагировать довольно негативно. Если же игрок начнёт заварушку в iVixen Club в Hitman Absolution, то она не будет воспринята так серьёзно, ведь стрип-бары имеют соответствующую атмосферу и люди могут вести себя там как свиньи.

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

Телохранители и VIP


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


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

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

Во-первых, система позволяет создавать ситуацию под названием Ambient VIP Escort, при которой телохранители сопровождают VIP по уровню. Телохранители используют навмеш и системы поиска пути, чтобы держаться поблизости от персонажа и следовать за ним. Если VIP решает остановиться, то телохранители переключаются на пассивные поведения и ждут, когда нужно будет следовать за ним дальше.

Однако это означает, что VIP никогда не смогут остаться в одиночестве. Естественно, VIP-у может потребоваться остаться одному, чтобы заняться делами, что помогает игроку в выполнении его задачи. Поэтому VIP может приказать телохранителям не следовать за ним в определённые области; дизайнеры уровней разместили на карте пометки, сообщающие телохранителям, где им нужно ждать босса.

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

В случае, если они найдут VIP и с ним всё в порядке, процесс продолжается обычным образом. Если VIP мёртв, то включается режим активного поиска, но если VIP найден без сознания, то телохранители реализуют последнюю ситуацию, добавленную в игру 2016 года — Evacuate VIP.


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

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

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

Анимации


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

Традиционно анимация управляется через контроллер: система знает, что в определённых контекстах персонаж переходит от состояния пассивного ожидания к ходьбе и бегу. Для этого программистам и аниматорам обычно нужно строить подобные системы таким образом, чтобы каждый персонаж знал не только анимацию, которую ему надо воспроизводить, но и понимал, как ему выполнять плавные переходы между анимациями, а также справляться со множеством условий, при которых необходимо смешивать вместе несколько анимаций для достижения нужного эффекта. Если система работает плохо, то персонажи выглядят неестественно и неуклюже, но для её правильной реализации для каждого персонажа требуется много работы. Задача становится ещё более сложной, когда персонажи могут находиться в новых уникальных условиях и в систему добавляются новые анимации. Эту проблему id Software решила, добавив в DOOM 2016 управляемый искусственным интеллектом контроллер анимаций, который минимизировал количество создаваемых для каждого персонажа анимаций и позволял вычислять наилучший способ управления ими в текущем контексте. Но уникальной для Hitman чертой было то, что IO Interactive не могла себе позволить иметь более тысячи сложных контроллеров анимации одновременно. Поэтому ей нужно было что-то менее затратное, а в идеальном случае и вычисляемое заранее для снижения нагрузки на ЦП.


Поэтому IO Interactive решила исследовать систему под названием «графы движений» (Motion Graphs), в которой задача дизайнеров заключалась в подключении всех анимаций, а задача ИИ — в том, чтобы разобраться, как все их смешивать. Лежащая в основе идея достаточно проста: записав все эти анимации, мы заставим алгоритм находить кадры в которых две анимации достаточно близки друг к другу, чтобы их можно было использовать как переход. Это реализуется поиском пары кадров (по одному от каждой анимации), разница между которыми минимальна. При этом ищутся не максимально похожие друг на друга кадры, а наименее непохожие с учётом длительности и скорости. После того, как метрика несоответствия выберет пару с наименьшим значением, она добавляет её в граф возможных переходов. Когда построение графа движений завершено, персонаж может просто действовать в игре и определять последовательность анимаций, необходимую для достижения необходимого эффекта.

Именно здесь в действие вступает ИИ, потому что несмотря на то, что граф движения устраняет дизайнерскую часть проблемы, нам всё равно нужна система для выполнения нужных анимаций. Поэтому начиная с Absolution в серию игр был интегрирован новый контроллер анимаций, использующий машинное обучение с подкреплением. Если система знает текущую анимацию, текущее направление и скорость, тогда ей нужно выполнить условия необходимого направления и скорости, а также выяснить, в какой текущей анимации ей нужно оставаться и с какими направлением и скоростью. Первая версия системы использует простую разновидность стандартной жадной политики, но позже разработчиками были изучены возможности Q-обучения и приближения функции путём её разложения по системе базисных функций (basis function approximation), которые могут быть применены в новых версиях.

Hitman 2


В процессе движения от Absolution к Hitman 2016 были улучшены базовые системы ИИ, оптимизирована система толп, а также добавлены системы телохранителей и VIP. Тот же процесс продолжился и при разработке сиквела 2018 года под названием Hitman 2.

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


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

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

В заключение


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

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


  • «Creating the AI for the Living, Breathing World of Hitman Absolution» by Mika Vehkala, GDC Europe 2013.
  • «Crowds in Hitman: Absolution» by Kasper Fauerby, Game/AI Conference 2012
  • «Reinforcement Learning based Character Locomotion in Hitman: Absolution» by Michael Buttner, Game/AI Conference 2012.
  • «Bodyguards and VIPs: A look at ambient, alert and evacuation AI behaviour in Hitman» by Jason Schroder and Thomas Egeskov Petersen. nucl.AI Conference 2016.

Комментарии (1)


  1. stgunholy
    04.10.2019 15:28

    Вроде-бы для бэкенд разработки совершенно лишняя инфа, но как-же интересно читать! Спасибо!