Искусственный интеллект в играх. Задачи и типы.

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

Проблема искусственного интеллекта в играх всегда актуальна — в большинстве случаев вам потребуются управляемые компьютером противники, союзники, подчинённые и т.д. Управление ими требует определённого рода алгоритмов, которые обычно называют ИИ — искусственным интеллектом.

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

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

  • Поиск пути. Навигация по локальным и глобальным картам и «вот это вот всё».
  • Обеспечение поведения игровых персонажей (собственно, сам «интеллект» — принятие решений, выбор действий и т.д. Это наиболее многочисленная группа алгоритмов).
  • Распознавание образов (классификация котиков, различные алгоритмы поиска мишеней и наложения виртуальной реальности на реальную. Это востребовано, в основном, в AR).

Поиск пути — это ставшая уже классической задача, считающаяся задачей для ИИ, хотя, фактически, интеллектуального там немного, а в основном, чистая математика. «Академическими» вариантами поиска пути являются алгоритм Дийкстры и алгоритм A* (А-звезда, «звёздочка»), и представляют собой они, по сути, решение оптимизационной задачи на графах. Алгоритм Дийкстры надёжный но медленный, «звёздочка» быстрее но жадна до памяти. И тот и другой хорошо работают на маленьких масштабах, но с ростом количества вершин графа начинают стремительно тормозить. Поэтому в играх они применяются в сильно модифицированном виде (например, NavMesh в Unity — это очень сильно модифицированная «звёздочка», работающая по графу из полигонов на генерируемой сетке). Помимо них иногда применяются волновой алгоритм, банальный «обход препятствий», и многочисленный комбинации из них (например, navmesh + A* на глобальном масштабе, и векторный обход препятствий в рамках ближней навигации, чтобы монстры не натыкались друг на друга).

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

Распознавание образов — сравнительно новая область задач для игрового ИИ, порождённая распространением AR. В неё входит, в первую очередь, распознавание изображений (мишеней для AR или элементов реального окружения), распознавание текстов, выделение плоскостей (например, пола для добавления на него виртуальных объектов в AR), и т.п. Здесь практически безраздельно царят нейросети, во множестве вариантов — от простых до всяких Faster-RCNN. Эта область применения ИИ пересекается с другими областями, уже не относящимися к игровой индустрии, но в ближайшее время всё это станет очень востребованно и будет стремительно развиваться.

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