Як можна зробити ігри грати до їх повного завантаження?


75

Diablo 3 та StarCraft 2 мають гарну особливість: я можу почати грати до завершення завантаження повної гри або оновлення.

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

Як це працює? Як я міг реалізувати подібну функцію?


2
World of Warcraft також: P
Кролтан

3
Як відображаються веб-сторінки, перш ніж завантажувати всі веб-сторінки? Як пошук зображень Google може представляти нескінченний список зображень, не використовуючи нескінченний час для завантаження? Ігри більш складні, але вони досить схожі.
Лі Лі Райан

2
@LieRyan: Що стосується "Ігри складніші", ця фраза взагалі не має основи. Можливо, є ігри, які є більш досконалими, так само є (і дивлячись на магазини додатків, це переважна більшість програмного забезпечення, яке не вирішує серйозних проблем) ігри, які є менш складними, ніж масово масштабований веб-пошук, який розповсюджує тисячі серверів і щодня обробляє і зберігає мільярди запитів користувачів. І тоді пошук - це лише одна з багатьох особливостей для цієї компанії. Тому, будь ласка, перегляньте життєву фазу, думаючи, що ігри за своєю суттю складніші, ніж "звичайні" програми.
френель

1
@jhocking: Ти говориш зі мною? (якщо так, то краще скористайтеся @ <ім'ям користувача>, щоб мене повідомили) Ні, не дуже гіркий. Коли я був молодшим, я думав, що ігри-розробники будуть королем пагорба програмної інженерії. Я просто краще знаю зараз, особливо після виходу ряду вихідного коду комерційних ігор :) Це поширене неправильне уявлення, яке повторюється, щоб спливати. Games-Dev насправді виглядає як Elite, але насправді це лише чергова спеціалізація розробки програмного забезпечення, як суперкомп'ютер, пошукові системи, розпізнавання зображень, маркетинг електронної пошти або ERP для великих E.
phresnel

1
Лише швидкий коментар: у мене погана пропускна здатність вдома ( вартість життя в сільській місцевості ), і гра залишається для мене неможливою, хоча вона каже: "граюча". Доводиться чекати "оптимального". Інакше я затримався, чекаючи 5 хвилин на кожен завантажувальний екран, і затримка нереальна, тому його обов'язково завантажують деякі речі на той час. Можливо, ви можете зробити додаткові тестування самостійно, обмеживши пропускну здатність.
DoubleDouble

Відповіді:


72

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

Надіславши спочатку активи, необхідні для низької графічної опції (що також буває найменшим). У вас є все необхідне для гри, незважаючи на те, що у вас є лише 15% або близько загальних активів, необхідних для підтримки кожної графічної опції.

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


24
Ви також можете застосувати ту саму техніку до цілих карт або рівнів в іграх з відповідною лінійністю - спочатку завантажте перші рівні чи щось. Наприклад, Guild Wars 2 постачає на диску лише звукові та початкові області (плюс трохи додатково).
Джош

12
Деякі ігри (наприклад, ігри Blizzard) також мають можливість завантажувати активи за потребою, виходячи з вашого поточного місцезнаходження в грі. Це дуже схоже на те, як активи часто асинхронно передаються з локального жорсткого диска, але в цьому випадку з більшою затримкою, перш ніж запитувані активи стануть готовими.
bcrist

1
IIRC, Diablo 3 використовує метод, описаний Джошем Петрі - він стає відтворюваним, як тільки ресурси (можливо, лише низькоякісна версія, описана в цій відповіді), але спочатку відтворюється лише акт I. Тобто, якщо ви достатньо перестанете підключатись до Інтернету, ви змушені будете зупинитися і дозволити завантаження наздогнати після закінчення Закону I.
Аарон Дюфур

1
Заявлений іншим способом, гра може технічно запускатися, як тільки встановлений виконуваний файл . Це може бути лише пара мегабайт даних. Наскільки далеко ви можете потрапити в гру, залежить від кількості активів. Гра, яка встановлюється в 20 Гб, має близько 19,9999 ГБ даних та 0,0001 ГБ виконуваного коду; до тих пір, поки вона може продовжувати завантажувати дані з мережі, гра може працювати з менш ніж 1% завершеної установки.
фірфокс

1
@Brian Подивіться історію редагування. Коли я написав відповідь, він нічого не запитував.
ClassicThunder

33

Я одного разу реалізував це для ММО. Один з вихідних під час спроби встановити WOW для моєї дочки зайняв 48 минулих годин (патчі, помилки завантаження тощо), тому я вирішив зробити власне краще рішення.

Гра зазвичай вимагає сказати 10 Гб даних, перш ніж вона запуститься. Не всі файли насправді потрібні одразу, але ігри використовували, щоб чекати, поки всі файли не знайдуться локально. Моє рішення полягало в тому, щоб гра запускалася локально як нормально, але EXE надумав (використовуючи мініфільтр файлів Windows), думаючи, що всі файли вже присутні. Коли запитуваний файл був не локальним, файлова система завантажила його та зберегла. Гра повільно копіювалася локально за потребою. Коли була доступна пропускна здатність, інші ще не потрібні файли проскакували у фоновому режимі. Це працювало з ВСІМ іграми без необхідності перекомпілювати, тому що мій драйвер minifilter отримав файли, коли це було потрібно.

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

Я був би радий допомогти будь-кому іншому здійснити це.


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

5
Цікаве використання якоїсь досить передової техніки. Ви дійсно повинні написати про це повідомлення в блозі. :) Наскільки насправді допомогли методи машинного навчання? Наскільки добре вони могли передбачити, які файли потрібні?
Пол Манта

1
@FurkanOmay, такі речі майже завжди є власністю компанії когось роботодавця. Не просіть людей, ймовірно, порушувати умови своїх договорів.
jwenting

@jwenting З того, що я розумію, те, що він робив, було не для компанії, а для його дочки та для ігор, як WoW. Я просто ввічливо прошу, нікого не змушують. Він може просто відмовитись з будь-якої причини і все буде добре. Я запитав, тому що він сказав: "Він буде радий допомогти комусь іншим здійснити це", тому я не думаю, що просити хоча б відпрацьову точку не є поганою ідеєю, оскільки я вже сказав, що я готовий реалізувати це з першого боку. вгору
Фуркан Омай

3

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


2

Підсумовуючи сказане кількома людьми та, можливо, додайте трохи інформації:

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


Це буде означати більшу завантаженість мережі під час гри, поки весь вміст не буде кешовано локально, але менша початкова завантаженість ваших серверів, а також коротше і менш розчарування очікують користувачів, коли вони спочатку завантажують гру.
Звичайно, якщо користувач має повільне мережеве з'єднання, він все одно може отримувати повідомлення "будь ласка, зачекайте, завантажуйте вміст" (надайте такі) під час перемикання зон, або ви можете перевірити пропускну здатність при початковому запуску гри та якщо занадто низька для завантаження надійно на льоту, зачекайте його, а потім принаймні весь перший рівень (а потім знову при введенні зон, які ще не повністю завантажені).
Це запобігає затримці користувача в середині фактичного ігрового процесу, оскільки його мережеве з'єднання забуває.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.