Разбор искусственного интеллекта The Last of Us
Разные роли противников, принцип работы навмешей и различия в ИИ между обычными врагами и заражёнными.
Скриншот: игра The Last of Us Part 1 / Naughty Dog
Недавно завершился первый сезон сериала The Last of Us. Зрители и критики высоко оценили адаптацию от HBO, отметив, что её авторам удалось сохранить общее настроение игры. В то же время перенос истории из видеоигрового формата в кинематографический неизбежно привёл к тому, что адаптированное произведение потеряло драматургию, связанную с игровым процессом в целом и поведением виртуальных противников в частности.
В этой статье редакция «Геймдев» Skillbox Media рассказывает о том, как студия Naughty Dog, разработчики оригинальной игры, создавала геймплейное напряжение и чувство приземлённости при помощи искусственного интеллекта врагов.
Фундамент искусственного интеллекта
Naughty Dog было непросто создавать ИИ для The Last of Us. Разработчики проектировали многие системы с нуля, ведь предыдущие игры студии почти не имели скрытных эпизодов. Как признаётся Трэвис Макинтош, ведущий программист Naughty Dog, стелс в Uncharted был рудиментарной механикой: «…стелс был в игре, он был весёлым, но если что-то не работало, мы закрывали на это глаза».
Например, в первых трёх Uncharted у NPC не было промежуточных тревожных состояний между спокойным и агрессивным — как только противник замечал Дрейка, начиналась перестрелка. А The Last of Us требовала иного подхода.
В основе искусственного интеллекта любой стелс-игры лежат несколько компонентов: слух и зрение NPC, а также поиск оптимального маршрута в разных ситуациях. Некоторые из этих систем были в новинку для Naughty Dog, но знакомы любому разработчику стелс-игр.
Зрение
NPC в The Last of Us «видят» героя, только если тот попадает в их поле зрения, выполненное в форме конуса. Такая форма давно стала классической для жанра, так как она сравнительно проста в реализации и создаёт интуитивно понятный опыт для игрока.
Впрочем, у такого прямолинейного подхода есть недостаток: из-за узкого основания конуса герой может встать в метре слева или справа от направления взгляда врага — и остаться незамеченным. Чтобы упростить обнаружение и сделать процесс реалистичнее, разработчики The Last of Us расширили область у основания для имитации периферийного зрения. Такая фигура становится всё более популярной в индустрии. В частности, её можно встретить в Splinter Cell: Blacklist и Deus Ex: Mankind Divided.
Чтобы проверить, «видит» ли противник героя, разработчики используют систему рейкастов: из головы NPC генерируется невидимый луч, направленный в игрока. Если на пути этого луча нет препятствий, у противника постепенно заполняется невидимый индикатор обнаружения. Чем ближе игрок к NPC, тем быстрее это происходит.
У системы рейкастов есть интересный нюанс: когда противники спокойны, луч по умолчанию будет направлен в грудь Джоэла, а во время боя — в голову. Такая условность нужна, чтобы ситуация внутри игры соответствовала ожиданиям игроков, ведь физически героя всегда видно даже за укрытием — руки и плечи Джоэла, а также части оружия могут выступать за границы объекта, за которым спрятался персонаж. Использование одной финальной точки луча привело бы к несбалансированному геймплею либо в стелсе, либо в открытом бою.
В ранних итерациях The Last of Us разработчики пытались внедрить более честную систему рейкастов — динамическую: луч всегда провоцировал обнаружение героя, но делал это с разной скоростью в зависимости от того, какой части тела он коснулся. Так, коллизия с рукой Джоэла приводила к медленному обнаружению. После плейтестов от этого механизма, который на бумаге казался более реалистичным, пришлось отказаться: игроки порой не могли понять, почему их замечают.
Naughty Dog, кстати, часто экспериментировала с искусственным интеллектом в проекте, но некоторые идеи, как и описанную выше, приходилось отбрасывать как раз из-за отзывов со стороны плейтестеров.
Как к этому подходят другие разработчики?
Создать честную систему обнаружения, которая учитывала бы игровые условности, сложно. Решение Naughty Dog работает, но создаёт костыли, которые могут ограничить геймдизайнеров. Программисты Ubisoft создали более элегантную систему в Splinter Cell: Blacklist. Для обнаружения там также используются рейкасты, но не один, как в TLoU, а сразу несколько. Они проецируются в разные части тела главного героя.
То есть система похожа на ту, с которой экспериментировала Naughty Dog, однако в ней есть нюансы. Так, если NPC видит только макушку героя, торчащую из-за укрытия, как это обычно происходит в играх, то он делает вид, что не замечает его. Дело в том, в макушку упирается лишь один из лучей — и этого недостаточно для обнаружения.
Такой механизм позволяет не только избавиться от костылей, но и гибко настраивать скорость обнаружения для разных архетипов противников. Например, если речь идёт о зорких снайперах, то они заметят героя при меньшем количестве лучей, соприкасающихся с ним. А вот рядовым солдатам таких лучей нужно будет больше.
Навигация в пространстве
Чтобы NPC понимали, где им можно перемещаться, разработчики чаще всего используют невидимые для игрока сетки — навигационные меши. Naughty Dog пошла тем же путём. Навмеши в The Last of Us ограничивают границы уровня, а также исключают всевозможные укрытия, чтобы противник не пытался пройти сквозь них.
Кроме того, для органичного перемещения противников Naughty Dog встроила в игру навигационную карту. Её можно охарактеризовать как навмеш наоборот: это сетка, которая выделяет для ИИ непроходимые объекты, а также небольшую область вокруг самого персонажа. Когда противнику нужно пройти куда-либо, его путь выстраивается на навмеше, а затем в реальном времени корректируется при помощи навигационной карты.
Наконец, для полноценной работы ИИ нужна информация о том, куда именно тому или иному персонажу двигаться в разных сценариях. Для этого на навигационную сетку наносят посты — точки рядом с укрытиями и на открытых пространствах. В зависимости от своей задачи NPC прокладывает свой путь через них. Один такой персонаж анализирует около 30 точек рядом с собой несколько раз в секунду.
Где-то для NPC подбирается наиболее короткий путь — например, чтобы исследовать источник постороннего шума. В иных случаях применяется более сложный алгоритм. Как правило, это касается боевых сценариев — в случае угрозы противник не станет автоматически бежать к ближайшему укрытию, ведь оно может быть не защищённым от пуль Джоэла. В ситуациях, когда есть несколько критериев для оптимального пути, подходящий пост выбирается при помощи подсчёта в реальном времени.
Особенности искусственного интеллекта в The Last of Us
Описанные системы — фундамент большинства стелс-игр. Для уникального игрового опыта нужны дополнительные элементы, которые помогут реализовать творческую задумку. В случае с The Last of Us разработчики стремились создать по-настоящему живых противников, которых неприятно убивать: «Когда мы начали прототипировать человеческий ИИ, мы начали с вопроса: „Как заставить игрока поверить в то, что его противники живые, чтобы убивать их было некомфортно?“ Ответ на этот вопрос лежал в основе всего дизайна вражеского ИИ».
Достижение этой цели во многом зависит от работы аниматоров и актёров дубляжа, однако плохой ИИ мгновенно разрушит иллюзию правдоподобного поведения. Чтобы избежать этого, разработчики уделили особое внимание самым простым и примитивным действиям врагов: «Прежде чем делать противников умными, нужно сперва сделать их не тупыми. Персонажи кажутся умными, когда они грамотно расставлены, реагируют на действия игрока, убедительно анимированы и озвучены, а также интересно действуют».
Персонажи The Last of Us принимают решения на основе системы, которая делит действия NPC на умения, состояния и поведения.
Умения — это высокоуровневые сложные навыки, такие как ведение боя. Они требуют от ИИ нескольких более простых действий. Умения могут иметь несколько состояний. Так, бой может быть открытым, а может вестись из укрытия. При этом каждый навык включает в себя несколько примитивных действий — поведений: для боя NPC нужно перемещаться, прицеливаться, стрелять и так далее.
Непредсказуемость и опасность
По задумке разработчиков противники в The Last of Us должны быть опасными и непредсказуемыми. Это хорошо демонстрируют механики игры: NPC стреляют метко, оружие наносит Джоэлу большой урон, а каждое попадание ограничивает его перемещение и делает героя уязвимым. Даже один враг может представлять опасность для игрока.
Но что, если их двое или больше? Сложность в таких ситуациях линейно растёт и в теории может сделать игру непроходимой. Для решения этой задачи проще всего ограничить количество одновременно стреляющих противников. Такой подход применяется в некоторых играх, в том числе в Uncharted. Однако в The Last of Us такой механизм создавал глупые ситуации, когда несколько противников целятся в героя, но не стреляют.
Чтобы сохранить баланс сложности и в то же время создать чувство реалистичного поведения, в игру внедрили координатор ролей. Эта система распределяет между NPC разные задачи. Фактически она выступает посредником между «желанием» NPC и его действием. Так, если противник хочет обойти Джоэла со стороны, он запрашивает соответствующую роль у координатора. Тот проверяет, занята ли эта роль, чтобы одобрить или проигнорировать желание NPC.
Роли противников
Противникам-людям в The Last of Us доступно около пяти разных ролей с уникальными навыками. Такая комбинация делает бои разнообразными, а координатор ролей сохраняет желаемый уровень сложности.
Самый непредсказуемый тип противников в игре — фланкер. Он старается обойти Джоэла со стороны, чтобы застать его врасплох. Для этого NPC должен знать, что видит игрок. В этом ему помогает карта обнаружения и высоты, которая в реальном времени отмечает на навмеше все участки, которые видит как игрок, так и его противники.
Впрочем, для полноценной работы навыка этого оказалось недостаточно: иногда игрок во время боя смотрит в другую сторону или его поле зрения ограничено каким-то препятствием. В этом случае фланкер может подумать, что обойти Джоэла можно, подойдя к нему напрямую. Чтобы этого избежать, разработчики внедрили в игру вектор боя, который учитывает, куда стреляет герой и его противники. В результате NPC с навыком фланкера получает задачу подобраться к игроку через посты, которые находятся за пределами вектора боя. Чем дальше пост, тем выше его рейтинг.
Другие противники создают чувство постоянного напряжения и выталкивают героя из зоны комфорта. Например, NPC с ролью проверяющего движется в сторону последней известной позиции героя, если он давно не выглядывал из укрытия. Примечательно, что это один из редких случаев, когда ИИ позволяет себе читерить.
Как правило, противники ведут себя честно и знают о боевой ситуации столько же, сколько игрок. Однако в случае с ролью проверяющего система оценивает, как далеко Джоэл отошёл от последней известной позиции. Если он в пяти метрах или дальше, то проверяющий подбегает к нужной точке очень быстро, чтобы повысить темп боя. В ином случае у игрока была бы возможность не спеша обойти всех противников со спины.
Ещё одна роль, продвигающийся, используется для постепенного перемещения врага в сторону героя. Зачастую она активируется в паре с другой ролью: пока один противник движется к другому укрытию, его напарник следит за обстановкой, чтобы в случае угрозы поддержать бегущего персонажа. Эту тактику передвижения разработчики позаимствовали из реальной военной практики. В реальности она называется перебежкой поэшелонно, или Bounding Overwatch.
Оставшиеся две роли противников, стрелок по возможности и прицельный стрелок, как правило, статично наблюдают за героем и ждут, когда он высунется из укрытия.
Примечательно, что стрелок по возможности появился в игре спонтанно: в определённый момент разработчики поняли, что из-за большого количества разнообразных ролей и сложных анимаций противники порой тратили время на красивое псевдореалистичное поведение вместо того, чтобы стрелять в Джоэла. Чтобы избежать этой проблемы, Naughty Dog добавила в игру роль, при которой противник всегда выжидает Джоэла и стреляет в него при первой же возможности. В любой стычке боевой координатор всегда форсированно назначает одного такого противника.
Кастомизация отдельных боёв
Чтобы сражения в The Last of Us были ещё разнообразнее и неожиданнее, программисты добавили для каждого противника группу изменяемых боевых параметров. Таким образом, дизайнеры могли в любой момент сделать отдельного NPC более агрессивным или, наоборот, скрытным. Это позволяет придать каждому сражению уникальности.
Примечательно, что кастомизировать можно не классы противников, а именно уникальных NPC в отдельной взятой локации. То есть два с виду идентичных тяжёлых противника могут действовать по-разному в разных условиях.
Стелс
Игрок в The Last of Us чувствует опасность не только в бою, но и во время скрытного прохождения. Это выражается не только в сложных игровых ситуациях, но и в том, что враги эффективно ищут героя.
Как и в прочих стелс-играх, противники реагируют на посторонний шум, а также выслеживают героя после обнаружения. Первая механика реализована тривиально: каждый предмет при ударе о поверхность генерирует звуковое событие. Если противник его слышит, он идёт к ближайшему от источника звука посту, чтобы проверить, что происходит. Если звук услышало несколько противников, в дело вступает координатор ролей: он активирует навык проверки для одного из NPC, но игнорирует запрос второго.
Поиск игрока работает сложнее. Чтобы он был убедительным и эффективным, используется карта поиска: как только герой пропадает из поля зрения противников, вокруг его последней известной позиции по навмешу равномерно «разливается» невидимое для игрока поле. Если противники не находят героя, они начинают расчищать отмеченную на карте область при помощи карты обнаружения, о которой говорилось ранее. Через некоторое время после неудачных поисков персонажи возвращаются в спокойное состояние.
Искусственный интеллект заражённых
ИИ инфицированных противников использует тот же фундамент для поиска пути и выстраивания моделей поведения: заражённые пользуются навмешем и постами, а их поведение регулируется при помощи той же системы, разделяющей их действия на умения, состояния и поведения.
В то же время модель поведения заражённых радикально отличается. В отличие от обычных противниковй, бегуны и кликеры должны быть не собранными, а наоборот — стихийными, ведь ими движет животный инстинкт. К тому же инфицированные враги физиологически отличаются от здоровых людей, и органы чувств у них работают иначе.
Заражённые очень плохо видят и ориентируются преимущественно на более совершенный слух. Например, у кликеров он примерно в шесть раз лучше, чем у людей, поэтому на звуковые события они реагируют чутче.
Отличается и сам механизм поиска цели. Проверить источник шума могут одновременно несколько заражённых. Для этого есть отдельный навык, следование, — один из инфицированных может «прицепиться» к тому, который ищет героя. Если они не находят его в точке назначения, то продолжают стараться, но делают это не так, как люди. Вместо того чтобы обыскивать локацию в соответствии с картой поиска, они проигрывают анимацию беглой оглядки. В арсенале противников есть множество анимаций для того, чтобы осмотреть разные части локации, но выбирается одна, которая покрывает большую часть неизвестной территории в конкретный момент времени.
Прочие модели поведения заражённых также отличаются от человеческих. Например, в состоянии спокойствия инфицированные могут не только патрулировать местность по заготовленному маршруту, но и перемещаться случайно. Эта деталь подчёркивает хаотичность их действий. Это умение всегда активируется у противника, когда он не находит героя после проверки источника шума: будет странно, если слепой щелкун после такого вернётся к прежнему маршруту патрулирования.
Недостатки
Искусственный интеллект в оригинальной The Last of Us был весьма впечатляющим для своего времени. Однако при пристальном изучении становится понятно, что он не лишён недостатков. Частично это подтверждали и сами разработчики, которые указывали на то, что для реализации некоторых идей им попросту не хватало времени.
В частности, Трэвис Макинтош ещё в 2014 году признался, что студия не сумела вовремя реализовать механику сражений между здоровыми людьми и заражёнными: «Мы так и не реализовали бои между разными фракциями противников. Одна из проблем заключалась в том, что у нас было много допущений в коде, которые касались игрока… как только мы с ними справились, достаточно было пары недель, чтобы реализовать эту фичу. Если бы мы держали эту механику в голове с самого начала, то смогли бы внедрить её».
В иных случаях Naughty Dog не успевала отполировать уже созданные механики. Например, всем противникам был доступен уникальный навык «прятаться». Он активировался, когда на арене оставался последний противник без огнестрельного оружия. В этой ситуации боевой координатор вынуждал NPC убегать в сторону самого дальнего от Джоэла поста. Из-за такого количества условий заметить подобное поведение в бою очень сложно, и оценить его по достоинству можно лишь в эпизоде сражения с Дэвидом.
Улучшения ИИ в The Last of Us Part 2
В сиквеле The Last of Us можно невооружённым взглядом заметить множество изменений, связанных с ИИ. Благодаря новым видам противников, таким как собаки, вся система кажется более комплексной и сложной.
Правда, Naughty Dog ещё не рассказывала в подробностях об особенностях искусственного интеллекта в The Last of Us Part 2, поэтому разобраться в том, как именно он работает, не представляется возможным. Тем не менее известно о некоторых существенных изменениях в сиквеле.
Благодаря переходу на новое поколение консолей в сиквеле удалось избавиться от некоторых ограничений. Например, количество противников, активно участвующих в бою, отныне не ограничено. В оригинальной игре разработчики пошли на компромисс: из-за недостатка мощности PS3 в сражении участвовало восемь противников. Остальные брали на себя пассивные роли, чтобы не нагружать устройство. В Part 2 этого ограничения нет, поэтому бои кажутся более насыщенными и опасными. К слову, это изменение перекочевало и в ремейк первой части для PS5 и ПК.
Второе существенное изменение, которое хорошо встраивается в дизайнерскую философию серии, — встревоженные противники отныне не возвращаются в спокойное состояние, а продолжают непрерывно искать угрозу.
Прочие изменения в ИИ The Last of Us Part 2 сегодня можно оценить лишь эмпирически. Некоторые пользователи YouTube отметили, что противники при патрулировании располагают более разнообразным набором анимаций осмотра, из-за чего к ним сложнее подобраться незаметно.
***
Искусственный интеллект в серии The Last of Us не только отлично справляется с созданием интересных геймплейных ситуаций, но и помогает драматургии. Боевые сценарии раскрывают одну из основных идей, заложенных в The Last of Us: даже в ситуациях, когда людям необходимо держаться вместе, у всех есть свои мотивы для убийства, притом зачастую связанные со страхом и желанием защитить любимых. Это, вкупе с жестокостью и непредсказуемостью, делает человека опаснее прочих существ.