Comment rendre les jeux jouables avant qu'ils soient complètement téléchargés?

75

Diablo 3 et StarCraft 2 ont une fonctionnalité intéressante: je peux commencer à jouer avant le téléchargement complet du jeu ou de la mise à jour.

J'imagine que Diablo 3 télécharge des fichiers obligatoires, tels que des ressources d'interface utilisateur, ainsi que des maillages et des textures utilisés à plusieurs niveaux. Cependant, lorsque je commence une partie, je peux choisir le niveau que je veux, en supposant que je dispose des sauvegardes appropriées. Je n'ai jamais connu de décalage de ce type lorsque je joue - le démarrage est toujours très facile.

Comment cela marche-t-il? Comment pourrais-je implémenter une fonctionnalité similaire?

nikitablack
la source
2
World of Warcraft également: P
Kroltan
3
Comment les pages Web peuvent-elles être visualisées avant de télécharger l'intégralité des pages Web? Comment Google Recherche d'images peut-il présenter une liste infinie d'images sans utiliser le temps infini pour télécharger? Les jeux sont plus sophistiqués mais ils sont assez similaires.
Lie Ryan
2
@LieRyan: En ce qui concerne "Les jeux sont plus sophistiqués", cette phrase n'a aucun fondement. Il peut y avoir des jeux plus sophistiqués, tout comme il existe (et dans les magasins d'applications, c'est la grande majorité des logiciels qui ne résolvent pas les problèmes sérieux), des jeux beaucoup moins sophistiqués qu'une recherche Web massivement évolutive qui répartit des milliers de serveurs et gère et stocke des milliards de demandes d'utilisateurs chaque jour. Et puis, la recherche n'est que l'une des nombreuses fonctionnalités de cette société. Passez donc à la phase de réflexion selon laquelle les jeux sont par nature plus complexes que les logiciels "normaux".
phresnel
1
@ jhocking: Es-tu en train de me parler? (Si c'est le cas, utilisez @ <nom d'utilisateur>, je serai averti) Non, pas vraiment amer. Quand j'étais plus jeune, je pensais que games-dev serait le roi de la colline du génie logiciel. Je sais juste mieux maintenant, surtout après la publication d’un certain nombre de codes sources de jeux commerciaux :) C’est une idée fausse commune qui se répète. Games-Dev ressemble vraiment à Elite, mais en réalité il ne s'agit que d'une autre spécialisation du développement logiciel, tout comme le superinformatique, les moteurs de recherche, la reconnaissance d'images, le marketing par courriel ou les ERP pour les grands E.
Phresnel
1
Juste un petit commentaire, la bande passante chez moi est faible ( coût de la vie en zone rurale ) et le jeu reste injouable pour moi même s’il dit «jouable». Je dois attendre "optimal". Sinon, je suis bloqué à attendre 5 minutes pour chaque écran de chargement et le décalage est irréel, donc il est certain de télécharger des fichiers à ce moment-là. Peut probablement faire d'autres tests par vous-même en limitant votre bande passante.
DoubleDouble

Réponses:

72

Les éléments tels que le son, la vidéo, les modèles et les textures constituent la majorité du téléchargement. Il existe plusieurs versions pour chacun de ces éléments. Ces versions multiples doivent prendre en charge diverses options graphiques.

En envoyant d’abord les ressources nécessaires pour une option à faible graphique (qui sont aussi les plus petites). Vous avez tout ce dont vous avez besoin pour jouer au jeu, même si vous ne disposez que de 15% environ du total des ressources nécessaires pour prendre en charge toutes les options graphiques.

Vous pouvez le tester en réinstallant StarCraft 2. Jouez-le dès qu'il vous permettra d'accéder à l'écran des options graphiques. De nombreuses options et paramètres seront indisponibles.

ClassiqueThunder
la source
24
Vous pouvez également appliquer la même technique à des cartes ou à des niveaux entiers dans des jeux avec une linéarité appropriée - téléchargez les premiers niveaux en premier, ou quelque chose du genre. Par exemple, Guild Wars 2 ne contient que des zones audio et des zones de départ (plus un peu plus) sur le disque.
Josh
12
Certains jeux (comme les jeux Blizzard) permettent également de télécharger des ressources à la demande, en fonction de votre position actuelle dans le jeu. Cela fonctionne un peu comme si les actifs étaient souvent transmis de manière asynchrone à partir du disque dur local, mais dans ce cas avec un délai plus long avant que les actifs demandés soient prêts.
bcrist
1
IIRC, Diablo 3 utilise la méthode décrite par Josh Petrie - elle devient jouable dès que les ressources (éventuellement la version de qualité inférieure décrite dans cette réponse), mais seul l’acte I est jouable au départ. C'est-à-dire que si vous étranglez suffisamment votre connexion Internet, vous serez obligé de vous arrêter et de laisser le téléchargement se terminer après l'acte I.
Aaron Dufour
1
En d'autres termes, le jeu peut être exécuté techniquement dès que le fichier exécutable est installé. Cela peut ne représenter que quelques mégaoctets de données. La distance à laquelle vous pouvez entrer dans le jeu dépend du nombre d’actifs disponibles. Un jeu installé dans une mémoire de 20 Go contient environ 19,9999 Go de données et 0,0001 Go de code exécutable. tant qu'il peut continuer à charger des données du réseau, le jeu peut fonctionner avec moins de 1% d'installation terminée.
phyrfox
1
@Brian Regardez l'historique d'édition. Il n'a demandé aucune de ces choses lorsque j'ai écrit la réponse.
ClassicThunder
33

Une fois, j'ai implémenté ceci pour les MMO. Une fin de semaine alors que je tentais d’installer WOW pour ma fille prenait 48 heures (corrections, erreurs de téléchargement, etc.), j’ai donc décidé de créer ma propre meilleure solution.

Le jeu a généralement besoin de dire 10 Go de données avant de fonctionner. Tous les fichiers ne sont pas réellement nécessaires immédiatement, mais les jeux attendaient jusqu'à ce que tous les fichiers soient localement présents. Ma solution était de faire tourner le jeu localement comme d'habitude, mais l'EXE a été dupé (en utilisant un minifiltre de fichier Windows) en pensant que tous les fichiers étaient déjà présents. Lorsqu'un fichier demandé n'était pas local, le système de fichiers le téléchargeait et le sauvegardait. Le jeu a été lentement copié localement selon les besoins. Quand il y avait de la bande passante disponible, les autres fichiers non encore utilisés ont été ajoutés en arrière-plan. Cela fonctionnait avec TOUS les jeux sans avoir besoin de recompiler, car mon pilote de minifiltre recevait des fichiers en cas de besoin.

Le pire inconvénient était la latence. Ma solution à cela était de créer un petit modèle de chaîne de Markov pour prédire quel fichier serait nécessaire par la suite et de hiérarchiser le chargeur en arrière-plan. Cela a fonctionné à merveille, et notre MMO a été capable de fonctionner presque IMMÉDIATEMENT juste après l’EXE et que quelques fichiers d’écran de chargement étaient locaux (~ 20 Mo). Nous avons pu cliquer sur un lien sur une page Web et lancer notre jeu de 10+ Go en environ 30 secondes . Nous avons eu un taux de réussite de 99%, ce qui signifie que lorsque le jeu avait besoin d'un nouveau fichier pour la première fois, il était déjà là!

Je serais heureux d'aider quelqu'un d'autre à mettre cela en œuvre.

Chris Mayer
la source
5
+1 et Ce serait génial si vous pouviez partager ce pilote parce que je cherchais quelque chose comme ça et que je voulais le créer moi-même comme vous, mais si c'est déjà fait, je l'utiliserais avec plaisir.
Furkan Omay
5
Utilisation intéressante d'une ingénierie assez avancée. Vous devriez vraiment écrire un article de blog à ce sujet. :) Dans quelle mesure les techniques d'apprentissage automatique ont-elles réellement aidé? Comment pouvaient-ils prédire quels fichiers étaient nécessaires?
Paul Manta
1
@FurkanOmay, de telles choses sont presque toujours la propriété de l'employeur de quelqu'un. Ne demandez pas aux gens de casser les termes de leurs contrats.
Jwenting
@jwenting D'après ce que j'ai compris, ce qu'il avait fait n'était pas pour une entreprise, mais pour sa fille et pour des jeux comme WoW. Je demande juste poliment, personne n'est forcé. Il peut simplement refuser pour une raison quelconque et tout ira bien. J'ai demandé parce qu'il a dit "il serait heureux d'aider quelqu'un d'autre à mettre cela en œuvre", alors je ne pense pas que demander au moins un point de départ ne soit pas une mauvaise idée, car j'ai déjà dit que je voulais l'appliquer sur le terrain. up.
Furkan Omay
3

De plus, dans certains jeux, les zones de jeu et les fichiers sont retardés, seules les zones obligatoires sont conservées et peuvent également être installées tout en continuant à jouer.

Chantola
la source
2

Pour résumer ce que plusieurs personnes ont dit, et peut-être ajouter quelques informations:

  • Le téléchargement initial est petit, juste les fichiers de démarrage et le gestionnaire de téléchargement pour le reste. Ce serait bien d'inclure la création de compte, la création d'avatar et peut-être les zones de départ dans tout cela.
  • pendant qu'il est en cours d'exécution, l'utilisateur se connecte et crée ses avatars, commence par télécharger d'autres éléments, des zones de bas niveau et des fichiers communs (comme les sons et les textures de base, vous les réutilisez le plus possible dans votre jeu).
  • à mesure que l'utilisateur progresse dans les niveaux, commencez par pré-télécharger les zones et autres contenus à venir
  • si l'utilisateur sélectionne des options nécessitant un téléchargement, commencez par télécharger les variantes basse résolution, puis, au fur et à mesure de son utilisation, téléchargez les versions à haute résolution au besoin et remplacez les versions basse résolution affichées par celles à la volée. De cette façon, l'utilisateur voit quelque chose, et progressivement toute la gloire du jeu est révélée (s'il dispose de suffisamment de bande passante et de puissance d'ordinateur bien sûr)
  • répéter jusqu'à ce que tout soit téléchargé


Cela signifie une charge réseau plus importante pendant la lecture, jusqu'à ce que tout le contenu soit mis en cache localement, mais une charge en rafale initiale plus petite sur vos serveurs, ainsi qu'une attente plus courte et moins frustrante pour les utilisateurs pendant le téléchargement du jeu.
Bien sûr, si l'utilisateur a une connexion réseau lente, il peut toujours recevoir les messages "attendez, chargement du contenu" (indiquez-les) lors du changement de zone, ou vous pouvez vérifier la bande passante lors du démarrage initial du jeu et si le téléchargement est trop faible. de manière fiable à la volée, le faire attendre au moins pour le premier niveau au complet (et de nouveau lorsqu’il entre dans des zones qui n’ont pas encore été entièrement téléchargées).
Ceci afin d’empêcher l’utilisateur de rester à la traîne au beau milieu d’une partie de jeu réelle, car sa connexion réseau s’enlisait.

jwenting
la source