Откуда берутся баги в Starfield: жуткие лица, «живые» мертвецы и прочие
Показываем самые вопиющие баги игры и рассказываем, из-за чего они возникают.
Скриншот: игра Starfield / Bethesda Game Studios / @ConnelDante / X
В начале лета глава Xbox Game Studios Мэтт Бути рассказал в интервью, что Starfield станет самой отполированной игрой Bethesda. После выхода долгожданной RPG журналисты и игроки также отметили, что игра получилась на удивление гладкой — по меркам студии, по крайней мере. Значит ли это, что в Starfield нет багов? Разумеется, нет: такой большой проект в открытом мире не мог обойтись без глюков, которыми уже полон интернет.
Собрали забавные клипы, снятые игроками, а заодно выяснили, почему они могли возникнуть и как их можно было избежать.
Пугающе выразительные лица NPC
Мы не можем знать всех особенностей движка Creation Engine, который Bethesda разработала для своих игр. А значит, и определить точную причину некоторых багов тоже нельзя: это могут знать только программисты студии. Зато мы можем выдвинуть предположения на основе общепринятых принципов геймдева.
Чаще всего игроки подмечают, что с NPC что-то не так: они устрашающе таращатся на игрока глазами с неестественно открытыми веками. Нечто похожее можно было увидеть в Mass Effect: Andromeda.
Одна из проблем очевидна: глаза NPC направлены на игрока даже в тех случаях, когда удобнее было бы повернуть голову. Это особенно заметно в случаях, когда на персонажа смотрят сверху вниз. Есть и другая проблема, которая усиливает этот эффект. Глаза выглядят мёртвыми из-за неправильного освещения и отсутствия объёма.
Бразильский художник Ральф Дамиани подробно описал этот эффект в Mass Effect: Andromeda. Невыраженные тени от век, отсутствие отражений в глазах, освещение всей сцены — эти элементы создают ощущение неестественности.
К тому же важную роль играет анимация. Это касается не только реалистичности моргания, но и спонтанных движений глаз. Без них иллюзия правдоподобности быстро рушится.
Глаза — небольшая, но очень важная часть тела, ведь игрок во время диалогов смотрит именно в них. Добиться реалистичности взгляда без захвата движений лица очень сложно. Впрочем, практика показывает, что при помощи QoL-улучшений основные проблемы можно решить.
Проблемы с навигацией
Также некоторые персонажи Starfield любят игнорировать стены и прочие препятствия. Это часто встречается в играх схожего со Starfield масштаба.
Как правило, такие проблемы связаны с навигационным мешем (далее — навмеш). Так называют невидимые для игрока сетки, которые искусственный интеллект использует для навигации по миру. Фактически они наделяют NPC зрением.
Синяя и фиолетовая области на картинке — это навмеш. Фактически это единственный инструмент, который позволяет NPC ориентироваться в пространстве, поэтому его нужно проектировать с умом. Например, если из навмеша не вырезать физическое укрытие, то ИИ может проложить путь сквозь него и упрётся в препятствие. На картинке выше видно, что на навмеше отдельно выделили дверной проём. Это позволяет, например, запустить уникальную анимацию прохода через него.
Что именно пошло не так в случае из ролика выше, сказать трудно. Возможно, дизайнеры забыли отметить дверь на навмеше после того, как левел-дизайнеры добавили её в уровень. Или не создали узел между двумя мешами в районе двери, который вынудил бы NPC проиграть анимацию взаимодействия с ней, а также запустил бы цепочку логики, в соответствии с которой персонаж ждёт, что дверь откроется.
К тому же в движке Starfield, Creation Engine, навмеш создаётся с помощью автоматических алгоритмов. Такая автоматизация процесса приводит к мелким проблемам, которые впоследствии нужно устранять вручную. В таких больших играх, как Starfield, разработчики неизбежно что-то упускают.
Застревания в геометрии
NPC в игре частенько не обращают внимания на твёрдые объекты и спавнятся прямо внутри них.
Причин, по которым разные объекты могут наезжать друг на друга, много. Чаще всего дело в неправильном расчёте точки спавна или неверном определении коллизии.
В первом случае система может, например, неправильно посчитать значение одной из ординат, из-за чего персонаж окажется ниже или выше, чем нужно. В случае со стоящим внутри стола Восторженным поклонником точка спавна могла быть актуальна для сидящего персонажа, но анимация сидения по какой-то причине не прогрузилась.
Во втором случае модель персонажа и его сфера коллизии могут по какой-то причине разъехаться в разные стороны. В результате движок попросту не увидит проблемы, ведь по его логике персонаж ни с чем не соприкасается.
Если забраться во вражеский корабль до того, как он поднимется в воздух, можно улететь вместе с ним. Впрочем, игре это не понравится, поэтому она действует радикально: насильно выталкивает игрока за пределы звездолёта.
Возможно, с точки зрения движка вражеские корабли — это просто объекты, которые тащат игрока наверх. Гравитация же, наоборот, тянет персонажа вниз, что порождает конфликт. Либо же движок таким образом защищает игрока от окончательной поломки игры, когда видит, что тот находится там, где не должен.
Странное поведение противников
Искусственный интеллект в Starfield порой выбирает странные тактики боя: противники могут бездумно бежать от игрока или прятаться за укрытиями, которые никак их не защищают.
Иногда в подобных ситуациях нет багов. Это просто неряшливая работа с деревом поведения NPC — набором логических вилок, которые заставляют персонажа действовать правильно в разных ситуациях. Большие системные игры вроде Starfield должны полагаться на алгоритмы, которые сделают противников реалистичными вне зависимости от ситуации.
В некоторых играх они могут быть очень простыми. Например, в хоррорах про зомби попадание в зону видимости противника триггерит соответствующую анимацию и создаёт на навмеше самый короткий путь в сторону игрока, по которому побежит зомби. Для такого нарочито примитивного персонажа этого достаточно.
На картинке ниже — простейшая форма древа поведения в Unreal Engine, которая позволяет NPC патрулировать местность и бежать за игроком. Цифры в правом верхнем углу каждого нода определяют последовательность действий. Если NPC не видит игрока (нод 1), то он начинает патрулирование (6): сначала выбирает место (7), затем движется к нему (8), затем ждёт от трёх до пяти секунд (9). Если же он на пути встретит игрока, левая часть древа, которая ответственна за погоню, автоматически перехватит внимание ИИ.
В большой игре алгоритмы заметно сложнее. Особенно когда речь заходит о противниках-людях: набор их действий куда богаче, он должен быть реалистичным и создавать иллюзию умственной активности. А главное, что в условиях открытого системного мира алгоритмы должны быть универсальными и создавать интересный игровой опыт вне зависимости от арены. Допустим, в начале боя противник может начать стрельбу, побежать в сторону противника или спрятаться в укрытии. Зачастую это зависит от действий его товарищей: если несколько персонажей уже стреляют, то NPC делает что-то другое, чтобы не перегрузить игрока.
Но иногда что-то идёт не так. Например, противник может не учитывать, насколько он видим игроку, когда прячется от него. Или алгоритм подбора подходящего укрытия дал сбой и система не нашла лучшей точки для отхода NPC. В случае с видео выше проблема, скорее всего, в том, что ИИ по какой-то причине не понимает, что игрок его видит и может по нему стрелять. В результате древо поведения не активирует действие «выход из укрытия».
Либо же ситуация экзотичнее — древо «видит», что из укрытия надо выйти, но не может выбрать что-то другое из-за неподходящих условий. Например, разработчики могли ограничить перебежку от одного укрытия в другое десятью метрами, чтобы NPC не бежал через всю локацию. В таком случае подобная система могла дать сбой, ведь подходящего укрытия, которое удовлетворяло бы всем вспомогательным условиям, поблизости нет.
Читайте также:
Мёртвые в Starfield продолжают «жить»
Не обошлось в игре и без классических багов с ragdoll-физикой. Убитые противники должны красиво падать на землю, но иногда что-то идёт не так.
Иногда мертвецы и вовсе выглядят живее всех живых.
Непонятно, что пошло не так в этом случае. Когда трупы проявляют признаки жизни в играх, обычно это говорит о проблемах с переменной, которая запускает все процессы, связанные со смертью: ragdoll, возможность обыскать персонажа, квестовые триггеры и так далее.
Разберём вопрос на простом примере логики смерти в Unreal Engine 5. После каждого попадания по противнику происходит бинарная проверка его состояния. Это левый нод на первой картинке выше: логическая вилка проверяет значение переменной Enemy HP, в которой хранится актуальное количество здоровья противника — если оно меньше нуля или равно нулю, то реализуется логика, которая связана со смертью. Проигрывается звук смерти и взрыва, а также появляется набор частиц, имитирующих взрыв.
Затем добавляется логика, специфическая для конкретной игры. Тут за убийство противника начисляются очки (картинка 2). В эту же логическую «колбасу» добавляются анимации смерти, возможность поговорить убирается, добавляется возможность обыскать NPC.
В случае со Starfield из примера выше у персонажа активировалась лишь анимация, а остальная логика осталась нетронутой. Скорее всего, анимация смерти проигралась невовремя или этот персонаж не должен умирать по сюжету. Это может быть связано с тем, что у всего архетипа шахтёров из начала игры логика устроена несколько иначе, чтобы они все не умерли, оставив игрока один на один с противниками.
Незначительные недоработки
Не обошлось в игре и без мелких недоработок. Например, один из разработчиков забыл удалить, скрыть или отключить сферу наклона.
За что они отвечают, неясно. Скорее всего, это проприетарное решение в Creation Engine, которое помогает упростить расстановку объектов на локации. Например, оно может служить якорем, к которому привязывают сразу несколько объектов. В таком случае, если покрутить сферу, все привязанные предметы тоже поменяют положение.
А ещё в игру перекочевали старые костыли, знакомые фанатам игр Bethesda. Так, товары продавцов можно найти в спрятанных сундуках. Правда, для этого придётся забраться под текстуры.
Обычно за пределами игровой зоны разработчики оставляют то, что забыли удалить, или различные пропсы, которые художники разбрасывают по локации в большом количестве: дублировать объект прямо из сцены быстрее и проще, чем каждый раз доставать его из соответствующей папки.
Бонус: забавные особенности движка
В Starfield есть и много экзотических деталей, о которых мы тоже расскажем, а то чего это мы тут только о багах. Есть в игре и разные позитивные технические решения! Например, счётчик с момента последнего инцидента на Марсе (см. видео ниже) обновляется в реальном времени. Мелочь, а приятно.
Сделать такое можно по-разному. Если в движке игры есть возможность создавать теги для объектов, то разработчики могли добавить уникальную отметку для всех персонажей в локации. После убийства таймер проверяет, умер ли NPC с соответствующим тегом. Ещё можно наложить на всю локацию один гигантский прямоугольник коллизии, чтобы убийство внутри него автоматически обнуляло таймер.
Но некоторые элементы движка настолько странные, что их можно посчитать багами. Например, воровать на глазах NPC нельзя, но если вытащить желаемый товар с помощью чего-то другого (например, ведра, как в ролике ниже) в укромное место, преступление не заметят. Это требует больше сноровки, чем классический фокус с ведром на голове из Skyrim, зато если додуматься до этого самому, то удовольствия будет масса.
А ещё в игре впечатляющая физика предметов. Они реалистично скатываются по наклонным поверхностям и не игнорируют другие объекты.
* * *
Starfield, как и прочие игры Bethesda, большая системная игра, которая часто полагается на симуляцию. Поэтому неудивительно, что в ней много багов: без них просто не обойтись. К счастью, на сей раз их действительно поменьше, а те, что встречаются, как правило, безобидные и не сильно портят игру.