В первой статье мы поговорили о видах тестирования, применяемых в играх, а теперь поговорим о результате, который смущает PMов, вводит в краску разработчиков и так крайне не терпим Product Owner'ами на продакшене - багах. Сегодня я их также классифицирую и покажу вам некоторые из них на примерах.
![Думаю многие видели этот баг из Assassins Creed. Причины могут быть разные - не подгрузился mesh или материал или материал и вовсе неправильный. А также не стоит исключать возможность включения LOD mesh, котороый не установлен Думаю многие видели этот баг из Assassins Creed. Причины могут быть разные - не подгрузился mesh или материал или материал и вовсе неправильный. А также не стоит исключать возможность включения LOD mesh, котороый не установлен](https://habrastorage.org/getpro/habr/upload_files/75f/097/1a4/75f0971a4b627770a34f0b7a60a11c1b.png)
Было бы странно, если в такой комплексной системе как видео игры не было багов. Они есть, встречаются часто и этот бестиарий здесь крайне разнообразен. Ознакомившись с вышеприведёнными видами тестирования для игр, думаю вы догадываетесь, что и баги в видео играх встречаются далеко не только "404 not found" и "game crashed". Давайте же пробежимся по самым часто встречающимся из них в игровой индустрии!
В категорию Visual багов войдут: любые видимые артефакты (Visible Artefacts), пропущенные текстуры (missing textures), Clipping, Culling, Screen tearing, Z-fighting.
Примеры визуальных багов можете посмотреть ниже:
Visual Artefacts - любые визуальные баги, не подпадающие под другие виды.
![Вупс... Что-то пошло не так Вупс... Что-то пошло не так](https://habrastorage.org/getpro/habr/upload_files/908/d5a/c07/908d5ac074bb9c43bfdae3e067f3c303.jpeg)
Missing Textures - пропущенные/исчезнувшие текстуры. Обычно на их месте стараются ставить "заглушку" в виде яркой текстуры по умолчанию в виде шахматной доски. Это не обязательно, но благодаря такому подходу, пропущенные текстуры видны не вооруженным взглядом.
![Пропущенная текстура и хороший пример "шахматки" вместо потерянного файла Пропущенная текстура и хороший пример "шахматки" вместо потерянного файла](https://habrastorage.org/getpro/habr/upload_files/644/f01/3cc/644f013cc42a9e97620a0cce74e2c134.jpeg)
Z-fighting - данный баг появляется, когда несколько примитивов расположены на примерно одинаковом расстоянии до камеры и они имеют фактически одинаковые значения в Z-buffer, которые отслеживают глубину. Из-за этого примитивы могут частично отображаться один над другим.
![](https://habrastorage.org/getpro/habr/upload_files/298/e0e/42e/298e0e42ed2b3dd78a1a4d886489ceea.png)
![](https://habrastorage.org/getpro/habr/upload_files/565/b23/650/565b2365094024c1afd6ec0536569aa2.png)
Screen Tearing или "разрыв экрана" - это визуальный артефакт, при котором отображается информация из нескольких кадров на одном изображении.
![](https://habrastorage.org/getpro/habr/upload_files/cb4/2d3/5a4/cb42d35a464905cbda9657bef31a6898.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/8ff/490/ae9/8ff490ae94d4b83a3e983eb77e83ea84.jpeg)
Culling и Clipping - баги, относящиеся к работе рендера и графического пайплайна. Часто - пересечение двух объектов, при котором один закрывает геометрию другого, скрывая ее от взгляда. Если немного углубиться, то Culling - это отсечение того, что заведомо невидимо. В таком случае игра даже не будет пытаться отрисовать данный сегмент. Culling бывает разным и вот его примеры: rustrum culling - отсечение по пирамиде видимости, backface culling - отсечение "задних" граней, occlusion culling - отсечение граней факту их перекрытия другой геометрией, depth culling - перекрытие одной геометрии другой, которая уже была нарисована, но на основе depth buffer. А вот когда рисуется достаточно большой полигон и от него отрезается всё то, что заведомо находится за пределами экрана - это уже Clipping.
Также отдельно стоит выделить похожий, но в сути другой баг - проблемы коллизий. В видеоиграх отсечение может быть связано с набором алгоритмов, которые реагируют на взаимодействие двух смежных или перекрывающихся геометрий (collision detection). А для выявления таких багов существуют специальные режимы просмотра (view modes), но об этом я расскажу в следующей статье.
![Вот так можно легко "войти" в объект с кривой коллизией (или без неё вовсе) Вот так можно легко "войти" в объект с кривой коллизией (или без неё вовсе)](https://habrastorage.org/getpro/habr/upload_files/eec/484/cfa/eec484cfa297af16bb89f2cfa099613e.jpeg)
![Баг такого рода также можно описать термином occlusion, т.е. перекрытие одного объекта другим не так как задумано. Баг такого рода также можно описать термином occlusion, т.е. перекрытие одного объекта другим не так как задумано.](https://habrastorage.org/getpro/habr/upload_files/462/d17/14b/462d1714b9ef3c66ca9ddab936b57cab.jpeg)
В рамках Audio bugs группы выделю достаточно базовые, но не менее надоедливые вещи: не возможность проиграть SFX/музыки/диалога, пропуск (тригера) проигрыша, плохое микширование (звук слишком тихий или громкий), искажения (distortions), дропы.
Баги левел дизайна - невидимые стены (invisible walls), пропасти в карте (map holes), застревания (stuck spots) и т.д. Также к багам левел дизайна я бы отнёс баги связанные с нав мешем (Navigation Mesh). Ниже приведу несколько примеров багов левел дизайна:
Invisible Walls (невидимые стены) могут являться как багом, так и фичей. Ранее так ограничивали передвижение персонажа игрока и не давали уйти дальше нужного. Сейчас же стараются не создавать "невидимых препятствий", а ограничивать "проходимость" при помощи левел дизайна, к примеру выставить непроходимую преграду, баррикаду, горы, ворота города и т.п. Показывать игроку, что впереди что-то есть, но при этом использовать невидимые стены для недопуска персонажа в эту зону - признаки плохого левел дизайна. Сейчас так почти не делают и невидимые стены часто могут быть следствием реконструкции уровня: к примеру какую-нибудь модель могли забыть убрать или добавили невидимых элемент в качестве временной заглушки.
![](https://habrastorage.org/getpro/habr/upload_files/381/9b8/f66/3819b8f6673250f180f97d7df0f75554.jpeg)
![Герой не может пройти дальше из-за невидимой стены, однако дорога всё не заканчивается... Герой не может пройти дальше из-за невидимой стены, однако дорога всё не заканчивается...](https://habrastorage.org/getpro/habr/upload_files/58c/c45/ea3/58cc45ea32c6ebcf86ff5e2af84942e9.jpeg)
Map Holes чаще всего вызваны не плотным прилеганием плоскостей объектов (пол, стены и т.п.). Это места, где пользователь может, незапланированно для разработчиков, попасть за границы игровой зоны. Такие баги часто ещё называют Out of Bounds.
![А вот так ваша игра выглядит "изнутри" А вот так ваша игра выглядит "изнутри"](https://habrastorage.org/getpro/habr/upload_files/5d8/66b/179/5d866b17901711fd3101f2d31809933f.jpeg)
Баги Navigation Mesh часто связаны с перестройкой уровня или автоматической генерацией сетки. К примеру вы передвинули предметы, однако навигационная сетка осталась старой. Как следствие, ваши NPC могут "идти в стену" или любой другой предмет, который они не смогут обойти и встрянут там (один из случаев Stuck Points).
![Здесь Nav Mesh проходит сквозь объекты в красном круге Здесь Nav Mesh проходит сквозь объекты в красном круге](https://habrastorage.org/getpro/habr/upload_files/d7e/755/3d1/d7e7553d180d961488e4cade6e683e8c.png)
Ошибки искусственного интеллекта (AI): NPC не двигаются, застряли, не следуют за игроком, предполагаемое взаимодействие с предметами не работает, застревание, NPC делают то, что не задумано изначально и т.п.
Раз уж у нас есть и часть движка, отвечающая за физику, то было бы странно, если бы и багов с физикой не было. Тут может быть почти что угодно: левитирующие объекты, нереалистичная физика, ускорение свыше нормы, а также взмывание предметов " в космос" из-за сложения векторов при обработке контактов. Баги такого рода вы могли видеть в мемах самых разных игр, например GTA 5 или, из актуалочки, Cyberpunk 2077. Хороший разбор многих багов из Cyberpunk 2077, включая только что описанные, можно посмотреть тут.
![Плотва, что ты делаешь??? Плотва, что ты делаешь???](https://habrastorage.org/getpro/habr/upload_files/e8f/25c/c67/e8f25cc671928b62763a7f1c3561286e.jpeg)
![Летающие машины в Cyberpunk 2077 - не редкость Летающие машины в Cyberpunk 2077 - не редкость](https://habrastorage.org/getpro/habr/upload_files/f96/61a/b74/f9661ab741250e642deeaa5f095bf468.png)
Баги стабильности и перформанса включают в себя фризы, краши, чёрные экраны, невозможность загрузить уровень, видимая для пользователя подгрузка хай поли моделей или вообще каких-либо объектов, просадка FPS, дооооооооолгая загрузка, а также микрофризы (подгрузки). Сюда же добавлю слишком долгую инсталляцию игры, а также невозможность запустить игру на ПК с минимально допустимыми требованиями.
![Извините, я вас не узнал... У вас лицо не прогрузилось Извините, я вас не узнал... У вас лицо не прогрузилось](https://habrastorage.org/getpro/habr/upload_files/4b0/02f/c02/4b002fc02158ff132d7215e4c0348264.jpeg)
Не редко встречаются и баги совместимости. Особенно частые примеры выглядят следующим образом: на некоторых видеокартах могут встречаться краши (к примеру на минимально возможных требованиях или новых видеокартах на рынке), контроллеры той или иной фирмы не работают, игра не запускается на какой-то определённой версии ОС, беспроводная гарнитура выдаёт звук в моно и т.п.
О проблемах онлайн игр наслышаны все. Плохое соединение, лаги, "невидимые игроки" или же "я зашёл за угол, а меня убили", ошибки подсчёта очков, невозможность реконнекта (если такая фича есть), потеря пакетов во время игры, расхождение в подсчётах информации между клиентом, дедикейтед сервером и бек эндом. Также при плохом соединении некоторые элементы интерфейса можно использовать по несколько раз, что-то может не прогрузиться и "пропасть" и т.д., но, как правило, это UI баги и сильно не влияют на user experience игрока.
![С таким количеством повторений, походу это уже не баг, а фича. Пора вводить очереди как в Diablo 2 С таким количеством повторений, походу это уже не баг, а фича. Пора вводить очереди как в Diablo 2](https://habrastorage.org/getpro/habr/upload_files/e3d/73d/81d/e3d73d81d4e5dbc0dd1d3e9b0a0b6c93.jpeg)
Под баги локализации и compliance, из нетривиального, можно отнести локализацию рекламы, размещение разных материалов на одних и тех же местах в разных регионах и странах (к примеру в этой стране запрещено к показу одно, а в другой - не запрещено или же возрастной ценз, под которые подпадает игра, может не разрешить что-либо показывать в том или ином регионе). Манипуляции с датой на вашем устройстве и сбой работы клиента с сервером я бы тоже отнёс сюда. Ну и "классические" баги локализации и интернационализации никто не отменял. Больше про них и о подходах к их правильному и полному тестированию можете прочитать в моей статье.
![Зачем мне текст? И так же понятно куда клацать! Зачем мне текст? И так же понятно куда клацать!](https://habrastorage.org/getpro/habr/upload_files/885/67e/3cb/88567e3cb445ed1d6c89c11e8a2e5b8b.png)
![И люди, и кони, и всё-всё тут намешано И люди, и кони, и всё-всё тут намешано](https://habrastorage.org/getpro/habr/upload_files/bcc/ff7/2fd/bccff72fd4b131c0b0992a12461501fc.jpeg)
Неужто это всё?
Конечно же нет. Это далеко не все разновидности игровых багов, но, пожалуй, самые часто встречаемые. Здесь я не затрагивал баги несоответствия, такие как "элемент записан в blueprints по одному, на back-end - по другому, объект или его атрибуты (ID, описание и т.д.) забыли куда-то добавить и прочее. А не затрагивал их, т.к. это больше не про специфики игр, а в целом неисправности, которые могут быть во многих программах.
А с какими багами вы встречались во время игры или работы над игрой? Буду рад пообщаться с вами на эту и другие релевантные темы в комментариях!