Content Oriented Web
Make great presentations, longreads, and landing pages, as well as photo stories, blogs, lookbooks, and all other kinds of content oriented projects.
Блог 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
Нажимая на кнопку, вы соглашаетесь с условиями обработки данных