Лучшее  🚀
26.04.2020 в 17:37 Evernews

Пропавший Новиград и дом мертвых: авторы The Witcher 3 рассказывают о крутых багах

Големам не стоит шутить с крысами — они очень ловкие.

Кстати, на сайте читать удобнее

При создании масштабных игр разработчики неизбежно встречаются с багами разной степени эпичности. Как правило, чем крупнее игра, тем более эпичными и необычными могут быть баги, которые находят тестеры. С The Witcher 3 так и было.

В честь пятилетия игры технический арт-директор Кшиштоф Кшишин, координатор тестеров Лукаш Бабель и дизайнер уровней Майлз Тост вспомнили про самые необычные ошибки, найденные во время разработки игры. Некоторые из них оказались забавными, другие могли стать критическими.

Оказалось, что в какой-то момент в The Witcher 3 появился дополнительный Новиград и целый дом, заполненный мертвыми телами. Геральт однажды обзавелся двойником, а обычная крыса оказалась настолько ловка, что справилась с големом.

Тысячи незаметных деревьев

Для создания и наполнения игрового мира The Witcher 3 в CD Projekt RED создали ряд специальных инструментов. Один из них отвечал за флору: с помощью редактора разработчики могли расставлять по локациям траву, деревья и другие растения.

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

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

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

Кшиштоф Кшишин, технический арт-директор

В результате, объясняет Кшиштоф, в игровом мире могли встречаться места, где были просто тысячи деревьев. Заметить их было нереально: деревья находились в одних и тех же точках игрового мира и двигались абсолютно синхронно.

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

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

Невидимый Новиград

В мае 2015 года The Witcher 3 готовился к выходу. Позади остались несколько переносов, команда была уверена, что игра готова. И в этот момент, вспоминает координатор тестеров Лукаш Бабель, один из сотрудников QA-отдела заметил, что Новиград исчез.

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

Как в третьем Ведьмаке открылись все двери

Как оказалось, баг был вызван очень редкой комбинацией состояний квестов. Система заданий The Witcher 3 достаточно умная: она умеет скрывать или отключать определенные элементы игры, ориентируясь на то, какие предметы, персонажи или скрипты ей сейчас нужны — это позволяет снижать нагрузку.

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

Ну и в какой-то момент память консоли так заполнилась, что движок начал скрывать не только нужные элементы, но и остальные фрагменты игры.

Лукаш Бабель, координатор тестеров

Сперва, продолжает Лукаш, разработчики перепугались: вдруг в игре есть задания, где система тоже ведет себя некорректно. Оказалось, студии повезло: баг с потоковой загрузкой воспроизводился только с этими тремя квестами.

Дом мертвых

Еще одна проблема, связанная со странным поведением ассетов, возникла во время подготовки к презентации The Witcher 3 на выставке E3 в 2014 году. При демонстрации геймплея игра время от времени подвисала; на первый взгляд все было нормально.

Как правило, объясняет Лукаш, в таких случаях первое подозрение падает на глюк в скриптах, проблемы с производительностью или памятью. На этот раз ничего такого не было: игра работала как обычно, просто вдруг зависала.

Выяснилось, что проблема была в боевой системе. Дело в том, что когда в The Witcher 3 Геральт отрубает конечность кому-нибудь из противников, игра незаметно подменяет целую модель персонажа на модель с отсутствующей рукой или ногой.

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

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

Через какое-то время в этом доме скапливалось 30-40 тел, для которых по-прежнему просчитывалась физическая модель и процедурные анимации. В какой-то момент движок просто говорил «да ну нахрен» и вылетал.

Лукаш Бабель, координатор тестеров

Уборка и падающий дом

С помощью знака Аард Геральт может отбрасывать противников и некоторые объекты — например, так игрок может разворотить комнату, раскидав в стороны все, что стоит на столе. Первое время Аард работал необычно.

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

Через какое-то время сцена должна была перезагружаться: игра расставляла объекты, по которым прошлись Аардом, на свои места. Эта функция появилась не сразу; пока ее не было, разработчикам регулярно приходилось прибираться прямо в редакторах, возвращая ассеты на свои места.

Геральт и Геральт

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

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

У каждого существа в игре, от Геральта до NPC или лошади, есть идентификатор — он используется системой квестов для привязки заданий. В какой-то момент выяснилось, что вы не можете проходить задания, потому что второй Геральт активировал все триггеры.

Лукаш Бабель, координатор тестеров

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

Голем против крысы

Как правило, вспоминает Лукаш Бабель, тестеры пишут длинные и подробные отчеты о том, что за ошибку они встретили и как ее воспроизвести. Иногда бывают исключения: отчеты короткие, емкие — и означают, что что-то очень сильно пошло не так.

Голем бьется с крысой, и очень похоже, что крыса побеждает.

Лукаш Бабель, координатор тестеров

Сцена битвы, рассказывает Лукаш, выглядела комично и больше всего напоминала бой Давида с Голиафом. Крыса побеждала даже при условии, что у нее была всего одна жизнь — голем просто не мог до нее дотянуться и нанести удар.

Нулевая точка

В редакторе движка RED Engine, как и во многих других редакторах, есть функция отмены — когда разработчик жмет Ctrl-Z, его последнее действие откатывается. В какой-то момент выяснилось, что действие на самом деле не откатывается.

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

Больше всего это напоминало открытие ящика Пандоры. Повсюду были мечи, дома, деревья, неигровые персонажи. У нас есть фигура высотой в 60 метров, использующаяся в качестве референса; она тоже была здесь.

Майлз Тост, дизайнер уровней

После исправления ошибки разработчикам пришлось очистить три таких скопления предметов: нулевые точки были у каждого из крупных открытых уровней The Witcher 3. На память в веленской нулевой точке посадили заметное дерево.

Читать далее