3 июля 2023 3.07.23 53 10K

Неравномерная полоска загрузки в играх — фейк, уверяют разработчики

Вы когда-нибудь задумывались, почему полоска загрузки в играх почти всегда заполняется рывками? Потому что разработчики вас обманывают — она должна двигаться равномерно!

Всё началось с твита комика Аласдера Беккет-Кинга (Alasdair Beckett-King):

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

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

Рауль Рубио Мунаррис (Raúl Rubio Munárriz), разработчик Sexy Brutale и Song of Nunu

Я никогда не работал над игрой, где не было поддельной полоски загрузки. Настоящие вызывают тревогу. Может быть, поэтому я их так не люблю и всегда настаиваю на плавном переходе или, когда другого выбора нет, заставке со значком загрузки в стиле уробороса (обычно вращающимся).

Майк Бителл (Mike Bithell), разработчик John Wick Hex и Thomas Was Alone

Забавный факт: игроки не доверяют плавной полоске загрузки. Рывки и паузы показывают, что загрузка как будто настоящая. Я трудился над играми, в которых мы искусственно имитировали это.

Рами Исмаил (Rami Ismail), инди-активист и сооснователь Vlambeer

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

Владимир Богданич (Vladimir Bogdanić), разработчик Eyes in the Dark

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

Грег Стрит (Greg Street), разработчик Age of Empires и World of Warcraft

При загрузке случайных карт в Age of Empires я писал в коде что-то типа «а теперь переместись на 20 % вперёд», чтобы полоска выглядела правдопободно.

Майк Дэйлли (Mike Dailly), разработчик Lemmings и оригинальной Grand Theft Auto

Я никогда не подделывал полоску загрузки. Наоборот, я изо всех сил пытался сделать её как можно более «правильной» и плавной… Возможно, потому, что я всегда ненавидел Windows, где загрузка целую вечность висела на 20 %, а затем прыгала на 100 %. Поэтому я стараюсь так не делать.

Можно подумать, полоска постепенно (или рывками?..) уходит в прошлое благодаря SSD. Накопитель действительно помогает почти избавиться от загрузок, однако требования современных игр тоже не стоят на месте. Так что пока разработчики продолжат нас обманывать!


Поддержи Стопгейм!

Лучшие комментарии

— «Давайте исправим пару багов?»

— «Не, лучше прикрутим имитацию неравномерной загрузки!»

Сейчас я вам приоткрою тайну.
Загрузка в игре — процесс сильно нелинейный.
В нее входят:
* чтение с диска
* распаковка и другие преобразования прочитанных данных
* десериализация объектов
* заполнение внутренних структур
* разметка квестовых стадий, положений
* и еще куча всего, в зависимости от сложности игры, продвинутости/кринжовости движка, et cetera, et cetera

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

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

«я по сути писал в коде: А теперь дойди до 20%»

Скажем, декодирование глобальной карты занимает условно 20% в среднем условных попугаев в процессе загрузки и возвращает готовый к использованию объект. Значит, есть два варианта: или инкрементировать прогресс бар сразу после окончания декодирования на эти 20%, или переписать функцию декодирования так, чтобы она время от времени дергала коллбэк прогрессбара, отчитываясь о том, сколько она успела обработать.
Второе, конечно же, сложнее.

Кстати, каждая стадия тоже не всегда линейна, даже простое чтение с диска или копирование в памяти. А еще стадия может делиться на подстадии, и так далее.То есть, «простой» прогрессбар — на деле оказывается замороченным графом.

Думаю, тут уже становится ясно, что совершенно правильно

«геймеры не верят в загрузку с равномерной скоростью»

Подходы к отображению прогрессбара тоже разнятся.
Кто-то крутит циклическую анимацию, потому что это проще, ее можно вообще крутить в отдельном потоке.
Кто-то заморачивается и показывает нормированную полоску, как SeriousSam.
Некоторые подробно показывают отдельные стадии, как V Rising.

Ну а иные вообще игрока за человека не считают (или считают, но за очень тупого), и ограничиваются надписью, типа «Loading…».

Что из это следует?
Полоса — не ложная. Она — сложная.

©

Загрузка рывками просто писец как бесила, особенно в начале 2000х, когда можно было несколько часов просидеть за установкой игры или проги. И вот встанет она в таком ступоре и стоит, а ты сиди и втыкай грузит она или опять зависла, а ты сидишь и ждёшь, как дурак, когда же она загрузится. Потом психонешь, зайдешь в диспетчер задач и да, прога таки опять «не отвечает». И ладно, если это ещё полоска, или проценты, по ним хоть понять можно, сколько примерно ещё осталось, а если это долбаный ураборос, то это амба, он просто крутится и все, а сколько он ещё будет так крутится, час, два, день, а может вообще просто опять завис, фиг его знает. Но, больше всего бесило, когда загрузка вообще никак не отображалась, вот просто втыкаешь в экран с картинкой и все. А грузит она, не грузит, а может может вообще нафиг тебя послала, кто его знает.

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

Пример:

loadCharacter(char1)

loadStatus++

loadScene(scene1)

loadStatus++

moveCharacter(char1)

loadStatus++

После каждой функции мы добавили увеличение счётчика, но функции не одинаковые по сложности, а соответственно и по времени выполнения. И если мы можем предположить, что передвинуть персонажа всегда одинаково быстро, то для разных сцен/персонажей время загрузки разное, — счётчик не подгонишь. А внутрь каждой такой функции добавлять счётчик, что почти всегда невозможно, — с ума сойдёшь от рутинности, бессмысленности и количества лишних часов(денег) на разработку. Не станет никто заниматься такой фигнёй ради полоски загрузки, всё равно ничего не выйдет.

Это достаточно давно известный прием в сфере UI/UX и применяется не только в играх, а в принципе повсеместно в разработке любого ПО.

Были даже определение исследования, в которых проводили для пользователей тесты с равномерной «настоящей» полосой загрузки (отображающей реальный прогресс) и «фейковой» полосой (грузящейся ровно то же время, но неравномерно отображающей результат, например достаточно быстро доходящей до 70-80% и замедляющейся ближе к финалу). В большинстве случаев испытуемые отдавали предпочтение второй, ибо им казалось, что загрузка происходит быстрее.

В UI/UX сфере в принципе хватает таких подвязанных на восприятие и человеческую психологию трюков.

Если анимация крутится — игра не зависла. По надписи и этого не определишь.

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

Серия Assasins Creed

Можно подумать, полоска постепенно (или рывками?..) уходит в прошлое благодаря SSD. Накопитель действительно помогает почти избавиться от загрузок, однако требования современных игр тоже не стоят на месте. Так что пока разработчики продолжат нас обманывать

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

Так что в обозримом будущем мы вряд ли куда-нибудь денемся от нее)

Вы ещё скажите, что когда мышкой туда-сюда водишь, загрузка не ускоряется!?

А почему именно в ней? Я играл только в скайрим, но там были обычные заставки с советами + уровень персонажа. Ничего особенного в этом нет. Даже советы не полистать. Глянул 4 часть, там тоже самый обычный подход.

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

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

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

Я, честно говоря, уже её давно не видел. Везде гифка в углу.

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

Туда сюда это если прогресс бар, если крутилка то нужно круговые движения совершать)

«Полоска — это просто графический элемент», в принципе после этого можно не продолжать диалог. Вам ниже уже расписали сложность процесса и сложность сборки этого всего в плавный «просто графический элемент» (:

Вся моя жизнь была ложью...

Ноуп. Лучший экран загрузки вышел в 2007. В первом Assasins Creed.

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

Так это ты полоса загрузки?..

Читай также