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

Horizon Zero Dawn
Horizon Zero Dawn

Как игровой ИИ получает информацию

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

В Tom Clancy’s Splinter Cell: Blacklist вражеские собаки умеют выслеживать героя по запаху. Это вынуждает игрока постоянно менять укрытие и не засиживаться на одном месте.
В Tom Clancy’s Splinter Cell: Blacklist вражеские собаки умеют выслеживать героя по запаху. Это вынуждает игрока постоянно менять укрытие и не засиживаться на одном месте.

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

В серии Serious Sam большинство врагов просто бездумно бегут на игрока, когда он выходит на поле боя.
В серии Serious Sam большинство врагов просто бездумно бегут на игрока, когда он выходит на поле боя.

Виртуальные рецепторы устроены по-разному. В Metal Gear Solid у противников совсем простой конус зрения, отсутствует периферийное зрение, поэтому они видят только то, что происходит прямо перед ними.

Конус зрения в Metal Gear Solid
Конус зрения в Metal Gear Solid

В Shadow Tactics: Blades of the Shogun тоже используется конус, но он сложнее. Конус поделён на зоны видимости, которые зависят от особенностей ландшафта. Если игрок попадёт в однородную зелёную зону, то его почти сразу увидят. В полосатой зоне видимость затруднена, поэтому игрок будет незаметен, если будет двигаться, пригнувшись. А в зоне, покрытой точками, герой полностью скрыт.

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

В Tom Clancy’s Splinter Cell: Blacklist визуальный сенсор противников комплексный. У врагов есть основная зона видимости в форме вытянутого шестиугольника. Здесь моб видит лучше всего, поэтому в это пространство вообще лучше не заходить. Есть и более крупный шестиугольник, который имитирует периферийное зрение — там противник видит хуже. В такую же зону входят удалённые участки, которые недостаточно хорошо просматриваются.

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

Схема визуального сенсора противников в Splinter Cell: Blacklist.
Схема визуального сенсора противников в Splinter Cell: Blacklist.

Особенность противников в Splinter Cell: Blacklist в том, что они могут видеть игрока в частичном укрытии. Если несколько частей тела героя выглядывают из-за препятствия, то враг замечает его. Чтобы реализовать эту механику, разработчики использовали технологию рейкастинга — из глаз врага кастуются лучи, и если они пересекают несколько частей тела героя, то противник поднимает тревогу.

Тело Сэма Фишера поделено на восемь частей. Если враг увидит несколько из них, то откроет огонь.
Тело Сэма Фишера поделено на восемь частей. Если враг увидит несколько из них, то откроет огонь.

Как ИИ принимает решение

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

В Gears Tactics у ИИ противников всегда есть глобальная цель. Групповой ИИ раздаёт каждому мобу задание, которое помогает достигать общей цели. А NPC сами «решают», каким образом выполнить задачу.
В Gears Tactics у ИИ противников всегда есть глобальная цель. Групповой ИИ раздаёт каждому мобу задание, которое помогает достигать общей цели. А NPC сами «решают», каким образом выполнить задачу.

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

В Horizon Zero Dawn робозвери умеют объединяться в стада, а их поведением управляет групповой агент. У каждой машины есть своя роль: патрулирование, атака, поиск ресурсов.
В Horizon Zero Dawn робозвери умеют объединяться в стада, а их поведением управляет групповой агент. У каждой машины есть своя роль: патрулирование, атака, поиск ресурсов.

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

Например, в Final Fantasy XV есть мета ИИ, который постоянно анализирует ситуацию и управляет NPC. Если игрок попал в передрягу, то именно мета ИИ вызовет ему на помощь союзника.
Например, в Final Fantasy XV есть мета ИИ, который постоянно анализирует ситуацию и управляет NPC. Если игрок попал в передрягу, то именно мета ИИ вызовет ему на помощь союзника.

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

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

ИИ в Half-Life реализованы при помощи конечных автоматов. У них более 80 уникальных состояний.
ИИ в Half-Life реализованы при помощи конечных автоматов. У них более 80 уникальных состояний.

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

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

Пример дерева поведения из Just Cause 3. У каждого типа поведения есть огромное количество вариаций.
Пример дерева поведения из Just Cause 3. У каждого типа поведения есть огромное количество вариаций.

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

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

В Gears Tactics у каждого типа юнитов есть собственное дерево поведения, в котором учтены все индивидуальные особенности и способности NPC.
В Gears Tactics у каждого типа юнитов есть собственное дерево поведения, в котором учтены все индивидуальные особенности и способности NPC.

Иерархические конечные автоматы объединяют особенности конечных автоматов и дерева поведения. Особенность такого подхода в том, что разные графы внутри логики могут отсылаться друг к другу. Например, нам надо прописать поведение для нескольких мобов. Не обязательно делать для каждого отдельную логику — можно создать общее базовое поведение и просто отсылаться к нему при необходимости.

Так выглядит иерархическая архитектура в Final Fantasy XV.
Так выглядит иерархическая архитектура в Final Fantasy XV.

Есть и менее популярные решения, которые не смогли полноценно закрепиться в индустрии. К примеру, в F.E.A.R. использовалась система целеориентированного планирования действий (Goal-Oriented Action Planning, GOAP) — для всех NPC она создаёт план действий, основываясь на информации об игровом мире. Например, если мобу нужно перейти в другую комнату, то система сперва проверяет, какое расстояние нужно пройти до двери, есть ли на пути препятствия, открыта ли дверь и так далее. Когда у системы есть вся информация об окружении, она составляет план, а NPC просто проигрывает последовательность анимаций.

Этот подход работает на основе конечных автоматов, но они отвечают только за воспроизведение анимаций. У автоматов есть всего три состояния, каждое из которых отвечает за свой набор анимаций: движение (бег, ходьба), действия (стрельба, реакции), взаимодействие с объектами (открыть дверь, включить свет).

F.E.A.R. запоминается достаточно умными противниками, которые умеют работать сообща. На самом деле они даже не знают о существовании друг друга — просто ИИ грамотно координирует их действия.
F.E.A.R. запоминается достаточно умными противниками, которые умеют работать сообща. На самом деле они даже не знают о существовании друг друга — просто ИИ грамотно координирует их действия.

На смену GOAP постепенно пришла система ИИ под названием иерархический планировщик сети задач (HTN). Эта сеть создаёт планы, которые состоят из макросов действий, в которых уже заложена определённая последовательность. 

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

У каждого противника в Horizon Zero Dawn есть свой паспорт, который используется при идентификации и добавлении в новую стаю. Когда моб попадает в неё, ему присваивается роль внутри группового агента.
У каждого противника в Horizon Zero Dawn есть свой паспорт, который используется при идентификации и добавлении в новую стаю. Когда моб попадает в неё, ему присваивается роль внутри группового агента.

Как ИИ передвигается в пространстве

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

Обычно такие данные содержатся в навигационной сетке (NavMesh) — это особая карта, на которой обозначено, где NPC могут передвигаться. 

В Horizon Zero Dawn есть сразу шесть навигационных сеток: четыре для существ разного размера, одна для плавающих существ, одна, чтобы игрок мог корректно оседлать моба.
В Horizon Zero Dawn есть сразу шесть навигационных сеток: четыре для существ разного размера, одна для плавающих существ, одна, чтобы игрок мог корректно оседлать моба.

Поверх навигационной сетки может располагаться система узлов, которая применяется для того, чтобы NPC корректно выполняли сценарии поведения. К примеру, в Assassin’s Creed Origins у всех NPC есть свой распорядок дня, который они соблюдают даже без участия игрока. Чтобы персонажи следовали сценарию и не застревали в окружении, разработчики сделали специальную сеть узлов — точки на плоскости, где NPC выполняют свою персональную задачу. Описанный метод подходит для заранее предопределённых сценариев. NPC словно перемещаются по рельсам от одной точки к другой. 

Зелёным обозначена навигационная сетка, а поверх неё находится система узлов. Жёлтая стрелка указывает на ошибку — кто-то поставил на узел игровой объект, чем перекрыл NavMesh.
Зелёным обозначена навигационная сетка, а поверх неё находится система узлов. Жёлтая стрелка указывает на ошибку — кто-то поставил на узел игровой объект, чем перекрыл NavMesh.

В ситуациях, в которых нужно реагировать на действия игрока, используется другой подход. В Just Cause 3 существует система, выбирающая приоритетные позиции, на которых NPC сможет эффективнее всего выполнить свою задачу. Выбор той или иной позиции зависит от конкретных критериев: дальности от цели, наличия препятствий между мобом и его целью, удалённостью от союзников и так далее.

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

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

В навигационной сетке уже содержится информация о перемещениях между уровнями по вертикали.
В навигационной сетке уже содержится информация о перемещениях между уровнями по вертикали.

Всё это применимо только к ИИ, которые передвигаются по горизонтальным плоскостям. А в Horizon Zero Dawn, например, есть ещё и летающие противники, для которых не работают стандартные навигационные сетки. Чтобы исправить это, разработчики использовали технологию MIP Mapping, которая позволяет быстро менять детализацию карт высот. 

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

A* высчитывает траекторию, основываясь на самой высокой точке локальной местности. Именно из-за этого воздушные противники в Horizon Zero Dawn не могут залетать под мосты или скалы.
A* высчитывает траекторию, основываясь на самой высокой точке локальной местности. Именно из-за этого воздушные противники в Horizon Zero Dawn не могут залетать под мосты или скалы.

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

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

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

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

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


  1. Kalobok
    29.12.2021 16:37
    -3

    5Мб ни о чем. Горите в аду.


    1. Boomburum
      29.12.2021 20:14
      +1

      Повежливей бы ) Превратил тяжёлые png поста в элегантные джпеги.


      1. Kalobok
        29.12.2021 23:23
        -1

        Я уже не ругаюсь по поводу картинок на 2-3Мб - их стало слишком много. Но 5 - это совсем беспредел.


  1. saboteur_kiev
    29.12.2021 17:02

    Задача большинства нейросетей это не творческое поведение NPC, а просто самообучение на определенную задачу.

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

    И вот в этом 3 мире решили добавить немного украшений. Там клумбу сделать, там речку с мостиком. И ВСЕМ NPC персонажам надо переписывать их алгоритм, чтобы они не утонули в речке, чтобы они шли по координатам к мостику.
    А если это может сделать нейросеть, то можно указывать только минимальное количество ключевых точек на пути, и нейросеть просчитает путь. Или разово, или периодически. И все. Нет никакого творчества. Есть огромная автоматизация рутины, если предположить, что локаций сотни, а NPC персонажей тысячи. И каждому писать подробный скрипт о передвижениях - это просто ужасно. Если в старых 2д игрушках было проще, то в 3д полным полно моментов, когда "бровка слишком высокая", по дороге встретилось ответвление с тупиком - то есть надо чуть более сложный алгоритм, чем просто "всегда сворачивай влево", чтобы дойти из точки А в точку Б.


  1. Suvitruf
    29.12.2021 18:08
    +3

    Слишком уж поверхностная статья, которых и так полно даже на Хабре. Кому интересно, советую уж лучше что-нить такое почитать.