Passer au contenu principal

Mar: Steam, Database & Blueprints!

· 10 minutes de lecture
Gabriel • SyedMuhammad
lead developer™

New Steam Store Page, Performance Optimization, Databases & Blueprint Integration!

Page de la boutique Steam​

Récemment, nous avons eu un problème avec la page de notre magasin, ce qui nous a obligés à en acheter une nouvelle. Et maintenant, nous la publions enfin ! Elle a de nouvelles captures d'écran, des vidéos et une meilleure description !

WISHLIST MAINTENANT!!!​

L'inconvénient de cette situation est que l'ancienne boutique et l'ancienne entrée du jeu seront désactivées. Bientôt, tout le monde recevra une nouvelle clé Steam pour activer le nouveau nanos world dans votre bibliothèque !

Nous avons également intégré un outil pour exporter (puis importer) vos succès et statistiques de l'ancien jeu vers le nouveau. Il suffit de lancer l'ancien jeu une fois avant de lancer le nouveau et tout est importé automatiquement !

Performance Optimization​

Tout le monde sait que l'un des grands aspects de nanos world est la performance et l'optimisation. Et le mois dernier, nous avons réalisé une avancée significative en améliorant certains points critiques internes.

Mémoire​

The first one to mention was a huge improvement in the memory usage of our spawned entities.

En interne, nous utilisons un système spécial pour gérer l'envoi et la synchronisation des données sur le réseau. Notre approche est d'avoir un système similaire au système de réplication d'Unreal. Mais jusqu'alors, ce système était responsable de la majeure partie de l'utilisation de la mémoire dans chaque entité créée.

C'est dans cet esprit que nous avons cherché à résoudre ce problème, sans compter que la plupart de ces utilisations de la mémoire étaient inutilement dupliquées dans toutes les entités. Et heureusement, nous avons réussi à réduire jusqu'à 90% l'utilisation de la mémoire des entités. En ce moment, il occupe exactement les données qui sont strictement nécessaires à son existence !

Nous avons fait un petit test pour comparer, en créant 10.000 personnages par le biais d'un script, pour vérifier la différence d'utilisation de la mémoire :

Before:

After:

Comparaison de l'utilisation de la mémoire de certaines entités avant et après :

EntityUtilisation de la mémoire avantUtilisation de la mémoire aprèsRéduction
Cable5.4 KB1.1 KB80%
Character13.1 KB1.8 KB86%
Light4.8 KB1.0 KB79%
Melee7.1 KB1.5 KB79%
Particle4.6 KB1.0 KB78%
Player3.1 KB0.3 KB90%
Prop4.8 KB1.0 KB79%
StaticMesh4.5 KB1.0 KB78%
TextRender5.3 KB1.1 KB79%
Trigger4.0 KB0.8 KB80%
Vehicle7.9 KB2.0 KB75%
Weapon11.1 KB2.0 KB82%
note

Cette utilisation a été calculée du côté serveur. Du côté du client, les valeurs seraient un peu plus importantes, sans parler des assets qui sont chargés ensemble.

Nous n'avons même pas commencé à chercher des techniques de compression active ou à réduire la taille de certaines variables qui sont inutilement plus grandes que nécessaire. 🙏

Réseau​

Une autre optimisation importante concerne les paquets de notre réseau. Chaque donnée envoyée par le réseau possède un "header" commun permettant d'identifier certaines opérations. Il s'agit d'un "coût" constant pour le réseau que nous avons réussi à réduire jusqu'à 75% de sa taille, ce qui fait que toutes les données envoyées par le réseau sont statiquement plus faibles !

Coté client​

Nous avons commencé à avancer dans l'optimisation du jeu du côté client. Ce qui est normalement plus délicat que du côté serveur car il s'agit de traiter les sous-systèmes de l'Unreal Engine. Mais nous avons réussi à ajouter quelques optimisations basées sur les paramètres de qualité sélectionnés. Par exemple, en ce qui concerne les particules de sang ou des balles, en fonction de la distance et de la qualité des effets sélectionnés, elles seront moins nombreuses ou ne seront pas créées du tout.

Nous avons également modifié le système de véhicules pour effectuer des optimisations similaires à l'aide de ce système. Il y a encore beaucoup de choses que nous pouvons améliorer ! 😀

New Class: Blueprint​

A very required class is being introduced: Blueprint! Il est maintenant possible de créer n'importe quel acteur Blueprint dans nanos world !

We've managed to implement the method: CallBlueprintEvent() which you can create any Event or Function with any number of parameters in your Blueprint and call it from Scripting! Cela ouvre de nombreuses possibilités !

De plus, vous pouvez la faire apparaître sur le serveur et elle suivra les mêmes règles que n'importe quelle autre entité et elle sera également synchronisée avec les autres joueurs en utilisant le système d'autorité!

New Class: Database​

La base de données est un élément extrêmement important pour certains modes de jeu comme le RP. Jusqu'alors, nous fournissions un module MySQL à utiliser comme bibliothèque Lua tierce, mais en raison de sa complexité d'intégration avec votre serveur et aussi parce qu'il n'était pas possible de faire des requêtes asynchrones, nous avons cherché une solution plus robuste.

For that, we present the new class: Database. A all-in-one solution for connecting to a database, it supports MySQL, PostgreSQL and SQLite out of the box! Sans oublier les requêtes asynchrones et thread-safe !

Consultez sa page pour une documentation complète et des exemples !

Marque de dérapage sur les véhicules​

Nous avons ajouté des marques de pneu lorsque les véhicules dérapent :

De plus, un détail génial a été ajouté : les roues sont barbouillées de sang !

Il est 100% dynamique et procédural !

Améliorations du sandbox​

Nous avons plusieurs améliorations concernant le mode de jeu "sandbox" ! La première est l"API" du bac à sable : nous avons répertorié toutes les fonctions et tous les événements qu'il exporte afin que vous puissiez intégrer vos propres entités/outils ou utiliser ses fonctionnalités.

Nous avons également modularisé le menu, les catégories et les onglets, et vous pouvez ajouter les vôtres à partir de votre package externe!

Découvrez l'API sandbox sur la page GitHub : https://github.com/nanos-world/nanos-world-sandbox.

Enfin, nous avons amélioré notre Physics Gun, que vous pouvez maintenant contrôler à l'aide de la souris et qui permet également un mouvement " snap-to-grid " !

Plusieurs autres ajustements et corrections de bogues ont également été effectués sur Sandbox.

New Particle Methods​

Nous avons étendu les possibilités de Particles ! Now it's possible to set Material parameters on it, and also use any Texture, WebUI and Canvas as parameters as well!

Par exemple, vous pouvez créer un canevas, dessiner dessus et l'utiliser comme paramètre de particule de votre material!

La vidéo suivante montre l'utilisation de l'interface Web https://nanos-world.com comme paramètre dans la particule! Rendu en temps réel !

Améliorations notables​

Suppression musicale​

Nous avons enfin réussi à régler le problème de la musique, qui faisait que les sons de type Music s'arrêtaient lorsque trop de sons étaient générés.

Client-side Props​

Les props peuvent maintenant être créés du côté client également ! Cela permet d'avoir des mesh dynamiques générés sur le client, destinés à être utilisés comme effets visuels et fonctions non liées au jeu.

Nous avons déjà mis à jour les entités destructibles du sandbox pour utiliser les débris côté client !

Mesh statiques du niveau​

Now all StaticMeshActors from a Map are automatically loaded as StaticMesh entity on Client Side! Il est possible de les peindre, de les détruire, de les déplacer et tout le reste côté client !

Chargement asynchrone des textures​

We've improved our Client loading system and now textures (e.g. .jpg) are asynchronously loaded and the texture is applied in a deferred way. This system currently is implemented under SetMaterialTextureParameter() for testing, soon we can use it in other methods as well.

Async File Loading​

In addition to the above, we've expanded our Async implementation into File class, which now have the :ReadAsync() method!

New Light Methods​

We've added a bunch of missing Light setters and getters methods, also the ability to toggle it on/off with SetVisibility().

Assets.toml Changes​

The Asset.toml got a new category: unreal, where we must specify a new setting unreal_version (the unreal version this Asset Pack was compiled on), this will be an important feature to prevent old Assets versions from crashing the game.

Also it got the new blueprints category for listing Blueprints 😉.

Collisions de véhicules​

Nous avons modifié et amélioré nos configurations de collision. Désormais, les véhicules interagissent mieux lorsqu'ils entrent en collision avec d'autres objets, y compris les personnages en réseau, les accessoires et les autres véhicules.

Avant, d'autres personnages en réseau se désynchronisaient lorsqu'ils entraient en collision avec des véhicules (ils commençaient à voler et des choses bizarres se produisaient lorsque des objets frappaient les roues des véhicules), et les collisions entre deux véhicules étaient extrêmement rigides, ce qui a été corrigé également et sera plus organique maintenant.

Améliorations du soleil​

La lumière et les ombres du soleil par défaut ont été améliorées, spécialement pendant le lever/coucher du soleil où nous avions quelques artefacts et des ombres qui disparaissaient, maintenant cela doit être plus lisse et plus joli (et espérons-le plus efficace).

Conclusion​

Merci pour cet autre mois de soutien ! Il y a eu des avancées incroyables avec les classes de Blueprint et de Databases et aussi pour enfin présenter à nouveau notre page Steam !

Notre but est de continuer à faire progresser les performances et les optimisations de la mémoire, ainsi que d'apporter de nouvelles fonctionnalités essentielles à nanos world!

Nous avons également d'importants défis à relever pour apporter un système d'élimination et de dimensions basé sur la distance pour les entités, ce qui est essentiel pour créer des environnements spéciaux.

Nous souhaitons également mettre en œuvre certaines classes essentielles, comme des personnages personnalisés (par exemple, pour les animaux) et d'autres types de véhicules (air, mer).

Enfin, nous sommes très heureux de la sortie d'Unreal Engine 5 (hier 05 avril), car il apporte plusieurs solutions à des questions importantes dans nanos world (comme le Runtime Retargetting qui promet de résoudre plusieurs problèmes de compatibilité des animations) et des tonnes de nouvelles fonctionnalités à utiliser ! Nous allons avoir de bonnes nouvelles bientôt™ pour vous !

Rendez-vous le mois prochain ! 🥳