Геймдев
#статьи

Откуда берутся баги в Cyberpunk 2077: летающие машины, NPC в T-позах и другие

Последний крупный патч исправил не все проблемы нашумевшей RPG.

Скриншот: игра Cyberpunk 2077 / CD Projekt RED

При всех своих неоспоримых достоинствах Cyberpunk 2077 также запомнится печально известным релизом: многие игроки на старте в 2020 году регулярно сталкивались с серьёзными багами, которые ломали погружение и не позволяли пройти игру до конца. Студия CD Projekt RED потратила много времени на исправление технических проблем Cyberpunk 2077, но даже после выхода обновления 2.0 и дополнения Phantom Liberty в 2023 году игроки по-прежнему натыкаются на летающие в воздухе предметы и становятся свидетелями непредсказуемого поведения NPC.

В этой статье редакция «Геймдев» Skillbox Media разбирается, какие баги можно встретить в Cyberpunk 2077 и почему они становятся возможными.

Мы не можем знать всех особенностей движка REDengine 4, который CD Projekt RED использовала для создания Cyberpunk 2077. А значит, и определить точную причину некоторых багов тоже нельзя — это могут знать только программисты студии. Зато мы можем выдвинуть предположения на основе общепринятых принципов геймдева.

Подписывайтесь на наш телеграм-канал «Чекпоинт». Это уютное место, в котором мы рассказываем об играх и о том, как они создаются, а также делимся полезными советами разработчиков и пишем о важных обновлениях популярного софта. Комментарии открыты: вы можете предложить идею для нового текста или просто обсудить всё, что связано с геймдевом.

Предметы не на своих местах

Время от времени игроки по-прежнему сталкиваются с ситуацией, когда вокруг персонажей летают предметы. Чаще всего это оружие, которое закреплено за тем или иным NPC.

Видео: игра Cyberpunk 2077 / CD Projekt RED / Private Prime

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

Вот так это выглядит в Unreal Engine. Wrist_R — это невидимая якорная точка, которая является частью скелета персонажа
Изображение: Unreal Engine 5 / архив автора

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

При помощи якорных точек разработчики привязывают к персонажу не только пистолеты и другие маленькие предметы. Иногда они тем же образом увязывают героя с авто. Поэтому похожие баги со смещением можно встретить и в открытом мире. В данном случае модель Панам некорректно привязалась к мотоциклу
Видео: игра Cyberpunk 2077 / CD Projekt RED / Twitter: @kins_ky

Агрессивный автопилот

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/disrupter52

Такое странное поведение указывает сразу на несколько возможных проблем. В первую очередь — на неряшливую работу с навигационным мешем. Мы уже рассказывали об этом инструменте в статьях про баги в Starfield и искусственный интеллект в The Last of Us — не забудьте сохранить их куда-нибудь, чтобы почитать позже и узнать больше о навигационных мешах. Но если коротко, то навмеши заменяют искусственному интеллекту зрение, поэтому любые ошибки в них неизбежно приводят к проблемам с навигацией.

В больших играх вроде Cyberpunk 2077 навмеши часто создаются автоматически. Это, скорее всего, и привело к проблемам. На меше могли не отметиться дорожные знаки и барьеры. Также возможно, что левел-дизайнеры начали добавлять препятствия в игровой мир уже после построения навигационной сетки. В результате машина попросту «не замечает» объекты на своём пути.

Другой похожий баг: машина игрока заспавнилась на месте другого авто. При подборе точки возрождения движок должен провести бинарную проверку на наличие другого транспорта. В этот раз он, кажется, не справился с задачей и попытался вытолкнуть «слипшиеся» объекты друг из друга, что привело к такой занимательной ситуации
Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/ThrashOmega

Другая возможная причина подобных багов — недочёты в просчёте пути. Чтобы NPC и объекты вроде автомобилей в играх вели себя правдоподобно, их перемещение должно быть естественным. Как правило, недостаточно просто построить кратчайший путь от точки А к точке Б. В этом случае машина будет давить прохожих и сбивать всё на своём пути. Но и запрещать совершать такие манёвры тоже нельзя: они могут быть полезны в погонях.

Решить такую задачу разработчики могут множеством способов. Например, можно назначить цену определённым действиям. Допустим, проезд по тротуару может быть дорогим для машины, и оправдать его может только что-то очень важное — например, выстрел в водителя. Другой вариант: разделить навмеш на разные категории. Можно сделать универсальные участки и те, которые используются только в отдельных случаях. При таком проектировании навигационного меша поведение NPC и машин можно легко контролировать при помощи одной бинарной переменной. Когда персонажу или объекту нужно проложить маршрут куда-либо, они разово проверяют, можно ли использовать всю карту или только часть.

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/schoie01

Взорванные машины

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/Lavundi

В данном случае движок выбирает неправильную модель для авто. В обычной ситуации, когда «шкала здоровья» транспорта опускается до нуля, запускается цепочка событий: взрыв, отключение физики перемещения и возможности сесть в авто. В итоге вместе со взрывом обычный меш машины незаметно подменяется взорванным. Однако в некоторых случаях по какой-то причине замена происходит в обход остальной логики. Возможно, на этапе появления объекта в мире на авто накладывается неверная модель. Либо же какие-то внешние действия вроде коллизии с другим объектом заменяют меш. Баг настолько специфический, что без доступа к исходному коду назвать его причину наверняка не получится.

На таких с виду уничтоженных машинах можно даже прокатиться самому
Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/KhonWeasley

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/john596venom

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

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/too-horny-for-main

Непредсказуемое поведение машин

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Medal.tv/coldshockz

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

Коллизии могут происходить не только при соприкосновении с твёрдыми поверхностями. Известные многим игрокам хитбоксы — это те же самые коллайдеры. Просто в некоторых играх они неосязаемы и служат лишь для передачи информации.

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

Этот недочёт приводит и к другим проблемам. Например, в этом видео одна из статичных машин появилась прямо перед игроком
Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/gas81
А вот здесь ситуация иная. Мир явно успел прогрузиться, но машина всё равно умудрилась выпасть за пределы карты. Вероятно, во время QA-тестов разработчики попросту не заметили, что на месте грузовика нет коллайдера. Либо же он есть, но настроен неправильно или расположен выше соседних коллизий
Видео: игра Cyberpunk 2077 / CD Projekt RED / Medal.tv/cydiamx

Летающие авто

На этом странности с поведением транспорта не заканчиваются: иногда он неожиданно подлетает в воздух. Это касается и машин игрока, и тех, на которых передвигаются NPC.

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/dontew234

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

Видео: Unreal Engine 5 / архив автора

Не исключено также, что импульс в Cyberpunk 2077 как-то привязан к фреймрейту. Такая связка нередко создаёт проблемы. На видео выше — пример из Unreal Engine 5. Белый кружок — это примитивный «актёр», на который при выстреле накладывается функция Add Force, работающая по-разному в зависимости от фреймрейта. В данном случае ограничение частоты кадров до 30 вытолкнуло кружок за пределы сцены — без этого ограничения функция отработала без проблем.

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

Ещё один забавный баг с коллайдерами. Вероятно, коллизия дороги ненадолго отключилась, а затем снова активировалась. Из-за этого движок начал выталкивать авто наверх
Видео: игра Cyberpunk 2077 / CD Projekt RED / Medal.tv/GoofyCat

Классические игровые баги

В Cyberpunk 2077 также много привычных глитчей, которые встречаются повсеместно. Например, некоторые NPC периодически встают в T-позы и A-позы. Так модели выглядят до того, как их начинают анимировать. Иными словами, это их исходное состояние.

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/tfaleksa

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/Savagely_Rekt

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/Portalradio10hloop

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

Другой интересный вопрос: почему один NPC сидит прямо на другом? Вероятно, спавнер дал им одинаковые координаты появления. Движок же во избежание проблем вытолкнул одного из них выше
Видео: игра Cyberpunk 2077 / CD Projekt RED / Reddit: u/Jacks911

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

Видео: игра Cyberpunk 2077 / CD Projekt RED / Medal.tv/baconandrice

***

Баги Cyberpunk 2077 запомнятся игрокам надолго. CD Projekt RED поставила перед собой очень непростую задачу: создать амбициозную игру в новом для себя жанре при помощи движка, который ранее использовался для принципиально других по размерам игр. Это, разумеется, не оправдывает сырое состояние проекта, но указывает на то, сколько всего может пойти не так в геймдеве. Даже несколько лет спустя специалисты студии не смогли избавиться от всех проблем — вероятно, из-за большого количества неизбежных костылей, появившихся на ранних этапах разработки.Избежать этих проблем можно при помощи грамотного препродакшена. Именно там закладываются основные элементы игрового опыта, а также масштаб проекта.

Любите игры? Попробуйте себя в геймдеве!

❓ Кто вы: геймдизайнер, разработчик, концепт-художник? Узнайте на бесплатном курсе

😼 Узнать, кто я →
Кто вы в мире геймдева? Узнайте на бесплатном курсе ➞
Вы на практике попробуете 3 профессии: геймдизайнера, 2D-художника и разработчика на Unity. Создадите свою первую игру в стиле Mario. Подробности — по клику.
Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована