Aller au contenu
Bobmorane85

Les 12 travaux de Star Citizix – Optimisations de Star Citizen

Recommended Posts

En quoi consiste exactement l’optimisation en cours sur Star Citizen ?

star-citizen-star-runner.jpg

Cette année 2018 est l’année des grandes optimisations pour Star Citizen. Bien sûr il y en aura d’autres à l’avenir, mais celles sur lesquelles travaillent les développeurs et ingénieurs de CIG actuellement, sont très certainement les plus importantes de toute la phase de conception du jeu ; plus particulièrement encore pour l’univers persistant.

A savoir que, si l’on n’ajoute pas l’Object Container Streaming et le Bind Culling dans la mise à jour Star Citizen alpha 3.3, il est inutile de rajouter des lunes et des planètes sous peine d’avoir tous un framerate de 1 image/sec et encore faut-il avoir suffisamment de RAM et de processeur pour faire démarrer le jeu.

C’est en partie la raison pour laquelle lorsque vous entendez dire que l’on optimise un jeu à la fin du développement, c’est faux.

On peaufine bien sûr l’optimisation en fin de développement, mais cette dernière doit s’effectuer pendant toute la durée du dev, surtout pour un jeu comme Star Citizen, qui n’est pas parti à la base avec le moteur idéal pour accomplir les choses immenses qu’il est en train d’accomplir.

On optimise qu’à la fin d’une Alpha test lorsque tout se déroule parfaitement bien avec le moteur 3D. Comme vous avez pu le constater si vous suivez le développement du jeu, ce ne fut pas le cas de Star Citizen dont le code source du Cry Engine a dû être profondément modifié (c’est peu dire), pour devenir le Star Engine, puis officiellement le moteur de jeu triple AAA Lumberyard d’Amazon. Et c’est encore moins le cas lors d’un développement ouvert où les joueurs sont aussi testeurs et ce, dès le tout début de la phase Alpha.

Voyons voir en quoi consistent ces optimisations essentielles pour l’univers persistant de Star Citizen, sur lesquelles travaillent actuellement les développeurs de Cloud Imperium Games/Foundry 42.

 


Network Bind Culling

Dans la réalité, vous ne voyez pas ce qu’il y a derrière vous n’est-ce pas ? En informatique, un ordinateur ne se pose pas de question et calcule tout par défaut, ce qui est devant, derrière, en haut, en bas… Bref, tout ce qui se voit et ne se voit pas à l’écran.

Le network bind culling est donc une technique qui va consister à éviter cette charge inutile de données non visibles à l’écran. autrement dit, elle va permettre à votre ordinateur de ne pas avoir à calculer ce qui ne se trouve pas dans votre champ de vision, donc pas seulement derrière vous, mais tout ce qui n’est pas visible pour vous à l’écran ; c’est à dire également ce qui se trouve dans un bâtiment, dans un vaisseau, derrière une structure, derrière une montagne, derrière un mur… Ou à 3.000 Km !
Vous comprenez désormais pourquoi vos machines souffrent actuellement, même s’il y a eu de bon progrès depuis la 3.1 et la 3.2, car jusqu’à la mise à jour Star Citizen Alpha 3.3, le moteur du jeu calculait tout !

Grâce au bind culling, votre mémoire vive va être considérablement soulagée.

Note : Le bind culling fonctionne beaucoup mieux avec l’object container streaming et inversement, pour Star Citizen on dira même que le binôme est indispensable, sinon ça peut être l’effet tout à fait inverse qui se produit en faisant chuter considérablement les performances du jeu, à cause du rechargement de toutes les entités mises de côté au préalable.

Et vous comprenez aussi pourquoi avec ça, le jeu tournera beaucoup mieux (votre CPU va vous dire merci). Mais cela fonctionne encore mieux en association avec d’autres techniques d’optimisation. Il y a plein d’autres choses ou l’on peut encore gagner en performance et sur lesquelles les devs bossent en ce moment. Et c’est ce que nous allons voir ci-dessous.

 


Network Entity Streaming

Il s’agit d’une restructuration de la manière dont le code réseau gère la création ainsi que la liaison des entités dans le but d’obtenir une diffusion asynchrone.

Globalement il s’agit d’améliorer avec cette technique les performances réseaux ainsi que la gestion des données entre clients et serveurs.

 


[Object Container Streaming] Code Conversion

Il s’agit d’un travail de fondation pour le fameux object container streaming incluant la conversion de tous les anciens codes informatiques du langage de programmation Lua vers le langage C++.

Ce dernier est certainement l’un des langage de programmation les plus utilisés au monde, tandis que Lua est également très apprécié dans le monde des jeux vidéo. On le trouve par exemple dans des jeux comme World of Warcraft, en réseau sur les systèmes Apache ou bien dans des moteurs de jeux vidéo comme le CryEngine.

Si CIG a décidé de basculer son code en C++, c’est justement parce que pour un jeu d’une telle envergure comme Star Citizen, il faut maintenir des performances très hautes et le C++ est tout à fait désigné pour ça.

 


[Object Container Streaming] Game Object Extensions Conversion

Idem que le code conversion, on va travailler pour poser les bases de l’object container streaming, à savoir que l’on va convertir ici toutes les extensions d’objets du jeu afin qu’elles n’utilisent plus une table de script.

On va ainsi pouvoir gagner en performance et en flexibilité, notamment au niveau de vos processeurs et du multithread. En effet, Star Citizen va mieux utiliser la puissance de calcul des CPU sachant que le multithreading a pour but d’augmenter l’utilisation d’un seul cœur et comme le jeu utilise au minimum des processeurs quadri-core, l’optimisation de ce point sera non négligeable. Vos CPU chaufferont également moins, car mieux utilisés.

 


[Object Container Streaming] Asynchronous Background Spawning

Là encore il s’agit de travailler sur les fondations de l’OCS. On va par cette technique minimiser la charge des tâches d’entités en les plaçant en arrière-plan afin de soulager le thread principal (la partie des instructions du processus en cours d’exécution), puis on va réduire le nombre de stalls (terme anglais évoquant les cycles CPU pendant lesquels le micro-processeur n’effectue aucune tâche utile pour le jeu, on parle aussi de décrochage du processeur).

 


Object Container Streaming

C’est peut-être le truc le plus essentiel dans le développement de Star Citizen, car sans lui il n’est pas possible d’envisager un univers encore plus immense et riche qu’il ne l’est, à moins d’avoir un ordinateur surpuissant du futur. Sauf que l’object container streaming fonctionne bien mieux de paire avec le bind culling, c’est la raison pour laquelle nous allons voir débarquer les deux technologies simultanément dans le jeu, avec la mise à jour Star Citizen alpha 3.3.

Grâce à l’object container streaming, les développeurs ne seront plus limités par la mémoire de votre ordinateur, de même que votre mémoire vidéo va se retrouver elle aussi, largement soulagée.
Grosso modo l’OCS fonctionne avec des “containers”, des zones et lorsque vous pénétrez dans une zone, votre mémoire chargera son contenu, mais parallèlement à cela, elle se videra du contenu de la précédente zone d’où vous veniez et lorsque vous quitterez cette nouvelle zone, le processus se répétera et ainsi de suite.

Exemple : Vous êtes à Port Olisar, votre mémoire va charger ce qui se trouve à Port Olisar et non plus tout ce qu’il se passe dans l’univers. Mais le système est encore plus pointue que cela, car s’il y a 5 vaisseaux à côtés de vous, il ne chargera que si qui est visible pour vous et non pas tous les polygones internes des vaisseaux. Il faudra aller dans l’un de ces vaisseaux pour que votre système charge son contenu.
Si maintenant vous quittez Port Olisar pour aller sur Daymar, vous quitterez donc la zone incluant toutes les entités de Port Olisar et donc vos mémoires vive et vidéo se videront de ce contenu, pour ensuite ne charger que ce qui est nécessaire dans la zone où vous vous trouvez à présent, quelque part sur Daymar.

L’object Container streaming sera certainement l’un des plus gros gains en termes de performances, mais pour qu’il soit fonctionnel, il nécessite qu’une poignée d’autres prérequis OCS soient effectués auparavant (voir les optimisations encadrées par des crochets dans cette liste de 12 travaux).

 


Environmental Blending Shader

Cette technique va rendre l’intégration des objets et du décor sur les surfaces encore plus belle. Il s’agit du développement d’un shader multicouche pour les objets qui sont soumis à la saleté, au sable, ou à la glace par exemple, ainsi qu’à la matière organique. Cela permet à l’objet de se fondre dans n’importe quel environnement sur les surfaces des planètes et des lunes.

 


[Object Container Streaming] Background Spawning

Là encore il s’agit d’un travail de fond destiné à mettre en place l’Object Container Streaming et à surtout assurer son bon fonctionnement, dans des performances optimales. Concrètement il sert à faire en sorte que les entités puissent se créer à partir de threads d’arrière-plan, afin que les véhicules/vaisseaux ou les conteneurs d’objets puissent être générés le plus rapidement possible.

 


Hard Surface Shader Improvements

Ce travail concerne des améliorations apportées aux surfaces des lunes et planètes ou autres surfaces et aux ombres en général. Cela permet une amélioration de tout ce qui est détails environnementaux. Avoir un jeu plus fluide et plus joli, que demande le peuple ?

 


Procedural City Rendering Performance

Cette fonction dépend du système de l’object container streaming. Il permettra d’améliorer le rendu des grandes villes tout en effectuant un gain de performances et ce, quel que soit la distance par rapport à la caméra.

 


Parallel Network Jobs

Le transfert des paquets est traité dans le système de travail afin que le serveur puisse gérer un plus grand nombre de connexions. Ce système devrait permettre au jeu d’augmenter le nombre de joueurs par serveur, bien au-delà des limites de la technologie actuelle.

 


Lobby Refactor

Cela ouvre la voie à une technologie de migration de serveur qui nous permettra de connecter plusieurs serveurs et clients au cours d’une même session de jeu. Autrement dit, Star Citizen va vraiment devenir massivement multijoueurs, après avoir été massivement multi-serveurs. Cependant, cette tâche est étroitement liée au maillage du serveur. De ce fait, il n’y aura pas d’avantage observable pour cette technologie, en tout cas pas dans l’immédiat, tant que le travail de maillage n’est pas terminé.

 


Vous connaissez désormais tout ce sur quoi les développeurs et ingénieurs de Cloud Imperium Games travaillent en ce moment en matière d’optimisation. Il y a de nombreux points encore que nous n’avions pas évoqué, mais il s’agit de petites touches par-ci par-là et nous avions mis en avant les points qui sont de loin, les plus importants, qui vous feront réellement gagner en hautes performances et qui font partie des ajouts prioritaires de la roadmap (feuille de route).

 

Source : starcitizenfrance.fr

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×