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

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

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

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

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

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

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

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

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

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