Le projet Universitaire :

Développer une technologie innovante sur Unreal Engine afin de gérer entre 200 et 300 joueurs en multijoueurs sur le même niveau. Une équipe de 8 membres ont travaillé sur ce projet avec le moteur UnrealEngine 5.1 .

Utilisation des ECS afin d'obtenir le plus de performance possible.
Intégrer l'ECS Flecs et le faire communiquer avec le World de Unreal Engine.

Avancé du projet : 

Dès le début du projet nous avons testé flecs dans un projet à part de celui d'Unreal Engine dans le but de mieux comprendre les ECS et de mesurer leur performance. Au bout d'une semaine de pratique nous avons réussi à instancier 10 millions d'entités et d'actualiser leur déplacement avec une vélocité à 212 fps.

Flecs performance 10 millions actor

Une fois les performances de flecs testé , nous l'avons intégrer à Unreal Engine et fait en sorte que les deux communiquent pour que le world et les systems de flecs soit liés à celui d'Unreal Engine. Une fois cette étape réalisé nous avons pu instancier 10 000 entités et actualiser leur déplacement avec une vélocité à 50 fps.

10000 entites instancier dans unreal engine simulation

MultiThreading:

Les performances mesurées dans Unreal Engine sont correcte mais pas suffisante. Nous avons constaté que tous nos systèmes s'éxécute sur un seul thread, ce qui entrainait la perte de performance et le dépassement du budget de 16.66ms. Nous avons créer un Jobsystem et des Workers afin d'initialiser nos systèmes, d'instancier nos entités et de les déplacer en mutlithreading.

Même avec plusieurs threads en place, les FPS n'étaient pas au rendez-vous pour un trop grand nombre d'actor. Le problème qui entrainait cette performance est le rendering. Nous avons pu sans afficher les entités instancier 1 000 000 d'entités en déplacement à une vingtaine de FPS, et donc en constater que nous avions atteint la limite gérer par Unreal Engine.

Mise en réseaux:

L'équipe qui s'occupait du réseaux ont créer un protocol réseaux et un broker (Rust) afin d'acceuillir le plus de joueur possible. Une fois le nouveau plugin intégrer à Unreal Engine, nous avons dû sérialiser intelligement nos données sur le réseaux afin d'être le plus optimisé possible. Les joueurs vont envoyer leur position dans un topic auquel tous les autres joueurs seront abonnées et avertit quand celui est mit à jour. Les joueurs peuvent désormais jouer en réseaux, mais quand est-il du gameplay ? 

Gameplay:

Un scope de 200 à 300 joueurs sur une même carte demande d'offrir un minimum de fonctionnalité rendant l'expérience la plus fun possible. Nous avons donc conçu un grand labyrinthe avec une subtilité, passer à travers certains murs. Si vôtre vaisseau est de la même couleur que le mur vous le traversez, ce qui peut grandement vous aider à arriver au bout du labyrinthe dans les premiers 

Interpolation:

Même si les joueurs arrivent à se voir et jouer ensemble, leur déplacement sont loin d'être précis et fluide. C'est pourquoi nous avons intégré une interpolation entre chaque positions des joueurs avec un buffer à 3 emplacements.

Intelligence Artificielle:

Tester le projet à quelques joueurs n'est pas le plus idéal pour se rendre compte de l'ampleur du scope et de ce que pourra être plus tard le jeu avec réellement ces 200 à 300 joueurs. Des intelligences artificielle ont été ajouté dans le labyrinthe simulant de vrai joueur sur le réseaux en envoyant leur position et leur couleur pour terminer le labyrinthe.