«Чувства» в разработке игр — это полезная метафора для понимания, создания и обсуждения той части ИИ, которая занимается сбором информации о важных объектах симулируемой среды игры. Неигровыми персонажами в реалистичном трёхмерном пространстве обычно бывают люди, животные или другие создания со зрением и слухом, поэтому такая метафора очень удобна.
Но такую метафору разработки не стоит воспринимать слишком буквально. Несмотря на кажущуюся физическую природу ИИ игрового мира, эта аналогия не физическая и не нейрологическая. Грань между «чувством» и «знанием» в игре размыта. Чувство включает в себя идею осознания присутствия в игре других элементов игры, а также их оценку и знания о них. Игровая логика может быть привязана непосредственно к таким элементам.
Систему чувств в игре нужно создавать таким образом, чтобы она подчинялась потребностям дизайна игры и была эффективной в реализации. Система не должна быть слишком сложной, достаточно обеспечивать надёжность и интересный игровой процесс. Результат её работы должен быть воспринимаем игроком и понятен ему. Только в немногих играх ИИ необходимы ощущения вкуса, касания или осязания, в основном же используется зрение и слух. При правильном использовании чувства могут стать неоценимым инструментом для создания более интересного поведения простых конечных автоматов.
В этой статье описывается подход к дизайну и реализации высокоточной сенсорной системы для ИИ в игре от первого лица с упором на стелс. Описанные здесь техники взяты из опыта разработки ИИ для Thief: The Dark Project, а также из ознакомления с кодом Half-Life. В первой части статьи изложены базовые концепции чувств ИИ на мотивирующем примере Half-Life. Во второй части излагаются более строгие требования к сенсорным системам в дизайне стелс-игр и описывается система, созданная для Thief.
Ознакомительный пример: Half-Life
В игре Half-Life скрытность и чувства — не главное. Однако из-за сильного упора на тактический бой ей требуется логичная сенсорная система. Поэтому эта игра — отличный пример для исследования основ сенсорных систем ИИ. ИИ в Half-Life имеет область видимости и слух, а также систему для управления информацией об обнаруженных объектах. В игре есть интересные примеры применения простых чувств для создания убедительных поведений.
В простой сенсорной системе ИИ периодически «смотрит» и «прислушивается» к миру. В отличие от зрения и слуха в реальном мире, где стимулы получаются органами чувств пассивно, хочет того объект, или нет, в игре они являются активными событиями. ИИ исследует мир на основании своих интересов и согласно набору правил решает, видит ли и слышит ли он другой элемент игры. Такие проверки эмулируют реальные чувства, в то же время снижая количество необходимой работы. Бо?льшая часть ресурсов тратится на аспекты, важные для игровой механики.
Например, периодически вызываемая базовая сенсорная система Half-Life имеет следующий вид:
Если я близко к игроку, то…
Начать смотреть
--Собрать список объектов в пределах заданного расстояния
--Для каждого найденного объекта...
----Если я хочу посмотреть на него и
----Он находится в конусе моей видимости и
----Если можно испустить луч из моих глаз к его глазам, то...
------Если это игрок и
------Если мне приказано не видеть игрока, пока он меня не увидит, и
------Если он меня не видит
--------Закончить смотреть
------Иначе
--------Задать различные сигналы, зависящие от моих отношений с увиденным объектом --------
Закончить смотреть
Начать слушать
--Для каждого воспроизводимого звука...
----Если звук доносится до моих ушей...
------Добавить звук в список в услышанных звуков
------Если звук является настоящим звуком...
--------Задать сигнал, сообщающий о том, что я что-то услышал
------Если звук является псевдозвуком "запаха"
--------Задать сигнал, сообщающий о том, что я что-то унюхал
Закончить слушать
Первая концепция, проиллюстрированная этим псевдокодом, заключается в том, что чувства тесно связаны со свойствами ИИ, с его отношениями с объектом и с соответствием действий ИИ действиям игрока. Частично это вызвано стремлением к оптимизации, но реализуется через игровую механику. В геймдизайне Half-Life ИИ-персонаж, находящийся далеко от игрока, не важен и ему не требуется ощущать мир. Даже когда он находится рядом с игроком, ИИ нужно смотреть только на объекты, которые позже должны вызвать у него реакцию страха или ненависти.
Эта логика также демонстрирует конструкцию системы видимости как сочетания расстояния видимости, конуса видимости, линии прямой видимости и положения глаз (рис. 1). У каждого ИИ есть ограниченное по расстоянию двухмерное поле видимости, в пределах которого от испускает лучи в направлении интересных объектов. Свободно доходящие лучи означают видимость объектов.
Рисунок 1
Здесь стоит заметить два важных аспекта. Во-первых, сенсорные операции выполняются по порядку, от менее затратных к более затратным. Во-вторых, ради удовольствия игрока, система зрения в игре сделана так, что враг видит игрока только когда тот видит его. В игре от первого лица игрок слабо ощущает тело, и если противник замечает игрока раньше, то это часто кажется читерством.
Самый интересный фрагмент — ограничение возможности ИИ увидеть игрока, пока игрок не увидит ИИ. Он нужен только для того, чтобы игра была увлекательной. Это пример того, как высокоуровневых целей игры можно просто и элегантно достичь с помощью элементарных техник в низкоуровневых системах.
Логика слуха гораздо проще, чем у зрения. Базовый элемент компонента слуха — это определение и настройка того, что означает донесение слышимого звука до ИИ. В случае Half-Life слух — это прямолинейная эвристика громкости звука, умноженной на «чуткость слуха», дающая в результате расстояние, на котором ИИ слышит звук. Более интересна демонстрация способности слышать как шаблона для сбора общей информации о мире. В этом примере ИИ «слышит» псевдозвуки, то есть вымышленные запахи, исходящие от близлежащих трупов.
Чувства как важный элемент геймплея: Thief
В Thief: The Dark Project и её последователях представлен слегка заскриптованный игровой мир, в котором центральная механика игры (стелс) вступает в противоречие с традиционным геймплеем 3D-игры от первого лица. Игрок в Thief передвигается осторожно, избегает конфликтов и наказывается за убийство людей. При этом он легко может умереть. Геймплей сосредоточен на изменениях сенсорного знания ИИ об игроке, перемещающемся по пространству игры. Игрок должен передвигаться по территории, заполненной неподвижными, движущимися и патрулирующии ИИ, стараясь остаться незамеченным, прячась в тенях и не издавая звуков. Хотя чувства игрового ИИ построены на тех же базовых принципах, что и в Half-Life, механика скрытности, ускользания и неожиданных атак требует более изощрённой сенсорной системы.
Основным требованием стало создание очень гибкой сенсорной системы, работающей в широком спектре состояний. На поверхности стелс-геймплей сосредоточен на вымышленных темах скрытности, ускользания, захвата врасплох, света и тени. Один из аспектов, делающих такой игровой процесс интересным — это расширение «серой зоны» между безопасностью и угрозой, которая в большинстве играх от первого лица очень тонка. Игра стремится поддерживать напряжение, держа игрока на грани между разными состояниями, а потом пускаясь во все тяжкие при пересечении зоны. Это требует широкого спектра чувств, которые не имеют чётко заданных полярных значений «игрок замечен» или «игрок не замечен».
Второе требование заключается в том, что система чувств должна активироваться намного чаще и для большего количества объектов, чем в обычном шутере от первого лица. В процессе игры игрок может изменять состояние мира такими способами, которые ИИ должен замечать, даже когда игрок не находится рядом. Некоторые аспекты, например, сокрытие трупов, требуют надёжно работающей системы. Эти два требования создают интересную задачу, вступающую в противоречие с ещё одним неотъемлемым требованием к разработчикам игр: производительностью игры.
Наконец, необходимо, чтобы и игроки, и дизайнеры понимали входную и выходную информацию сенсорных систем, и чтобы выходная информация соответствовала результатам, ожидаемым от входной информации. Это подтолкнуло разработчиков к созданию решения с ограниченным количеством воспринимаемых игроком входных данных и дискретно оцениваемыми результатами.
Расширение диапазона чувств
В своей основе описанная здесь сенсорная система очень похожа на используемую в Half-Life. Это система видимости на основе конусов видимости и испускаемых лучей и простая система слуха, поддерживающая оптимизацию, игровые механики и псевдосенсорные данные. Как и в Half-Life, бо?льшая часть сбора данных независима от процесса принятия решений, выполняемого на основе этой информации. В этой системе расширены некоторые из базовых принципов и добавлены новые.
Рисунок 2. Основные компоненты и отношения
Дизайн системы и передача данных через неё спроектированы как настраиваемая гибкая система сбора информации, выдающая стабильные и понятные выходные данные.
В этой системе чувства ИИ обусловлены «осведомлённостью». Осведомлённость выражается в виде набора дискретных состояний, представляющих информированность ИИ о присутствии, местонахождении и идентификации интересующего объекта. Эти дискретные состояния являются единственным представлением внутренностей системы, доступным дизайнеру. В высокоуровневом ИИ они коррелируют с настороженностью персонажа. В ИИ Thief набор состояний настороженности схож с набором состояний осведомлённости. Состояние настороженности ИИ различными способами передаётся в сенсорную систему для изменения её поведения.
Осведомлённость хранится в сенсорных связях, привязывающих ИИ к другой сущности в игре или к положению в пространстве. В этих связях хранятся важные для игры подробности сенсорной информации (время, место, прямая видимость и т.д.), а также кэшированные значения, используемые для уменьшения количества вычислений между циклами «мышления». В принципе, сенсорные связи являются основной памятью ИИ. Через вербальную передачу и наблюдения сенсорные связи могут распространяться между ИИ с управлением каскадами распространения знаний по уровню. После базовой обработки ими также можно управлять через логику игры.
Рисунок 3. Сенсорные связи
Каждый интересующий объект в игре имеет собственное значение видимости, независимое от наблюдателя. В зависимости от состояния игры и природы объекта масштабируется уровень детализации этого значения и частота обновления, что позволяет уменьшить процессорное время на вычисление значения.
Видимость определяется через освещённость, движение и заметность (размер, отдалённость от других объектов) объекта. Её значение тесно связано с требованиями игры. Например, освещённость игрока привязана к освещённости пола под его ногами, что даёт ему объективный и наглядный способ определения уровня собственной безопасности. Эти значения и видимость в виде их общей суммы хранятся как аналоговые значения в интервале 0..1.
Конусы видимости
Вместо одной двухмерной области видимости для чувств в Thief реализован набор из идущих по порядку трёхмерных конусов видимости, задаваемых как угол XY, угол Z, расстояние, набор параметров, описывающих общую остроту зрения и чувствительность к разным типам стимулов (например, к движению и свету) и их отношение к настороженности ИИ. Конусы видимости расположены в направлении поворота головы ИИ.
В любой заданный момент времени для замеченного объекта в вычислениях чувств используется только первый конус видимости, в котором находится объект. Для упрощения и возможности настройки геймплея считается, что каждый конус видимости создаёт постоянные выходные данные, вне зависимости от того, в какой части конуса видимости находится объект.
Например, у показанного на рисунке 4 ИИ есть пять конусов видимости. Объект в точке А будет оцениваться конусом номер 3. Конус видимости, используемый для вычисления осведомлённости о видимости объекта в точке B и точке C — это конус номер 1, в котором одинаковые значения видимости для объекта дают одинаковый результат.
Рисунок 4. Конусы видимости, вид сверху
При проверке интересующих объектов мира система чувств в первую очередь определяет, какой из конусов относится к этому объекту. Затем его собственная характеристика видимости вместе с конусом видимости передаётся через эвристику «взгляда», которая выдаёт дискретное значение осведомлённости.
Несколько конусов видимости используется для реализации таких аспектов, как прямая видимость, периферическое зрение или для различения объектов, находящихся непосредственно впереди и на той же плоскости Z от объектов, находящихся впереди, но выше и ниже. Конус номер 5 на рисунке — хороший пример использования низкоуровневой системы для выражения высокоуровневой концепции. Конус «мнимого зрения» смотрит назад. Он настроен на чувствительность к движению и даёт ИИ «паучье чутьё»: персонаж ощущает, когда за ним движутся слишком близко, даже когда игрок совершенно бесшумен.
Конвейер информации
Система управления чувствами имеет вид серии компонентов, каждый из которых получает ограниченный и чётко заданный набор данных, после чего выдаёт ещё более ограниченное значение. Затраты на обработку каждого этапа можно независимо масштабировать в соответствии с важностью для геймплея. С точки зрения производительности такие множественные масштабируемые слои можно сделать невероятно эффективными.
Рисунок 5. Конвейер информации
В базовой сенсорной системе реализована эвристика, получающая информацию о видимости, звуковых событиях, текущих связях осведомлённости, данные конфигураций дизайнеров и программистов и текущее состояние ИИ, а на выходе выдающая одно значение осведомлённости для каждого интересующего объекта. Эти эвристики можно рассматривать как «чёрный ящик», который постоянно настраивает программист ИИ в процессе разработки игры.
Зрение реализовано фильтрацией значения видимости объекта через соответствующий конус видимости, изменяющего результат на основании свойств каждого ИИ. В большинстве случаев используется простое испускание луча для проверки прямой видимости. В более интересных случае, например, при расчёте видимости игрока, испускается несколько лучей, определяющих пространственное отношение ИИ к объекту при взвешивании заметности объекта.
В Thief используется сложная звуковая система, в которой издаваемые и неиздаваемые звуки помечаются семантическими данными и распространяются по 3D-геометрии мира. Когда звук «достигает» ушей ИИ, он приходит с направления, из которого бы пришёл в реальном мире, помеченный ослабленными значениями осведомлённости. Если звук — это речь, то иногда он несёт информацию от других ИИ. Такие звуки присоединяются к другим меняющим уровень осведомлённости аспектам (например, к запаху в случае Half-Life) как отношения осведомлённости относительно положения в пространстве.
Импульсы осведомлённости
После завершения операций зрения и слуха их результаты в виде уровня осведомлённости передаются методу, получающему периодические импульсы от необработанных сигналов чувств, и преобразующему их в простое отношение осведомлённости, все подробности которого хранятся в ассоциированной с ним сенсорной связи. В отличие от аналоговых данных, использованных в конвейере на этом этапе, данные в этом процессе полностью дискретны. Результатом этого процесса является создание, обновление или обнуление сенсорных связей правильным значением осведомлённости.
Этот процесс проходит в три этапа. Во-первых, сравниваются входные значения слуха и зрения. Одно из них объявляется доминантным и становится значением осведомлённости. Создаваемые каждым чувством вспомогательные данные очищаются и объединяются в общую сумму события чувств.
Во-вторых, если импульс осведомлённости увеличился по сравнению с предыдущими показателями, то он пропускается через временной фильтр, определяющий, будет ли на самом деле увеличиваться осведомлённость. Временная задержка — это свойство только текущего состояния, а не целевого. Так реализуются задержки реакций и показатели прощения ошибок игрока. После прохождения временного порога осведомлённость переходит в целевое состояние без прохождения через промежуточные состояния.
В-третьих, если новое значение импульса ниже текущих показаний, используется «конденсатор» для плавного и постепенного снижения осведомлённости. Осведомлённость снижается в течение определённого промежутка времени, проходя через все промежуточные состояния. Это смягчает поведение ИИ после того, как только интересующий объект перестаёт ощущаться чувствами, но настороженность ИИ управляется не этим механизмом.
Если интересующий объект больше не генерирует импульсы, в чувства добавляется степень свободного знания, масштабируемая на основании состояния ИИ. Этот механизм создаёт видимость логического мышления со стороны ИИ, когда объект пропадает из области видимости, позволяя скрывать от игрока читерство.
Заключение
Описанная в статье система разработана для однопользовательской игры с программным рендерингом. Поэтому системе рендеринга была доступна вся информация об объектах игры. К сожалению, в игровом движке с клиент-серверной архитектурой и исключительно аппаратным рендерером это может оказаться невозможным. Расчёт области освещённости объекта может быть не таким прямолинейным. Поэтому реализовывать подобную систему нужно продуманно и аккуратно, ведь ей потребуется информация от других систем.
Кроме того, несмотря на свою эффективность, система предназначена для игры, во многом зависящей от выводимых из этой системы данных. В Thief она занимает достаточно большую часть времени выделенного в ЦП для всех вычислений ИИ. Поэтому система может отнимать время у поиска путей, тактического анализа и других процессов принятия решений.
Однако от реализации сенсорной системы может выиграть любая игра. При сборе и фильтрации информации о среде и при её правильной обработке систему чувств можно использовать для создания интересного поведения ИИ без значительного усложнения конечных автоматов принятия решений. Кроме того, надёжная сенсорная система позволяет с помощью управления и изменения базовых входных данных знаний реализовывать «досознательные» поведения. Наконец, сенсорная система со множеством состояний даёт игроку искусственного противника или союзника, демонстрирующего разнообразные и сложные реакции и поведения, не добавляющие излишнюю сложность в базовые автоматы принятия решений.
Дальнейшие исследования
Из-за того, что Dark Engine, на котором создан Thief, сильно зависит от данных, большинство из представленных в статье концепций и все подробности конфигурации можно исследовать самостоятельно с помощью инструментов, выложенных на http://www.thief-thecircle.com.
Комментарии (4)
qrck13
01.10.2017 11:36-2Не показывайте свою картинку тем, кто занимается стрельбой из лука. Слезы от смеха текут ;)
kahi4
01.10.2017 12:25------Если он меня не видит
Интересно, имеется ввиду попадание в угол обзора или в принципе отсутствие объектов между глазама ИИ и персонажа? Если первое, получается, что можно бегать по карте спиной и оставаться незамеченным для ИИ
Eugeny1987
02.10.2017 05:33слышал что если в HL взять банку в руки и направить на голову врага, то он не видит игрока
AstarothAst
Вот прям захотелось снова пройти от и до!