Как сделать игры играбельными до их полной загрузки?

75

У Diablo 3 и StarCraft 2 есть приятная особенность: я могу начать играть до полной загрузки игры или обновления.

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

Как это работает? Как я мог реализовать подобную функцию?

nikitablack
источник
2
World of Warcraft тоже: P
Kroltan
3
Как можно просматривать веб-страницы, прежде чем загружать все веб-страницы? Как поиск картинок Google может представить бесконечный список изображений без использования бесконечного времени для загрузки? Игры более сложные, но они очень похожи.
Ли Райан
2
@LieRyan: Что касается «игр более изощренных», эта фраза не имеет никакого основания. Могут быть игры, которые являются более сложными, так же как есть (и, глядя на магазины приложений, это подавляющее большинство программного обеспечения, которое не решает серьезных проблем), игры, которые в целом менее сложны, чем массово масштабируемый веб-поиск, который распространяется на тысячи серверов и обрабатывает и хранит миллиарды пользовательских запросов каждый день. И затем, поиск - только одна из многих функций для этой компании. Поэтому, пожалуйста, пройдите жизненный этап, думая, что игры по своей сути более сложны, чем «нормальное» программное обеспечение.
Френел
1
@jhocking: Ты говоришь со мной? (если так, лучше используйте @ <username>, так что я буду уведомлен) Нет, не очень горько. Когда я был моложе, я думал, что games-dev будет королем холма разработки программного обеспечения. Я просто лучше знаю, особенно после выпуска ряда исходных кодов коммерческих игр :) Это распространенное заблуждение, которое повторяется, чтобы всплыть. Games-Dev на самом деле выглядит как Elite, но на самом деле это просто еще одна специализация разработки программного обеспечения, такая как Super Computing, поисковые системы, распознавание изображений, Email-маркетинг или ERP для больших E.
Френель
1
Просто быстрый комментарий, у меня дома плохая пропускная способность ( стоимость жизни в сельской местности ), и игра для меня остается неиграбельной, даже несмотря на то, что она говорит «играбельно». Я должен ждать "оптимального". В противном случае я застреваю в ожидании 5 минут для каждого экрана загрузки, и задержка нереальна, так что это определенно загрузка некоторых вещей в то время. Возможно, вы сможете провести дополнительное тестирование самостоятельно, ограничив пропускную способность.
DoubleDouble

Ответы:

72

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

Посылая ресурсы, необходимые для опции низкого графического изображения вначале (которые также оказываются самыми маленькими). У вас есть все, что нужно для игры, несмотря на то, что у вас есть всего 15% от общего объема активов, необходимых для поддержки каждого графического варианта.

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

ClassicThunder
источник
24
Вы также можете применить ту же технику ко всем картам или уровням в играх с соответствующей линейностью - сначала загрузите первые уровни или что-то в этом роде. Например, в Guild Wars 2 поставляются только аудио и начальные области (плюс немного больше) на диске.
Джош
12
Некоторые игры (например, игры Blizzard) также имеют возможность загружать ресурсы по запросу в зависимости от вашего текущего местоположения в игре. Это похоже на то, как активы часто асинхронно передаются с локального жесткого диска, но в этом случае с большей задержкой, прежде чем запрашиваемые активы будут готовы.
bcrist
1
IIRC, Diablo 3 использует метод, описанный Джошем Петри - он становится доступным для воспроизведения, как только ресурсы (возможно, только некачественная версия, как описано в этом ответе), но только Act I изначально воспроизводимы. То есть, если вы достаточно ограничите свое интернет-соединение, вы будете вынуждены остановиться и позволить загрузке завершиться после окончания акта I.
Аарон Дюфур
1
Иными словами, технически игра может запускаться сразу после установки исполняемого файла . Это может быть всего пара мегабайт данных. Как далеко вы можете войти в игру, зависит от того, сколько активов доступно. Игра, которая устанавливается в 20 ГБ, имеет около 19,9999 ГБ данных и 0,0001 ГБ исполняемого кода; до тех пор, пока он может продолжать загружать данные из сети, игра может выполняться с менее чем 1% завершения установки.
phyrfox
1
@ Брайан Посмотрите на историю редактирования. Он не спросил ничего из этого, когда я написал ответ.
ClassicThunder,
33

Я однажды реализовал это для ММО. Однажды на выходные, когда я пытался установить WOW для моей дочери, ушло 48 часов (исправления, ошибки загрузки и т. Д.), Поэтому я решил найти собственное лучшее решение.

Для запуска игры обычно требуется 10 ГБ данных. Не все файлы на самом деле нужны сразу, но игры привыкли ждать, пока все файлы не появятся локально. Мое решение состояло в том, чтобы игра работала локально, как обычно, но EXE обманом (используя минифильтр файлов Windows) решил, что все файлы уже присутствуют. Когда запрашиваемый файл не был локальным, файловая система загрузила его и сохранила. Игра медленно копировалась локально по мере необходимости. Когда была доступная полоса пропускания, другие, пока не нужные, файлы добавлялись в фоновом режиме. Это работало со ВСЕМИ играми без необходимости перекомпиляции, потому что мой драйвер минифильтра получил файлы при необходимости.

Худшим недостатком была задержка. Моим решением было создать небольшую модель цепочки Маркова, чтобы предсказать, какой файл может понадобиться дальше, и установить приоритет для фонового загрузчика. Это работало как чудо, и наша MMO могла работать почти НЕМЕДЛЕННО после того, как только EXE-файл и несколько файлов с экрана загрузки были локальными (~ 20 МБ). Мы смогли щелкнуть ссылку на веб-странице и запустить нашу игру объемом более 10 ГБ примерно за 30 секунд . У нас был коэффициент попадания 99%, то есть, когда игре понадобился новый файл, он уже был там!

Я был бы рад помочь кому-либо еще реализовать это.

Крис Майер
источник
5
+1 и было бы здорово, если бы вы могли поделиться этим драйвером, потому что я искал что-то подобное и собирался создать его сам, как вы, но если это уже сделано, я с радостью воспользуюсь им.
Фуркан Омай
5
Интересное использование довольно продвинутой техники. Вы действительно должны написать в блоге об этом. :) Насколько действительно помогли методы машинного обучения? Насколько хорошо они могли предсказать, какие файлы были необходимы?
Пол Манта
1
@FurkanOmay такие вещи почти всегда являются собственностью какого-либо работодателя. Не просите людей, вероятно, нарушать условия их контрактов.
воскресенье,
@jwenting Насколько я понимаю, то, что он сделал, было сделано не для компании, а для его дочери и для таких игр, как WoW. Я просто вежливо спрашиваю, никто не принужден. Он может просто отказаться по любой причине, и все будет хорошо. Я спросил, потому что он сказал: «Он был бы рад помочь кому-либо еще реализовать это», поэтому я не думаю, что просить хотя бы отправную точку - это не плохая идея, так как я уже сказал, что готов реализовать это с нуля. вверх.
Фуркан Омай
3

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

Chantola
источник
2

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

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


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

jwenting
источник