ИИ в играх: от тупых NPC до умных противников

Искусственный интеллект — одна из самых сложных областей гейм-дизайна. Графика, физика и механика игр постоянно совершенствуются, а NPC часто демонстрируют нелепое поведение: упираются в стены, бросают гранаты под ноги или игнорируют игрока. Даже 15 лет назад в играх серии F.E.A.R. противники действовали убедительнее, используя укрытия, обходя игрока и избегая огня. Сравните это со штурмовиками из недавних игр Star Wars — разница очевидна. Как эволюционирует ИИ в играх, и почему одни NPC тупее роботов-пылесосов, а другие демонстрируют удивительную сообразительность?

Что значит «хороший» ИИ в играх?

Под «хорошим» ИИ подразумеваются осмысленные и непредсказуемые действия. Однако, захотят ли игроки сражаться с по-настоящему умными врагами? Если бы NPC постоянно прятались и проверяли каждый шорох, как в современных стелс-экшенах, тактическая реалистичность привела бы к хаотичному и скучному геймплею. Качество ИИ — это не о разуме, а о поддержке игрового опыта. В одних играх NPC должны казаться умными и методичными (как в ранних играх серии F.E.A.R.), но даже там противники намеренно сделаны уязвимыми для игрока. В других играх, например, в Doom 2016, NPC могут не прятаться и демонстрировать нереалистичное поведение, что соответствует атмосфере игры. На ранних этапах разработки Doom 2016 разработчики экспериментировали с более умным ИИ, но отказались от этой идеи, так как она не соответствовала желаемому игровому опыту. Выбор подхода зависит от желаемых игровых эмоций: кто-то хочет сделать игрока героем боевика, а кто-то — заставить его бояться врагов.

Основы создания ИИ: навигационная сетка (NavMesh)

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

Моделирование поведения NPC: стейт-машины и деревья поведения

Разработчики используют различные методы моделирования поведения NPC:

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

Часто используется комбинированный подход: дерево поведения с конечным действием, реализованным как небольшая стейт-машина (например, в Spider-Man от Insomniac Games).

Утилитарные системы и подсчет полезности действий

Стейт-машины и деревья поведения — это высокоуровневая абстракция. «Умность» ИИ достигается за счет утилитарных систем, которые выбирают наиболее оптимальное действие из доступных. Например, атаковать можно ножом, выстрелом или гранатой, и каждому действию присваивается значение полезности, меняющееся в зависимости от ситуации. В The Last of Us переход NPC от одного укрытия к другому рассчитывается с учетом десятков факторов: расстояние до игрока, поддержка товарищей и т.д.

Дополнительные методы и приемы

Многие крупные студии используют дополнительные приёмы: координаторы ролей, следящие за ситуацией на поле боя и назначающие NPC определённые роли (фланкер, снайпер и т.д.) (The Last of Us); разделение NPC на группы с разными стилями поведения (Uncharted 4); дополнительные элементы зрения, симулирующие «шестое чувство» (Splinter Cell: Blacklist); динамическое изменение условий в зависимости от стиля игры игрока (Metal Gear Solid V); ограничение числа одновременно стреляющих врагов для предотвращения перегрузки игрока (часто используется в шутерах); связь точности стрельбы со скоростью игрока для создания иллюзии большого числа противников (Doom); Rubber-banding — изменение навыков NPC в зависимости от отставания/превосходства игрока (Need for Speed).

Ограничения и будущее ИИ в играх

Даже современные системы ИИ имеют ограничения: ручной труд при создании NavMesh, ошибки в выборе параметров утилитарных систем, ограниченный бюджет процессора на каждый кадр. Возможно, в будущем нейросетевой ИИ решит эти проблемы, но пока это лишь перспектива. Уже сейчас есть интересные примеры применения нейросетей: ИИ Софи в Gran Turismo 7 имитирует поведение реальных гонщиков, а проект ACE от NVIDIA позволяет создавать реалистичных NPC для симуляторов общения.

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

Что будем искать? Например,программа