Quelle est la logique derrière les scènes de «chargement» dans les jeux?


8

Je fais mon premier jeu, c'est un type de jeu de tower defense, en utilisant le moteur de jeu Unity et en prenant Fieldrunners comme référence. J'aimerais en savoir plus sur les fonctionnalités des scènes de «chargement» dans les jeux.

Jusqu'à présent, j'instancie / crée des objets au moment de l'exécution et je ne fais face à aucun retard ou problème similaire. À quoi servent les scènes de «chargement» dans d'autres jeux? Existe-t-il une fonctionnalité ou une instanciation d'objets spécifiques pour la prochaine étape ou étape? Si oui, pourquoi en ai-je besoin si je n'ai pas de retard?


6
Les ressources requises par d'autres jeux peuvent être bien plus élevées que les vôtres. Par conséquent, des scènes de chargement sont nécessaires pour masquer la période à laquelle ces ressources sont chargées (peut-être à partir d'un disque dur lent).
deceleratedcaviar

2
De quoi "tous les jeux" parlez-vous? Il existe de nombreux jeux qui n'ont aucun écran de chargement.
Nicol Bolas

Réponses:


10

Fondamentalement, je dirais que pendant le processus de "chargement", le jeu essaie de charger et de précalculer toutes les opérations qui ne peuvent pas être effectuées pendant l'exécution. Par exemple, la récupération d'images (à utiliser comme textures) pour le disque dur est généralement un processus lent. À l'étape de «chargement», ces images peuvent être copiées dans la mémoire RAM, ce qui est un stockage d'accès beaucoup plus rapide, permettant un accès en temps réel aux images lors de l'exécution.


1

Un écran de chargement peut également être utilisé comme une "scène coupée" (http://en.wikipedia.org/wiki/Cutscene) pour donner à l'utilisateur une chance de reprendre son souffle, d'en savoir plus sur l'histoire et les fonctionnalités de votre jeu, ou pour essayer de leur vendre une version payante / un achat intégré


1

Je pense que les jeux modernes auraient dû pouvoir abandonner les écrans de chargement.

Je suppose que la vraie raison pour laquelle nous avons encore des écrans de chargement est que la plupart des jeux sont conçus pour fonctionner sur du matériel Xbox 360. En tant que tels, ils seront limités dans la quantité de RAM dans laquelle ils peuvent charger des trucs et combien de threads ils peuvent faire. Si vous n'avez pas assez de RAM, vous devrez supprimer beaucoup de choses de la mémoire, puis le recharger à partir du disque. Il est également plus facile de tout charger en même temps.

Il y a aussi des moments où des choses comme le disque dur peuvent se bloquer. Que se passe-t-il si l'utilisateur exécute un antivirus en arrière-plan. Si vous ne préchargez pas le contenu, vous devrez peut-être interrompre le jeu pendant qu'il attend que le maillage se charge ou que les choses apparaissent spontanément.

Des jeux comme Skyrim peuvent vous offrir un monde ouvert que vous pouvez parcourir autant que vous le souhaitez, mais dès que vous ouvrez une porte pour charger un donjon relativement petit, vous êtes coincé avec un écran de chargement.

La seule raison pour laquelle je pouvais voir que l'écran de chargement du donjon était nécessaire était s'il utilisait un éclairage précuit très lourd utilisé pour les scènes d'intérieur qui, s'il était assez grand à charger (fabriqué à partir d'un maillage géant ou a des cartes lumineuses détaillées) ou nécessitait des calculs à faire lors de l'exécution. Je crois que les donjons de Skyrim sont juste construits à partir de mailles modulaires plutôt que d'un maillage géant (du moins je pense qu'Oblivion est où).

Il n'y a pas vraiment de raison de charger plus que ce que vous pouvez réellement voir en entrant dans le niveau. De la même manière que les jeux ne rendent pas les choses que vous pouvez voir, vous pouvez sélectionner immédiatement ce dont vous avez besoin pour être chargé. Vous pouvez également coller de nombreux objets fictifs de marque-place. Ensuite, vous pouvez utiliser le filetage pour charger de manière asynchrone des objets dans les zones environnantes, leurs maillages, les textures, etc. lorsque le joueur se déplace dans l'environnement.

La façon dont je voudrais abandonner les écrans de chargement est la suivante:

  1. Chargez les propriétés de base du monde du jeu. Scripts globaux.

  2. Chargez la position du joueur.

  3. Chargez le nœud gridcell / BSP de cette position.

  4. Chargez uniquement les boîtes englobantes des objets dans cette cellule.

  5. Déterminer ce qui serait réellement rendu (tests sur les boîtes englobantes, peut-être des tests de rendu d'occlusion)

  6. Chargez les maillages du contenu rendu.

  7. Chargez les matériaux les textures des mailles.

  8. Effectuez plus de tests pour voir si plus de régions sont visibles et doivent être chargées (c'est-à-dire interroger un rendu d'une cellule de grille entière comme un cube géant).

  9. Une fois que tout ce qui est visible est chargé, commencez le rendu.

  10. Chargez le reste des trucs dans les cellules et chargez plus de trucs au besoin. Chargez les régions voisines et faites des prédictions de base sur les mouvements des joueurs pour choisir les régions qui doivent être chargées en premier. Continuez jusqu'à ce que la mémoire se remplisse.

Il y a d'autres choses à prendre en compte. Par exemple, certaines choses doivent être chargées même si elles ne sont pas visibles. Par exemple, un ennemi qui se tient derrière le joueur à l'extérieur de la région devrait être actif pour pouvoir courir vers le joueur et l'attaquer. Peut-être que le test d'occlusion n'est pas essentiel car vous voudrez immédiatement charger quoi que ce soit à proximité de sorte qu'il soit là lorsque le joueur se déplace et il devient visible, mais il pourrait se raser une seconde pour aller directement au rendu (mais si le temps est si proche, vous êtes susceptibles d’obtenir des problèmes d’apparition).

Si possible, ces étapes doivent être démarrées avant qu'elles ne soient nécessaires, rejetées en arrière-plan. Par exemple, si vous êtes dans le menu principal du jeu, il devrait commencer à précharger la zone de départ des charges après avoir choisi "Nouveau jeu" (ou dès que le menu apparaît) et la dernière sauvegarde pour continuer. D'autres sauvegardes peuvent être préchargées lorsque vous déplacez la souris dessus. Lorsque vous approchez d'une porte de donjon, elle devrait commencer à charger le niveau suivant (bien que si vous pouvez le faire, vous n'avez pas besoin d'une porte de donjon spéciale car elles ne servent vraiment qu'à déclencher un écran de chargement). Chargez en arrière-plan pendant la lecture de la vidéo. De cette façon, vous n'auriez même pas besoin d'un court écran de chargement initial.

Vous pouvez ignorer une grande partie de cela si cela ne vous dérange pas de «surgir» des choses. Quelque chose comme Second Life vous laisse juste des choses apparaissant, car étant récupéré sur Internet, vous ne pouvez pas faire grand-chose à ce sujet. Assassin's creed a cet effet où des trucs entrent en scène afin que vous puissiez vous en sortir avec des raisons artistiques.


2
Malheureusement, cela n'est tout simplement pas possible pour de nombreux jeux. Une seule zone peut avoir suffisamment de textures pour s'adapter à peine à la mémoire vidéo d'un GPU de milieu de gamme, vous ne pouvez donc pas précharger à la fois la zone de démarrage et la dernière zone de sauvegarde (et qu'en est-il des autres sauvegardes que l'utilisateur pourrait sélectionner?). Même avec des mondes continus en streaming comme dans Skyrim, que se passe-t-il avec les portails ou les scripts qui téléportent simplement le joueur dans une autre zone? Avec 8 Go de données compressées - dont la plupart sont des données de texture - même les PC de jeu haut de gamme modernes ne peuvent pas tout précharger.
Sean Middleditch

1
De plus, je dirais que les jeux ont tout intérêt à ne pas pouvoir charger plusieurs zones en mémoire; cela les empêche de mettre autant de contenu que possible dans chaque domaine donné. Pour de nombreux jeux, ce n'est pas un problème, mais pour les titres du monde ouvert qui veulent donner une expérience aussi riche que possible, toutes les circonstances où vous ne vous heurtez pas à vos limites sont celles où vous ne livrez pas autant le joueur que vous pourriez être.
Steven Stadnicki

0

Dans Unity, les scènes sont une combinaison de plusieurs objets de jeu. Donc, si vous ne souhaitez pas spécifier tous vos objets de jeu séparément et les charger un par un, vous pouvez simplement charger une scène complète .

Lors du chargement d'une scène dans Unity, les objets déjà existants sont mis à la corbeille et donc un tout nouveau niveau est chargé. Vous pouvez indiquer quels objets vous souhaitez conserver avec la méthode DontDestroyOnLoad .

Dans vos paramètres de build lors de la publication d'un jeu, vous pouvez également indiquer quelles scènes sont utilisées dans votre jeu et les inclure dans votre build actuel . Cela permet de faire la distinction entre plusieurs plates-formes qui contiennent différents niveaux, mais la même logique de code.

Des questions spécifiques à l'unité peuvent également être posées sur le forum des réponses de l' unité . Ces utilisateurs sont plus spécifiés pour Unity, au lieu de questions générales sur les moteurs de jeu.


Cette réponse ne semble pas répondre à la question: pas «comment puis-je charger les niveaux?», Mais «pourquoi le joueur voit-il« Chargement… »?»
Kevin Reid

@KevinReid Ah oui, vous avez probablement raison à ce sujet. Je n'ai probablement pas bien saisi les points d'interrogation.
Marnix

0

La mise en place d'une scène graphique 3D prend du temps et sa maintenance peut pousser un ordinateur au-delà de ses limites. Le contenu nécessite une mémoire importante. Le contenu visible nécessite beaucoup de temps. Et lorsque l'observateur fait un zoom arrière et regarde l'horizon, une grande partie du contenu total peut devenir visible. (Avez-vous déjà remarqué comment certains jeux fonctionnent mieux si vous ne zoomez pas trop loin? Avez-vous déjà remarqué comment certains jeux ne vous permettent pas de zoomer trop loin ou de regarder l'horizon?)

La solution consiste à configurer des scènes individuelles avec un contenu limité. Maintenant, le jeu fonctionne bien jusqu'à ce que l'observateur quitte une scène pour une autre. À ce stade, l'ancienne scène est supprimée et une nouvelle scène est mise en place, ce qui prend du temps (et un écran de chargement pour essayer d'empêcher l'utilisateur de s'ennuyer). Les moteurs 3D essaient généralement de faire autant de travail que possible pendant la configuration pour rendre les graphiques aussi fluides que possible par la suite.

J'ai vu des jeux qui semblent permettre des mouvements rapides et libres et des zooms sur un monde entier. Il y a probablement beaucoup de génie et beaucoup de programmation laborieuse et d'art là-bas; ils ne se sont pas contentés de télécharger des logiciels graphiques gratuits.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.