Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1

в 10:26, , рубрики: AI, CGI (графика), Блог компании Plarium, дизайн, Дизайн игр, игры, искусственный интеллект, Компьютерная анимация, разработка

Официальный релиз игры Uncharted 4 уже состоялся, и теперь я могу рассказать, что именно разрабатывал для этого проекта. В основном я был занят созданием искусственного интеллекта для неигрового персонажа (НП) из одиночной игры и для ботов из мультиплеера, а также работал над кое-какой игровой логикой. Я не буду останавливаться на вещах, не вошедших в финальную версию, и на незначительных особенностях, о которых слишком долго писать.
Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 1


Эта статья входит в серию публикаций под названием My Career.

Система точек

Сначала я хотел бы поговорить о системе точек, применявшейся для навигации НП. Я не разрабатывал ее базовую логику, но помогал с написанием кое-какого клиентского кода, использующего эту систему. Точки – это своего рода позиции, разбросанные по всему доступному для передвижения пространству. Как правило, они генерируются и расставляются с помощью специальных инструментов, но в некоторых случаях дизайнеры добавляют их вручную. Мы создали несколько разных селекторов, которые идентифицируют эти точки (например селектор точки боя или точки лазания) и по-разному оценивают их. Точки с самым высоким значением оценки используются для указания неигровым персонажам пути передвижения.

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 2

Система следования за игроком

Система следования НП за игроком была взята из The Last of Us. Согласно ее принципу, НП выбирают позади игрока, за которым они следуют, определенную позицию из нескольких возможных. Система рассматривает только те позиции, которые проходят ряд клиренс-тестов прямой: тесты прямой от игрока до позиции, от позиции до прямо спроецированной позиции и от прямо спроецированной позиции до игрока.

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 3

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

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 4

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

Система ведения игрока

В некоторых эпизодах нам было нужно, чтобы игрок следовал за НП, а не наоборот. Для этого мы позаимствовали систему ведения игрока из The Last of Us и немного изменили ее. Маршруты движения были размечены для НП сложными кривыми.

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 5

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

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 6

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

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

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 7

Поведение в укрытии

Система поведения в укрытии в игре The Last of Us имеет интересную особенность: игрок может беспрепятственно ходить возле НП, и при этом они оба будут оставаться в укрытии.

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 8

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

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 9

Логика очень простая: если проецируемое положение игрока, основанное на его скорости, вмещается в пределы прямоугольной границы вокруг точки прикрытия НП, персонаж меняет свое поведение и быстро прижимается к стене, как на картинке ниже.

Мин-Лун Чоу: Что я разрабатывал для Uncharted 4. Часть 1 - 10

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

Автор: Plarium

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js