Wie kann man Spiele spielbar machen, bevor sie vollständig heruntergeladen sind?

75

Diablo 3 und StarCraft 2 haben eine nette Funktion: Ich kann mit dem Spielen beginnen, bevor das vollständige Spiel oder Update heruntergeladen wurde.

Ich denke, Diablo 3 lädt obligatorische Dateien wie UI-Assets und einige Netze und Texturen herunter, die zuerst über mehrere Ebenen hinweg verwendet werden. Wenn ich ein Spiel starte, kann ich jedoch ein beliebiges Level auswählen, vorausgesetzt, ich habe entsprechende Spielstände. Ich habe beim Spielen noch nie eine Verzögerung davon erlebt - der Start ist immer sehr reibungslos.

Wie funktioniert das? Wie könnte ich eine ähnliche Funktion implementieren?

Nikitaschwarz
quelle
2
World of Warcraft auch: P
Kroltan
3
Wie können Webseiten angezeigt werden, bevor Sie die gesamten Webseiten herunterladen? Wie kann die Google Bildsuche eine unendliche Liste von Bildern anzeigen, ohne unendlich viel Zeit zum Herunterladen zu benötigen? Spiele sind anspruchsvoller, aber sie sind ziemlich ähnlich.
Lie Ryan
2
@LieRyan: In Bezug auf "Spiele sind anspruchsvoller" hat dieser Satz überhaupt keine Grundlage. Es kann Spiele geben, die anspruchsvoller sind, ebenso wie es Spiele gibt (und bei App-Stores, das ist die überwiegende Mehrheit der Software, die keine ernsthaften Probleme löst), die massiv weniger anspruchsvoll sind als eine massiv skalierbare Websuche, die Tausende von Servern verbreitet und verarbeitet und speichert täglich Milliarden von Benutzeranfragen. Und dann ist die Suche nur eine von vielen Funktionen für dieses Unternehmen. Überstehen Sie also die Lebensphase des Denkens, dass Spiele von Natur aus komplexer sind als "normale" Software.
Phresnel
1
@ jhocking: Sprichst du mit mir? (Wenn ja, besser @ <Benutzername> verwenden, damit ich benachrichtigt werde) Nein, nicht wirklich bitter. Als ich jünger war, dachte ich, dass Games-Dev der König des Hügels der Softwareentwicklung sein würde. Ich weiß es jetzt besser, besonders nach der Veröffentlichung einer Reihe von kommerziellen Quellcode-Spielen :) Es ist ein weit verbreitetes Missverständnis, das immer wieder auftaucht. Games-Dev sieht wirklich wie Elite aus, aber in Wirklichkeit ist es nur eine weitere Spezialisierung der Softwareentwicklung, genau wie Super Computing, Suchmaschinen, Bilderkennung, E-Mail-Marketing oder ERPs für große E.
Phresnel
1
Nur eine kurze Bemerkung, ich habe zu Hause eine schlechte Bandbreite ( Lebenshaltungskosten in einer ländlichen Gegend ) und das Spiel bleibt für mich unspielbar, obwohl es "spielbar" heißt. Ich muss auf "optimal" warten. Ansonsten muss ich 5 Minuten auf jeden Ladebildschirm warten, und die Verzögerung ist unwirklich. Daher wird zu diesem Zeitpunkt definitiv einiges heruntergeladen. Sie können wahrscheinlich selbst weitere Tests durchführen, indem Sie die Bandbreite begrenzen.
DoubleDouble

Antworten:

72

Assets wie Sound, Video, Modelle und Texturen machen den größten Teil des Downloads aus. Für jedes dieser Assets gibt es mehrere Versionen. Diese mehreren Versionen sollen verschiedene Grafikoptionen unterstützen.

Senden Sie zuerst die für eine niedrige Grafikoption erforderlichen Assets (die zufällig auch die kleinsten sind). Sie haben alles, was Sie brauchen, um das Spiel zu spielen, obwohl Sie nur ungefähr 15% des Gesamtvermögens haben, das für die Unterstützung aller Grafikoptionen benötigt wird.

Sie können dies testen, indem Sie StarCraft 2 erneut installieren. Spielen Sie es ab, sobald Sie zum Bildschirm mit den grafischen Optionen gelangen. Viele Optionen und Einstellungen sind nicht verfügbar.

ClassicThunder
quelle
24
Sie können die gleiche Technik auch auf ganze Karten oder Levels in Spielen mit entsprechender Linearität anwenden - laden Sie zuerst die ersten Levels herunter oder so. Guild Wars 2 hat beispielsweise nur Audio- und Startbereiche (plus ein bisschen mehr) auf der CD ausgeliefert.
Josh
12
Einige Spiele (z. B. Blizzard-Spiele) bieten auch die Möglichkeit, Assets auf Abruf basierend auf Ihrer aktuellen Position im Spiel herunterzuladen. Dies funktioniert ähnlich wie das oft asynchrone Streamen von Assets von der lokalen Festplatte, jedoch mit einer größeren Verzögerung, bevor angeforderte Assets bereit sind.
Crist
1
IIRC, Diablo 3 verwendet die von Josh Petrie beschriebene Methode - sie wird spielbar, sobald die Ressourcen vorhanden sind (möglicherweise nur die in dieser Antwort beschriebene Version von geringer Qualität), aber nur Akt I ist anfänglich spielbar. Das heißt, wenn Sie Ihre Internetverbindung ausreichend drosseln, müssen Sie anhalten und den Download aufholen lassen, nachdem Sie Akt I beendet haben.
Aaron Dufour,
1
Anders ausgedrückt, das Spiel kann technisch ausgeführt werden, sobald die ausführbare Datei installiert ist. Dies können nur einige Megabyte Daten sein. Wie weit Sie ins Spiel kommen, hängt davon ab, wie viele Assets verfügbar sind. Ein Spiel, das mit 20 GB installiert wird, verfügt über ca. 19.9999 GB Daten und 0.0001 GB ausführbaren Code. Solange das Laden von Daten aus dem Netzwerk fortgesetzt werden kann, kann das Spiel ausgeführt werden, wenn weniger als 1% der Installation abgeschlossen sind.
Phyrfox
1
@ Brian Schauen Sie sich den Bearbeitungsverlauf an. Es hat nichts von alledem gefragt, als ich die Antwort schrieb.
ClassicThunder
33

Ich habe dies einmal für MMOs implementiert. An einem Wochenende, als ich versuchte, WOW für meine Tochter zu installieren, vergingen 48 Stunden (Patches, Download-Fehler usw.), und ich beschloss, meine eigene bessere Lösung zu entwickeln.

Das Spiel benötigt normalerweise etwa 10 GB Daten, bevor es ausgeführt werden kann. Nicht alle Dateien werden sofort benötigt, aber Spiele haben gewartet, bis alle Dateien lokal vorhanden waren. Meine Lösung bestand darin, das Spiel wie gewohnt lokal laufen zu lassen, aber die EXE-Datei wurde (unter Verwendung eines Windows-Dateiminifilters) dazu verleitet, zu glauben, dass alle Dateien bereits vorhanden waren. Wenn eine angeforderte Datei nicht lokal war, wurde sie vom Dateisystem heruntergeladen und gespeichert. Das Spiel wurde bei Bedarf langsam lokal kopiert. Wenn Bandbreite verfügbar war, wurden die anderen noch nicht benötigten Dateien im Hintergrund übertragen. Dies funktionierte mit ALLEN Spielen, ohne dass neu kompiliert werden musste, da mein Minifilter-Treiber bei Bedarf Dateien erhielt.

Der schlimmste Nachteil war die Latenz. Meine Lösung bestand darin, ein kleines Markov-Kettenmodell zu erstellen, um vorherzusagen, welche Datei als Nächstes benötigt wird, und den Hintergrundlader zu priorisieren. Dies funktionierte wie ein Zauber und unser MMO konnte fast SOFORT ausgeführt werden, nachdem nur die EXE-Datei und einige Ladebildschirmdateien lokal waren (~ 20 MB). Wir konnten auf einen Link auf einer Webseite klicken und unser Spiel mit mehr als 10 GB in ca. 30 Sekunden ausführen . Wir hatten eine Trefferquote von 99%, das heißt, als das Spiel zum ersten Mal eine neue Datei benötigte, war sie bereits da!

Ich würde gerne jemand anderem helfen, dies umzusetzen.

Chris Mayer
quelle
5
+1 und Es wäre großartig, wenn Sie diesen Treiber teilen könnten, weil ich nach so etwas suchte und es selbst erstellen wollte, wie Sie es getan haben, aber wenn es bereits geschehen ist, würde ich es gerne verwenden.
Furkan Omay
5
Interessante Verwendung einiger ziemlich fortgeschrittener Technik. Sie sollten wirklich einen Blog-Beitrag darüber schreiben. :) Wie sehr haben die Techniken des maschinellen Lernens tatsächlich geholfen? Wie gut konnten sie vorhersagen, welche Dateien benötigt wurden?
Paul Manta
1
@FurkanOmay solche Dinge sind fast immer Firmeneigentum eines Arbeitgebers. Bitten Sie die Leute nicht, wahrscheinlich gegen die Bestimmungen ihrer Verträge zu verstoßen.
Jwenting
@jwenting Soweit ich weiß, war das, was er getan hatte, nicht für eine Firma, sondern für seine Tochter und für Spiele wie WoW. Ich frage nur höflich, niemand wird gezwungen. Er kann es einfach aus irgendeinem Grund ablehnen und alles wird in Ordnung sein. Ich habe gefragt, weil er gesagt hat, dass er gerne jemand anderem bei der Umsetzung helfen würde. Daher halte ich es nicht für eine schlechte Idee, zumindest nach einem Ausgangspunkt zu fragen, da ich bereits gesagt habe, dass ich bereit bin, dies von Grund auf umzusetzen Nach oben.
Furkan Omay
3

Auch in einigen Spielen werden Bereiche und Dateien der Endspielwelt verzögert, nur die obligatorischen Bereiche werden beibehalten und können auch installiert werden, während das Spiel noch gespielt wird.

Chantola
quelle
2

Um zusammenzufassen, was mehrere Leute gesagt haben, und vielleicht einige Informationen hinzuzufügen:

  • Der anfängliche Download ist klein, nur die Startdateien und der Download-Manager für den Rest. Es wäre schön, wenn Sie die Kontoerstellung, die Avatar-Erstellung und möglicherweise die Startzonen in diese Liste aufnehmen würden.
  • Während dies läuft, loggt sich der Benutzer ein und erstellt seine Avatare. Beginnen Sie zuerst mit dem Herunterladen anderer Inhalte, Zonen niedriger Stufe und allgemeiner Dateien (wie grundlegende Sounds und Texturen, verwenden Sie diese so oft wie möglich im gesamten Spiel).
  • Beginnen Sie, während der Benutzer die Ebenen durchläuft, bevor Sie Zonen und andere Inhalte herunterladen
  • Wenn der Benutzer Optionen auswählt, die heruntergeladen werden müssen, laden Sie zuerst Varianten mit niedriger Auflösung herunter. Laden Sie dann beim Spielen nach Bedarf Versionen mit höherer Auflösung herunter und ersetzen Sie die angezeigten Versionen mit niedriger Auflösung durch diejenigen, die gerade angezeigt werden. Auf diese Weise sieht der Benutzer etwas und nach und nach wird der volle Ruhm des Spiels offenbart (wenn er natürlich über genügend Bandbreite und Computerleistung verfügt).
  • Wiederholen, bis alles heruntergeladen ist


Dies bedeutet eine höhere Netzwerklast während des Spielens, bis der gesamte Inhalt lokal zwischengespeichert ist, aber eine geringere anfängliche Burst-Last auf Ihren Servern sowie eine kürzere und weniger frustrierende Wartezeit für Benutzer, während sie das Spiel zum ersten Mal herunterladen.
Wenn der Benutzer eine langsame Netzwerkverbindung hat, wird er beim Wechseln der Zone möglicherweise weiterhin die Meldung "Bitte warten, Inhalt wird geladen" erhalten (geben Sie diese an), oder Sie möchten die Bandbreite überprüfen, wenn Sie das Spiel zum ersten Mal starten und wenn der Download zu niedrig ist zuverlässig on the fly lassen sie ihn dort und dann mindestens die gesamte erste ebene warten (und dann wieder, wenn sie zonen betreten, die noch nicht vollständig heruntergeladen wurden).
Dies verhindert, dass der Benutzer mitten im eigentlichen Gameplay zurückbleibt, da seine Netzwerkverbindung blockiert wird.

jwenting
quelle