Не могли ли все игры избежать пост-стартовой загрузки?

23

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

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

Viziionary
источник
16
Обратите внимание, что во многих «бесшовных» играх с открытым миром есть время загрузки, когда игрок перемещается в непредсказуемое место. В отделе можно пройти от одного конца Нью-Йорка до другого, не загружая экран загрузки, в то время как быстрое перемещение к месту требует загрузки. Это все о знании, что загрузить дальше.
Фельсир
2
@Felsir Dungeon Siege сделал то же самое.
Мейсон Уилер
Например, Batman Arkham Origins использует загрузочные экраны непосредственно перед роликами и при входе в совершенно новые области. Его основанная на истории, прогрессивная природа хорошо себя зарекомендовала и дает пользователю естественный перерыв. Это работает особенно хорошо из-за очень обширных областей с активами очень высокой четкости. Было бы очень много времени для написания кода и тестирования этой функции для получения небольшой выгоды.
Кейси Кубалл
довести объем оперативной памяти до 128 ГБ. Создайте 64 ГБ или около того ОЗУ, загрузите вашу игру на ОЗУ. Время загрузки будет таким быстрым, что вы едва заметите их. Я перешел на SSD и время загрузки значительно сократилось. Обновление видеокарты, особенно для увеличения видео RAM.
Кибернард
Асинхронная загрузка занимает время, которое может варьироваться в зависимости от процессора и скорости диска. Вы не всегда можете быть уверены, что вещи будут загружены к тому времени, когда они вам понадобятся.
Алан Вулф

Ответы:

31

Ответ - да, это можно сделать, в большинстве случаев, по крайней мере, до некоторой степени.

Причин этого не много:

  • Это требует времени и денег, чтобы сделать это правильно.
  • Количество ошибок, которые пройдут тестирование, будет выше
  • Время загрузки принимается пользователями.
  • Могут быть и другие причины времени загрузки, например балансировка нагрузки на сервер.
  • Универсальные решения, которые можно купить с полки, более совместимы с «загрузить все сразу».
Питер - Унбан Роберт Харви
источник
В дополнение к точке «балансировки нагрузки на сервер», многие онлайн-игры, появляющиеся сегодня на рынке, имеют центральную область «хаба», которая является уникальной для вас, и никто другой не может получить к ней доступ. Довольно часто эти зоны размещаются за зоной нагрузки или зоной медленной ходьбы (например, BOO в «The Division»), чтобы они могли безопасно отобрать у вас экземпляр, в котором вы были ранее, и поместить вас в свой личный экземпляр. ,
SGR
7
Там также проблема памяти. Возможно, не удастся загрузить существующий уровень при сохранении текущего уровня в памяти (особенно для консолей или портативных устройств), поэтому вам придется использовать экран загрузки
Jezzamon
@Jezzamon Я думаю, что вся карта Скайрима никогда не хранится в памяти в любой момент времени. Может я не прав? Но если нет, то почему любая другая ситуация была бы неприменима к стратегиям динамической загрузки больших игровых карт с открытым миром?
Viziionary
Практически никто больше не катит собственный игровой движок с нуля. Они покупают движок (Unreal, Unity, CryEngine) и связку промежуточного программного обеспечения и склеивают его вместе. Базовые механизмы обычно не настроены для непрерывной потоковой передачи содержимого или для перезапуска без повторной загрузки. Подумайте, сколько раз вы умирали в игре, только чтобы столкнуться с 60-секундной загрузкой, несмотря на то, что ресурсы и уровень уже были загружены. Причины, приведенные @Peter, - это также причины, по которым вы не видите игры, позволяющие начать играть в них, пока вы все еще очень часто загружаете ресурсы.
Том Б,
2
Уровни @Viziionary обычно многократно используют текстуры, а другой уровень использует другой набор текстур. Уровень подземелья будет использовать множество текстур стен подземелья, уровень пустыни будет использовать текстуры песка и скалы пустыни, уровень горы будет использовать текстуры камня, травы и снега и т. Д. Для игр, где это верно, выгрузка половины уровня при одинаковом уровне текстуры, используемые по всему уровню, освободят лишь небольшую часть используемой памяти (или выгрузят текстуры, которые вам все еще нужны).
Питер - Унбан Роберт Харви
10

Если в вашем меню содержится масса ресурсов, эти ресурсы требуют времени для загрузки. Вы также не знаете, в каком порядке люди будут перемещаться по вашему меню. Они могут щелкнуть «Параметры» -> «Назад» -> «Кредиты» или «Кредиты -> Назад» -> начать игру в быстрой последовательности. Так что нет разумной стратегии потоковой передачи.

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

Almo
источник
Почему бы не расставить приоритеты при загрузке тяжелого / часто используемого меню? В любой РПГ, если я открываю меню, то 90% времени нужно оборудовать чем-то, что я нашел, или использовать предмет. Вы можете начать с этого меню. Или начните с меню, загрузка которого занимает 5 минут, и сбросьте загрузку, если пользователь выйдет из меню.
DrakaSAN
1
@DrakaSAN Но это часто оптимизируется. Даже оригинальный Diablo показал вам инвентарь на месте. Подход «жди всего», похоже, возродился в современных консолях, которые были очень ограничены в памяти по сравнению с ПК. А так как многие игры, как на ПК, так и на консоли, портированы console-> PC, некоторые ограничения консоли наследуются в процессе. Сравните Diablo III или Divinity со Skyrim или Dark Souls - различия довольно очевидны.
Луаан
2
Является ли медленная загрузка меню реальной проблемой в играх? Нет.
Алан Б
@AlanB, только если единственный доступ к расходным материалам - через это меню. Посмотрите Destiny на Xbox 360 / PS3 и узнайте, сколько времени занимает использование пакета с боеприпасами по сравнению с версиями XB1 / PS4.
SGR
1
@ SGR Я собирался использовать Destiny на PS4 в качестве примера меню с недопустимо долгим временем загрузки, я не могу себе представить, насколько он хуже на консолях последнего поколения.
IllusiveBrian
5

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

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

Конечно, вы сказали «без изменения среды», но я просто хотел привести пример Halo , потому что это то, что я хотел бы увидеть больше.

В рамках непрерывной кампании или когда разработчик имеет большой контроль над местоположением игрока, такое решение, безусловно, жизнеспособно, как вы говорите. Naughty Dog любит покончить со временем загрузки, Jak и Daxter, как известно, не имеют времени загрузки на PS2, а Uncharted игры имеют одно время загрузки в начале.

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

Jibb Smart
источник
3
У Джейка и Дакстера время загрузки. Они просто спрятаны за дверями, аналогично лифтам ME1 и тому, как они скрывают время загрузки.
Nzall
2
Но время загрузки скрыто за S-кривых залами и такой не чувствует , как время загрузки.
Almo
Если я правильно понимаю, карты открытого мира, такие как Skyrim, не загружаются в память, просто куски, которые пользователь должен видеть немедленно, поэтому не могли бы вы предварительно загрузить небольшие начальные части всех (20?) Карт? При правильной оптимизации картографических данных кажется, что фактическое использование ОЗУ не представляет большой проблемы с точки зрения современного объема ОЗУ, даже на мобильных устройствах. Я думаю, именно мощь рендеринга видеокарты мешает большинству игр ... Мне кажется, что вы можете загрузить начальные области всех этих карт гало для пользователя, а затем визуализировать выбранную, отбрасывая остальную часть из памяти.
Viziionary
1
Карты - это не то, что загружается вечно - это огромные текстуры, файлы моделей, шейдерные программы и т. Д., Которые специфичны для уровня или области.
Том Б,
3

Время.

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

Vaillancourt
источник
2

В конечном итоге, это ограниченные ресурсы.

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

Некоторые вещи все еще непредсказуемы, даже при тщательном дизайне. Например, игроки могут носить нестандартные баннеры, которые показываются только после отправки соответствующих данных на ваш компьютер по сети. Конечно, большинство игр пытаются ограничить это, чтобы сделать его более дешевым (например, баннеры Diablo III представляют собой простые композиции, которые легко отправлять как можно меньше байтов данных). Но, в конечном счете, иногда вам просто нужно дождаться получения данных. И вам нужно что- то показывать во время загрузки - во многих играх это может привести к перерыву в погружении, когда вы видите серую модель с низкой детализацией, отображаемую в ожидании загрузки данных.

И со всем этим, загрузка, как это - решенная проблема (TM), но это не облегчает. Это требует больших ресурсов и времени, как для оптимизации ресурсов, так и для их использования для обеспечения беспрепятственного воспроизведения, а также для самого кода - асинхронный код сложен. Это также может означать уменьшение игрового опыта, даже если все идет хорошо - это означает, что вы должны убедиться, что вы не пересекаете пропускную способность вашего наименьшего общего знаменателя, поэтому вам нужно снизить качество моделей и текстур или сделать их менее разнообразны, а геометрия ваших миров строго ограничена. Если вы этого не сделаете, игра будет довольно непригодной для игры - хотя я помню людей, которые играли в игры, для загрузки которых потребовалось 10 минут (или даже больше!), Просто потому, что их компьютер не вполне справлялся с задачей, игра Сам после этого нормально работает. Если бы вместо этого была бесшовная загрузка, игра просто замерзала бы или показывала уродливые текстуры и модели все время, ожидая загрузки данных. Отложенная загрузка не является беспроигрышной, это компромисс, как и большинство вещей в разработке :)

Luaan
источник
2

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

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

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

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

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

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

ковыляет
источник
2

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

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

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

А теперь представьте быстрое путешествие. Нет абсолютно никакого способа предсказать, куда пользователь может пойти. У них есть (обычно) почти вся карта на выбор. Предварительная загрузка всех возможных мест быстрого перемещения заняла бы слишком много памяти (в первую очередь вы могли бы также загрузить всю карту в память) и слишком много времени (при условии, что у вас не была предварительно загружена вся карта). Когда это произойдет? Когда они открывают диалог быстрого перемещения? Проблема станет только в несколько раз хуже!

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

Теперь представьте, что это применимо к игровым ресурсам в целом, где отношения часто не очевидны. В конечном итоге вам придется либо загрузить все возможные варианты, либо начать гадать, что собирается делать пользователь. Гадание является дорогостоящим (как в разработке, так и в процессоре) и сложным беспорядком для программирования. Конкретные примеры:

  • Сохранение файлов: вам нужно будет загрузить каждый файл сохранения до того, как пользователь достигнет экрана сохранения, или угадать, какой файл он может загрузить (последние 5 и т. Д.).
  • Интерфейс: Многие стратегические игры меняют свой интерфейс в зависимости от вашей фракции. Вам нужно будет загрузить все возможные дизайны пользовательского интерфейса, прежде чем пользователь начнет свою игру.
  • Игровой мир: в процедурно сгенерированных играх, таких как Minecraft или RTS, таких как Civilization, мир не существует, пока его не увидят, в разной степени. Предварительная загрузка это невозможно, так как они не существовали с самого начала; их предварительный расчет в лучшем случае можно выполнить аналогично предварительной загрузке, что не применимо в случае RTS.

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

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

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


источник
1

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

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

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

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

Корт Аммон - Восстановить Монику
источник