me.neoascetic

Принципы современного игрового ИИ. Вводный урок

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

Курс рассчитан на 12 недель, с лабораторными работами (которые предлагается выполнять на Питоне) и промежуточным тестированием - в общем, как положено. Дабы лучше усвоить изучаемый материал, я, помня о мощи интервального запоминания, решил его конспектировать, по памяти, спустя день-два после просмотра. Посмотрим, как пойдёт, и хватит ли мне времени.

0.1 Введение

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

Здесь агентом может выступать любая система, принимающая решения. Это может быть и одиночный бот; и ИИ полководца, управляющего армией в RTS; и game director, управляющий сложностью и наполнением уровня; и генератор музыки в игре. В первом случае входом может служить информация о местонахождении противника и ближайших укрытий, а выходом - открытие огня, движение к укрытию, анимация этого движения; во втором случае вход - информация о наличии тех или иных ресурсов, количестве армии своей и противника, выход - команды отдельным юнитам, тренировка новых; в третьем на вход может подаваться информация об уровне здоровья игрока, доступной амуниции, количестве врагов вокруг, а выходом будет являться спавн новых противников в том или ином количестве, а также припасов; в генераторе музыки вход - опять же, здоровье игрока, наличие врагов поблизости, а выход - тревожная или, наоборот, спокойная музыка.

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

0.2 Общие определения

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

С течением времени то, что когда-то считалось областью “искусственного интеллекта”, переходит в computer science как отдельное направление исследований и перестаёт быть овеяно неким таинственным ореолом. Как говорил Джон Маккарти, когда нечто начинает сносно работать, оно перестаёт относиться к сфере “искусственного интеллекта”. Как следствие, просто относить к ИИ используемые алгоритмы или структуры данных не является корректным. Поэтому использование в качестве термина “интерактивный агент” (ИА) является более подходящим.

При сравнении требований к интерактивным агентам с другими типами систем можно сказать, что первым свойственна:

0.3 В продакшн!

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

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

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

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

Типичный процесс разработки игры состоит из следующих этапов:

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

Итеративная разработка рулит! Её, если угодно, можно сравнить с научным подходом, где сперва происходит наблюдение (выбираем фичу из бэклога по приоритету), затем - делается предположение (набрасываем дизайн), после этого готовится эксперимент (разработка прототипа), после чего гипотеза проверяется (прототип уходит на тестирование). В случае, если гипотеза не прошла проверку экспериментом, она уточняется, и весь процесс, за исключением первого шага, повторяется. То же самое происходит и при работе над некоторой игровой фичей.

Следующий урок