на главную
об игре
Uncharted 4: A Thief's End 10.05.2016

Разработка Uncharted 4: немного о ИИ, часть 1

После выпуска Uncharted 4 я уже могу рассказать о том, над чем работал в этом проекте. В основном я разрабатывал ИИ для напарников игрока в однопользовательском режиме и помощников в многопользовательском, а также немного работал над геймплейной логикой. Я опущу те аспекты, которые не добрались до готовой игры и некоторые мелкие детали.

Итак, приступаем:

Система постов

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

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

Напарники, следующие за игроком

Система следования напарников за игроком взята из The Last of Us.

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

В отличие от The Last of Us, в Uncharted 4 есть такой аспект, как скалолазание. Чтобы встроить скалолазание в систему следования за игроком, мы добавили селектор постов скалолазания, выбирающий точки, в которые напарники должны перемещаться, когда игрок взбирается по скалам.

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

Идущие впереди напарники

Мы хотели, чтобы в некоторых моментах игры напарники показывали игроку путь. Эта система была взята из The Last of Us и усовершенствована: дизайнеры использовали сплайны, чтобы наметить общие пути, по которым должны следовать напарники, ведущие игрока вперёд.

В случае наличия на уровне нескольких путей дизайнеры располагали несколько сплайнов и включали/отключали их с помощью скрипта.

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

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

Совместное использование укрытий

В The Last of Us игрок может перемещаться относительно напарника, по-прежнему оставаясь в укрытии. Это называется общим укрытием.

В The Last of Us Джоэл находится дальше от стены укрытия, чем Элли или Тесс, и это логично, потому что они меньше, чем Джоел. Но для Нейта, Сэма, Салли и Елены это выглядело бы неестественно, ведь они имеют почти одинаковый рост. Кроме того, Uncharted 4 гораздо более быстрая игра, и если Нейт будет вытягивать руки, перемещаясь за препятствием, это разрушит плавность движений. Поэтому мы решили, что напарники просто станут опираться на стену укрытия, а Нейт будет слегка огибать их при движении.

Здесь мы использовали очень простую логику. Если спроецированная позиция игрока с учётом его скорости попадает в прямоугольную границу вокруг поста укрытия напарника, то напарник завершает текущее поведение за препятствием и прижимается к стене укрытия.

Медики-помощники

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

Медики пытаются имитировать поведение игроков за укрытиями и быть как можно ближе к игроку, чтобы в случае ранения игрока находиться рядом и воскресить его. Если ближайший союзник ранен, они также будут воскрешать и союзника, при условии, если игрок ещё жив. Если игрок оснащён модом RevivePak для медиков, то прежде чем бежать к союзникам для из воскрешения они будут пытаться бросать в союзников RevivePak (несколько одновременно выполняемых воскрешений ускоряют процесс воскрешения); при бросках RevivePak используется логика метания гранат, в частности, проверка свободности траектории и воспроизведение анимации, только гранаты заменены на RevivePak.

Трава для стелса

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

Органы чувств

Поскольку в отличие от The Last of Us, в Uncharted 4 нет режима прислушивания, нам нужно было каким-то образом сообщать игроку о приближающихся угрозах, чтобы того не напрягало неизвестное расположение врагов. Используя данные о восприятии врагов, мы добавили цветные индикаторы угрозы, сообщающие игроку, что враг скоро его заметит, как отвлекающий фактор (белый индикатор), воспримет как отвлекающий фактор (жёлтый индикатор) и полностью осознает его присутствие (оранжевый индикатор). Кроме того, мы сделали так, чтобы индикатор угрозы усиливал фоновый шум, чтобы нарастить напряжённость, и издавал громкий сигнал, когда враг полностью понимал о присутствии игрока, как в The Last of Us.

Исследование

Это последняя крупная часть геймплея, в разработке которой я принимал участие, прежде чем игра ушла на «золото». Обычно я не посещаю формальные совещания в Naughty Dog, но за несколько месяцев до «золота» у нас проходило не меньше одного совещания в неделю под управлением Брюса Стрейли или Нила Дракманна. Совещания были посвящены ИИ игры. Почти после каждого из этих совещаний в системе исследования находилось что-то для изменения или переработки. Прежде чем выпустить готовую игру, мы прошли через множество этапов итераций.

Есть два аспекта, отвлекающих врагов и побуждающих их к исследованию: присутствие игрока и трупы. Когда враг обнаруживает отвлекающий фактор, он пытается привлечь ближайшего союзника, чтобы вместе исследовать его причину. Более близкий враг становится исследователем, а второй — наблюдателем. Обнаруживший отвлекающий фактор враг может стать исследователем или наблюдателем, и мы подготовили для этих случаев два разных набора диалогов («Там что-то есть. Пойду проверю.» и «Там что-то есть. Иди проверь.»).

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

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

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

Комментарии: 4
Ваш комментарий

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

1

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

-5

00 Отважный морячок Дружище, а подскажи игру с обосраться каким умным ии, а то постоянно именно в адрес анча слышу подобный упрек. Кроме игр 10-летней давности, шахмат и армы 3, у которой безграничные ресурсы ПК. А то чувствую, как совсем отупел, хочется челленджа с умными врагами.

8

Статья стара, автор припозднился что-то. 00 Отважный морячок Если в анчартед он туп, то где он сейчас умнее? Разве что в фире. Не знаю, на харде замечал, что ии врагов обходит с фланга, стреляет на подавление, не сидит на месте и рашит и все такое, такое ощущение, будто следуют тимплею. А из современных шутанов больше ничего и не припомню. Разве что в мгс 5 ии вел себя довольно активно и необычно. А уж система кооперации с напарниками и их следование вообще редкость. Сейчас во многих играх до сих пор используют телепортацию союзников, в то время как у анчартеда прорвботан ИИ для следования как в обычном режиме так и в платформинге.

6