Автоматический поиск ошибок в открытом мире Assassin's Creed Origins

Подробный рассказ технического директора игры.

Бывший технический директор Ubisoft Montreal Николас Рутье на GDC 2018 выступил с докладом о подходах, которые применяются для проверки работоспособности элементов открытого мира и поиска ошибок в Assassin's Creed Origins. Мы выбрали из видео главное.

В Assassin's Creed Origins представлен большой игровой мир с разными зонами и огромным количеством контента. Чтобы создать всё это, сотни разработчиков трудились над проработкой отдельных игровых элементов. Это означает, что во время разработки ежедневно использовалось огромное количество данных. Кроме того, команда использовала процедурную генерацию, чтобы создать большую часть игрового мира.

Автоматический поиск ошибок в открытом мире Assassin's Creed Origins

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

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

​Одна из сотен деревень в игре
​Одна из сотен деревень в игре

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

​Так быть не должно
​Так быть не должно

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

​Если поднять башню слишком высоко, то спуск по зиплайну будет казаться слишком резким, а анимация будет выглядеть неправильно
​Если поднять башню слишком высоко, то спуск по зиплайну будет казаться слишком резким, а анимация будет выглядеть неправильно

Другой пример потенциальной проблемы связан с ИИ персонажей. У всех NPC есть свой распорядок дня, по которому они могут «жить» даже без участия игрока. У каждого персонажа есть специальные точки, на которых он занимается конкретным делом. Чтобы перемещаться от позиции к позиции, используется навигационная сетка.

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

​Зелёным выделена навигационная сетка. Жёлтая стрелка показывает на точку, которая оказалась вне сетки
​Зелёным выделена навигационная сетка. Жёлтая стрелка показывает на точку, которая оказалась вне сетки

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

​Дырки в навигационной сетке
​Дырки в навигационной сетке

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

Обычно процесс поиска багов происходит следующим образом: у тестеров есть список, по которому они должны пройтись и проверить каждый пункт. Но главная проблема в том, что в Assassin's Creed Origins огромный мир, поэтому разработчики не могли справиться с поиском багов вручную.

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

​Описание системы звучит очень просто: сперва есть входные данные, которые анализируются, а затем получаются выходные данные с результатами теста. На деле всё значительно сложнее
​Описание системы звучит очень просто: сперва есть входные данные, которые анализируются, а затем получаются выходные данные с результатами теста. На деле всё значительно сложнее

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

Этап с анализом данных заключается в проведении автоматических тестов. Для этого разработчики использовали Anvilscript, который представляет собой C #-скрипт, работающий внутри игрового редактора. С помощью скрипта команда может обращаться к любым данным в игре. К тому же он даёт доступ ко всем фичам редактора и движка.

Автоматический поиск ошибок в открытом мире Assassin's Creed Origins

Есть три типа тестов: тесты метрик размещения, тесты системы ИИ, тесты локации. У каждого объекта есть список тестов, каждый из которых можно либо пройти, либо провалить.

Тесты метрик размещения предметов проще всего показать на знакомом элементе — зиплайне.

​Если в ходе теста обнаружено препятствие, то эта ошибка фиксируется
​Если в ходе теста обнаружено препятствие, то эта ошибка фиксируется

Это же касается и угла, под которым размещается зиплайн.

​Такой вариант подходит
​Такой вариант подходит
А такой — нет​
А такой — нет​

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

​В игре есть 228 зиплайнов — одному тестеру понадобится рабочий день, чтобы проверить их. Но чтобы протестировать все игровые объекты (210 689 штук), понадобятся усилия 20 человек на протяжении двух месяцев. И это только единоразовая проверка!
​В игре есть 228 зиплайнов — одному тестеру понадобится рабочий день, чтобы проверить их. Но чтобы протестировать все игровые объекты (210 689 штук), понадобятся усилия 20 человек на протяжении двух месяцев. И это только единоразовая проверка!

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

Тесты локаций нужны для «инвентаризации» объектов внутри каждой зоны. Например, если за лагерем бандитов закреплён один сундук с лутом, то во время теста проверяется, так ли это на самом деле.

​Также это позволяет увидеть случайную подмену предметов
​Также это позволяет увидеть случайную подмену предметов

После анализа данных система выдаёт результаты проверки в таблице Excel.

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

В этом примере всё достаточно просто, но для тестов локаций создаются таблицы, в которых около 50 столбцов.

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

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

Чтобы сделать систему ещё лучше, разработчики постарались найти способ визуализировать место с ошибкой, чтобы сразу знать, в чём её причина. Для этого команда Ubisoft Montreal создала систему Atlas — фактически, Google Maps для игрового мира. Все ошибки, соответственно можно увидеть через Atlas.

​Так выглядит система Atlas: справа находится карта игрового мира, а слева — список всех тестов. Если нажать на них, то на карте появятся красные точки — это места с багами
​Так выглядит система Atlas: справа находится карта игрового мира, а слева — список всех тестов. Если нажать на них, то на карте появятся красные точки — это места с багами
Если нажать на красную точку, то камера переместится прямо к месту с багом. Нужный объект выделяется красным
Если нажать на красную точку, то камера переместится прямо к месту с багом. Нужный объект выделяется красным

Именно такие тесты и проводились ежедневно.

​Ежедневный цикл
​Ежедневный цикл
​Некоторые показатели процесса тестирования
​Некоторые показатели процесса тестирования

Автоматическая система поиска багов позитивно повлияла на множество рабочих процессов. Она позволила находить ошибки не только на этапе полировки, но и во время всего процесса разработки. Также они значительно снизила трудозатраты тестеров и всех членов команды. По словам Рутье, лучше вводить такую систему как можно раньше, потому что она показала высокую эффективность.

22 показа
12K12K открытий