Добавить в корзинуПозвонить
Найти в Дзене
Сделай игру

Как сделать хорошую игру отличной: сокращаем ожидание игрока

Одна из самых больших проблем в современных играх - бессмысленное и постоянное ожидание загрузки данных. И если, порой, это можно как-то объяснить, то, нередко, встречаются ситуации, когда ожидания можно и избежать. Разработчики разрабатывают игры, а вот выпускают из издатели. Разработчики - это про закрытие текущего набора задач, а издатели - это про деньги. И если контроль качества может выявить неверное поведение в игре, то он почти никогда не укажет на чрезмерное ожидание загрузки ли нового этапа или восстановление в точке возрождения. Если вам доводилось играть в Elden Ring и сражаться с Маленией, то, как никто другой знаете, что бой может закончиться очень быстро, а загрузка будет гарантированно медленной. Нередки случаи, когда загрузку ждёшь минуту, а сражаешься 10-20 секунд. И вот эти самые долгие и бессмысленные ожидания являются источником раздражения, ведь мы играем в игры, чтобы получать от процесса удовольствие, а не ожидать, пока очередной набор данных загрузится. К счас
Оглавление

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

Скорость и производительность
Скорость и производительность

В чём суть проблемы

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

Если вам доводилось играть в Elden Ring и сражаться с Маленией, то, как никто другой знаете, что бой может закончиться очень быстро, а загрузка будет гарантированно медленной. Нередки случаи, когда загрузку ждёшь минуту, а сражаешься 10-20 секунд.

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

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

Немного теории

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

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

Зная время загрузки данных и предельное время ожидание - можно получить главную метрику: рекомендованный предельный объём загружаемых данных.

Теперь, когда у нас есть некоторая метрика, от которой можно оттолкнуться, можно перейти к практическим советам, как ускорить игру.

Гибкая загрузка

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

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

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

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

Комнаты-переходы

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

Использование такого механизма порождает сразу несколько важных манёвров:

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

Замкнутые пространства

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

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

Загрузка во время кат-сцены

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

Тропа загрузки

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

Уточнение загрузки

Данный приём позволяет грузить ресурсы в несколько шагов. На первом грузится минимальный набор данных, обеспечивающих лишь общие контуры комнаты (скажем, низкополигональные изображения). Затем, неспеша прогружаются текстуры и высокополигональные фигуры - самое "тяжёлое". По мере загрузки данных, всё вокруг начинает принимать более ожидаемый внешний вид.

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

Заключение

По сути, главная задача любого разработчика сделать так, чтобы пользователь не ждал. Потому что ожидание наводит на грустные мысли (а может всё зависло?) и портит положительное впечатление от игрового процесса.

Более того, рассчитывать надо всегда на пользователя со "слабым железом"; на сильном железе всё будет и так "летать", но таких игроков, по статистике, всегда меньше.