Блог xyz school

Как работает искусственный интеллект животных в играх

Рассказываем, как разработчики делают поведение виртуальных животных реалистичным.

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

Геймдизайнер AAA-игр Сергей Праздничнов объясняет, как поведение виртуальных животных делают реалистичным, на какие виды их делят, чем они полезны, и почему повадки не всегда нужно копировать идеально точно.

Автор: Сергей Праздничнов
Типы животных в играх

В этом материале я не буду охватывать весь диапазон животных из игр. Иногда они бывают полноценными персонажами — например, пёс из Dragon Age: Origins, который мог стать членом команды.
Отдельная история — животные-компаньоны, которые постоянно ходят рядом с игроком и нападают на врагов, как в Fallout. Обычно ими занимаются чуть ли не отдельные команды.

Например, BD-1 из Star Wars Jedi: Fallen Order я условно считаю животным: у него очень комплексное поведение, и над его созданием трудилась большая команда программистов, дизайнеров и аниматоров. Это серьёзный труд и довольно специфический тип искусственного интеллекта.
Я затрону животных, которые чаще присутствуют либо в играх с открытым миром, либо в псевдооткрытых мирах.

Животных из игр с открытым миром можно поделить на два типа: «эмбиентных» и животных под управлением искусственного интеллекта. В каком-то смысле они все эмбиентные, но здесь я подразумеваю тех животных, которые не находятся под управлением ИИ.

Эмбиентные животные

Основная задача эмбиентных животных — не взаимодействие с игроком, а создание красивой картинки. Они делают мир более живым, объёмным и настоящим. Считается, что это самый простой тип животных в игре, потому что он почти не требует серьёзных вложений ресурсов и времени. По качеству рисовки тут минимум требований, ведь для создания стайки птиц вдалеке не нужно прорисовывать каждую.
Простые примеры эмбиентных животных — это рыбки, которые плавают в воде, но при этом их нельзя ловить. Ты с ними никак не взаимодействуешь, они просто есть. Или стайка птиц, которая вылетает из кустов, когда бродишь по миру в Assassin's Creed или The Witcher 3.

Зачастую эмбиентные животные работают по различным триггерам и таймерам. Игрок забежал в какую-то зону — сработал триггер, заспавнилась стайка птиц и выпорхнула из кустов с характерным звуком. Мир ощущается живым и настоящим. Так же и с рыбами, которые просто плавают туда-сюда в водоёмах разных игр.
Такие животные не имеют искусственного интеллекта: это могут быть либо простенькие модельки с парой-тройкой костей, которые запускают заскриптованную анимацию движения и маршрут из точки А в точку Б. Эмбиентные животные даже могут быть просто визуальными эффектами, — как, например, показали в последней презентации Unreal Engine 5.

А те же разбегающиеся тараканы в The Last of Us — это не модели, у них нет рига. По факту это просто эффект.
Очень часто такие группы мелких животных оказываются единой сущностью. Например, есть три стайки птиц: маленькая, большая и средняя. Мы можем расположить их спаунеры на карте в зависимости от того, какую стайку птиц мы хотим триггерить. Это не каждая птичка в отдельности, мы их не собираем в какую-то стайку по отдельной особи.

В таких случаях детальность прорисовки не имеет почти никакого значения. На это есть бюджет, есть определённые требования, но они намного ниже. У таких животных могут быть прописаны реакции на игрока, но они определяются некоторыми простыми условиями, а не искусственным интеллектом.

Простой пример: ты посветил фонариком на стену — тараканы разбежались. Это минимальный мозг: у них нет коллизии с игроком, их нельзя убить и нет возможности с ними взаимодействовать.

Животные под управлением ИИ

Гораздо интереснее ситуация с животными под управлением искусственного интеллекта. Как и все остальные интеллектуальные агенты, они взаимодействуют на основе алгоритма «Sense, Think, Act». То есть сначала чувствуем — получаем какую-либо информацию о среде вокруг, которая может повлиять на наше поведение, — потом мы думаем, то есть принимаем решение на основе заложенных в нас знаний и алгоритмов, а затем действуем — выполняем некоторый акт для реализации того, что мы надумали.

В итоге получается полноценный моб, как во многих играх последнего поколения уровня Red Dead Redemption 2. Там у животных есть проработанное поведение и с ними можно взаимодействовать.
Как и человеческих мобов, их наделяют соответствующими чувствами — зрением и слухом. Они могут анализировать информацию вокруг и реагировать на игрока, других животных и других мобов. Обычно для них задают места обитания, если в играх есть биомы или определённые области. Например, на полянке могут разместить медведя, а глубже в лесу — волков. Иногда животные живут вперемешку, но чаще у них есть своё место обитания.

Это круто как с точки зрения реалистичности, так и с точки зрения геймплея — в подобных местах могут быть точки интереса и они могут различаться в зависимости от животных, которые там обитают. Не стоит забывать и о правилах навигации животных, которые будут определять, как те будут перемещаться: это важно для их боевого и небоевого поведения.
У каждого животного есть шаблон поведения, который включает набор состояний животного и правила перехода между ними. У разных животных может быть разный набор состояний, который определяет, как это животное будет себя вести в разных ситуациях.

Например, у кролика из Red Dead Redemption может быть набор «бездействие, патрулирование, перемещение, бегство». У волка этих состояний будет больше — например, «бездействие, патрулирование, поиск, атака, бегство». У животных, имеющих агрессивное поведение, система состояний, как правило, сложнее.

Обычно животные в таких играх существуют в двух контекстах поведения: спокойное и агрессивное. Чаще всего они находятся в базовом «спокойном» состоянии, пока не появится какое-то условие, по которому животное сделает переход в другой контекст поведения.

Для животных в играх с большими открытыми или псевдооткрытыми мирами зачастую задают определённое расписание. Чем сильнее игра стремится к реалистичности, тем сложнее будет это расписание. Кроме того, дневное расписание может отличаться от ночного.

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

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

Большая часть животных — четвероногие. Им нужно обеспечить достаточные условия, чтобы они могли проходить по местности. Если длина медведя пять метров, а место обитания сделали таким образом, что там через каждый метр растут деревья, он не сможет там нормально передвигаться. Нужно обеспечить и создать правильные навигационные условия для мобов. Это командная работа геймдизайнера, аниматоров, левел-дизайнеров, специалистов по генерации мира и программистов.

Зачем в разработку животных вкладывают столько ресурсов?

На примере Red Dead Redemption 2 или Assassin's Creed можно заметить, что чем игра ближе к реалистичности, тем сильнее разработчики стараются сделать симуляцию деятельности животного. Например, хищники могут отправиться на охоту, животные приходят на водопой, а мелкий грызун сидит и моет мордочку.

В Red Dead Redemption 2 около двухсот видов животных — разработчики Rockstar потратили огромные ресурсы на то, чтобы заставить животных вести себя близко к реальной жизни. На первый взгляд такие действия не имеют большой геймплейной ценности, но они делают мир богаче и живее, хотя игрок может этих мелочей вообще не заметить.

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

Ту же Red Dead Redemption 2 хвалят как раз за глубину и качество проработки, которые в конечном итоге окупают многомиллионные бюджеты. Люди хотят жить в этих мирах, — потому что они продуманные и ощущаются живыми. Это уже некоторый стандарт в индустрии. Сейчас ресурсные мощности позволяют тратить на это время, и разработчики с гордостью говорят: у нас двести видов животных, у каждого животного своё расписание, и, более того, они могут друг с другом взаимодействовать.

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

Для экономии вычислительных ресурсов обычно вводят так называемый «пузырь игрока» (Player bubble). Это область вокруг игрока, внутри которой ИИ существуют как сущности, которые отрисовываются постепенно. Вне «пузыря» животные — уже не модели с анимацией, а просто логические элементы. У них может остаться базовое расписание выполняемых действий и набор состояний, но игрок их не увидит и не пощупает. Взаимодействие этих элементов больше похоже на настольную карточную игру, и эти процессы происходят «под капотом».

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

Мир оживает с приходом игрока, но то, что происходило вне нашего видения, может происходить и без нашего участия. Как пример — Days Gone, где игрок может вдали от себя увидеть, как фрики дерутся со стаей волков или медведем. При этом неважно, присутствует игрок или нет: у них в расписании заложено такое поведение. В том числе за это и ценятся многие такие игры: мир в них живёт и без игрока, а игрок там действительно лишь гость.
Животные-компаньоны

У животных-компаньонов более широкий и развёрнутый шаблон поведения, чем у обычных ИИ, поэтому разработчики тратят намного больше сил, чтобы он работал правильным образом.
Классический пример: собаки из Fallout и Metal Gear Solid, или орёл из Assassin's Creed, которого игрок может посылать на разведку. У них, скорее всего, не будет комплексного расписания действий, так как они привязаны не к месту обитания, а к игроку.

Животное-компаньон — это как дополнительный скилл. Той же собаке можно отдать приказ напасть (активный скилл), как это реализовано в Dragon Age: Origins. Или же она может найти что-нибудь полезное (пассивный скилл), как в Fable.

Боевые животные

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

Здесь перед дизайнерами и командой в целом стоит множество вопросов: сколько атак будет использовать данная сущность, в какой последовательности будут атаки, как животное будет передвигаться вокруг игрока и какую позицию занимать.

Тут есть некоторые тонкости: например, если обратить внимание на игры с видом от первого лица, вроде Far Cry, там животные почти не ходят вокруг игрока, а находятся прямо перед ним. Это связано с ограничениями камеры — если животное начнёт ходить туда-сюда, а тем более, если их окажется несколько, игроку будет неудобно следить за происходящим. В то время как игры с видом от третьего лица, наоборот, делают так, чтобы животные перемещались вокруг игрока.

Разработчики должны ответить на множество вопросов: наличие суперприёмов, тайминг атак, перерыв между атаками, поведение животного, когда у него осталось мало здоровья. В разных играх применяются разные системы, и степень глубины тоже отличается. Но есть общие важные моменты, на которые всегда стоит обращать внимание и которые отличаются от процесса работы над двуногими NPC. Здесь очень важна коллаборация геймдизайнера, программиста и аниматора, потому что эти три специалиста определяют итоговую модель животного и тот опыт, который она привнесёт в геймплей.

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

Можно использовать эффекты: у животного может появиться вспышка-индикатор, как в God Of War. Можно решить вопрос анимациями — отвод головы в определённую сторону или прыжок назад перед атакой. В реальности звери так себя не ведут, но задача разработчиков — сделать так, чтобы, с одной стороны, это смотрелось естественно, а с другой, чтобы игрок получил обратную связь.

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

Геймдизайнеры и аниматоры стараются сделать так, чтобы неестественные для животных движения выглядели естественными для игры, — чтобы у игрока не возникало чувства несоответствия.
Также очень важен вопрос навигации, потому что «капсула» у животных отличается от капсулы у людей тем, что она не вертикальная, а горизонтальная, и зачастую достаточно длинная. Вследствие этого животным бывает трудно огибать какие-либо препятствия, те же деревья или камни.

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

Также нужно предусматривать, что будет делать животное, когда оно не может добраться до игрока. Например, игрок умеет карабкаться, а животное нет — игрок залез на дерево, скалу или машину, а животное в это время топчется внизу и не может залезть. В зависимости от того, насколько трудолюбивым был разработчик, могут быть разные ситуации: животное может стоять и смиренно ждать своей смерти, а может после пары выстрелов заскулить и убежать.

Всё зависит от глубины проработки реакций на раздражители и на входящие данные. Обычно переходы между состояниями делают с помощью различных систем: чаще всего применяются FSM (Finite-state machine) и иерархические структуры, — например, деревья поведения.

Как происходит разработка животных с ИИ

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

Разработчики продумывают место обитания животного и некоторые особенности поведения, присущие данному виду: волк воет на луну, дельфин выпрыгивает из воды, медведь ревёт, и так далее.

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

Затем обычно составляется низкоуровневый документ, в котором можно детальнее расписать, что делает животное, например, его поэтапное расписание: спит, ест, пьёт, ходит из точки в точку, ревёт и так далее. Могут прописать дополнительные детали: например, взаимодействие с другими сущностями — «лев пошёл на охоту».

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

Как только мы получим эти и многие другие ответы, мы спускаемся на уровень ниже и прорабатываем детали, далее фиксим баги, а затем процесс повторяется. Ассеты постепенно заменяются, поведение усложняется, анимации и эффекты приобретают отточенность и лоск, и в итоге мы получаем новое животное, которое можно выпускать в мир игры. При грамотной системе навигации и реалистичном поведении ИИ получается полноценный персонаж, который делает мир игры более живым и реалистичным.
Понравилась статья?
Хочешь получать лучшие статьи
от XyZ раз в неделю?
Подпишись на рассылку XyZ
Нажимая на кнопку, вы соглашаетесь с условиями обработки данных