Rust - Bande-annonce de mise à jour navale
Bateaux fabriqués par les joueurs
Des bateaux fabriqués par les joueurs sont là, offrant une nouvelle façon d’explorer les mers, y compris les Profondeurs !
Placez la nouvelle station de construction de bateaux déployable dans l’eau et commencez à construire avec vos compagnons de bord ! Utilisez le nouveau Plan de Construction Navale pour construire votre bateau de rêve, en utilisant un nouvel ensemble de blocs de construction spécifiques à chaque bateau.
Ajoutez un volant, une ancre, des voiles, des moteurs, des planches, des rampes et des canons pour compléter votre navire et partir en haute mer !
Une attention attentive et le placement de vos moteurs et voiles sont importants si vous souhaitez un navire navigable, car ils affecteront sa maniabilité et sa vitesse. Les voiles et les moteurs peuvent tous deux être inversés grâce aux options radiales du menu pour un stationnement en marche arrière astucieux.
Veillez à mettre un code de verrouillage sur votre volant pour éviter tout accès indésirable ou le vol de votre bateau tout neuf.
Des dispositifs déployables réguliers peuvent être installés sur vos bateaux. S’ils travaillent sur le remorqueur, ils travailleront ici aussi.
Vous devez changer après avoir réalisé que votre bateau ne fait que tourner en rond ? Utilisez le mode Déployer & Modifier (non disponible en haute mer) pour déployer rapidement et facilement une station de construction navale autour de votre bateau.
Amusez-vous bien à construire et à explorer les mers !
Nouveaux bateaux déployables
Pour rendre votre navire en état de naviguer, nous avons maintenant de nouveaux dispositifs déployables - spécialement pour votre bateau !
Station de construction navale
La station de construction de bateaux est placable en eau profonde, elle sert à construire et modifier votre bateau.
Plan de construction
Le plan de construction de bateaux est similaire à celui de l’urbaniste que vous connaissez et aimez, mais pour les bateaux.
Voiles
Une feuille de tissu durci gréée pour capter le vent et aider à propulser le bateau vers l’avant.
Helm
Un incontournable pour tout bateau navigable. Utilisé pour diriger et contrôler votre direction, avec un verrou intégré pour garder votre navire sécurisé quand vous n’êtes pas au volant.
Moteur
Un moteur puissant qui fonctionne avec du carburant de faible qualité et le consume rapidement. Bruyant, assoiffé et inefficace, mais indispensable quand il faut fuir le danger, poursuivre d’autres joueurs ou se frayer un chemin hors d’une mauvaise situation. Parfois, la rapidité vaut le prix.
Magasin principal
Une ancre lourde utilisée pour empêcher votre bateau de dériver. Laisse-le reposer pour maintenir la position et garder ton vaisseau exactement là où tu veux. Sans cela, votre bateau pourrait dériver jusqu’à la rive.
Canon
Une arme navale puissante utilisée pour couler les bateaux des autres joueurs. Chargez-le de boulets de canon.
Petite rampe
Comblez les espaces et créez des points d’accès rapides. Idéal pour monter à bord d’autres navires ou atteindre la terre depuis l’eau.
Planche
Utilisé pour combler des brèches, monter à bord d’autres bateaux et régler de petits désaccords en poussant des amis en pleine mer.
les Profondeurs de la mer
Les Grandes Eaux sont une nouvelle région au large où l’on peut voyager en bateau. C’est risqué, très rentable, et intentionnellement impitoyable.
Vous pouvez y accéder en naviguant vers le bord de la carte avec un bateau puissant comme des bateaux fabriqués par les joueurs, des RHIB ou les nouveaux bateaux PT.
Ce n’est pas un endroit où vivre : vous ne pouvez pas construire, et rien ne réapparaît. Premier arrivé, premier servi. Les profondeurs s’ouvriront et se refermeront de façon intermittente, comme un événement mondial.
À l’intérieur, vous pouvez explorer de nouveaux contenus détaillés ci-dessous dans ce blog :
• Îles tropicales
• Villes flottantes
• Navires fantômes
• Bateaux contrôlés par des scientifiques
Nous avons beaucoup de projets pour étendre les profondeurs marines et les utiliser comme un pont entre les mondes.
Navires fantômes
À l’instar des monuments, les Navires Fantômes sont des navires stationnaires dispersés dans les profondeurs de la mer, remplis de butin que les gens peuvent récupérer en naviguant sur leurs bateaux.
Chaque Navire Fantôme est protégé par des scientifiques, à bord du vaisseau et des patrouilles à proximité, qui tenteront de vous empêcher d’en sortir. Certains navires fantômes contiennent aussi des caisses verrouillées, que vous devrez pirater sous la pression des autres joueurs et des bateaux scientifiques.
Nous espérons que les navires fantômes, ainsi que d’autres lieux de butin comme les îles tropicales, offriront suffisamment d’incitations pour visiter souvent les grandes profondeurs.
Villes flottantes en haute mer
En explorant les profondeurs marines, vous pourriez tomber sur les Cités Flottantes. Construits à partir de barges abandonnées et de la structure d’une plateforme pétrolière inachevée, ces monuments délabrés servent de refuge sûr pour tous types de joueurs.
Actuellement, il existe quatre variantes de Cités Flottantes qui peuvent apparaître sur un serveur, chaque ville flottante offrant le même type d’installations. Cela inclut des quais où vous pouvez sécuriser votre bateau et divers vendeurs de PNJ vendant armes, équipements, nourriture et fournitures médicales.
Une barge agricole à proximité est accessible moyennant un petit supplément, vous donnant la chance de récolter des récoltes fraîches. Dans chaque monument, des équipements familiers de zones sécurisées sont disséminés sur les plateformes, notamment des recycleurs, des établis, des tables de recherche et des raffineries.
Au centre de chaque ville flottante se trouve le Deep Deck Casino, un espace accueillant offrant divertissement et lieu de détente pour tous les marins fatigués. Ici, vous pouvez rencontrer d’autres survivants, vous détendre dans la piscine, profiter de la musique et jouer votre mièvre à volonté.
N’oubliez pas de jouer gentiment pendant que vous êtes là – semez les problèmes, et les tourelles de sécurité vous rappelleront pourquoi c’était une mauvaise idée.
Îles des Grandes Eaux
Pendant des années, l’océan n’a été qu’un vide bleu entre vous et les plateformes pétrolières. Avec cette mise à jour, nous introduisons un tout nouveau biome dans les Grandes Profondeurs, les îles tropicales.
Ces micro-îles sont totalement distinctes du continent. Attendez-vous à des sables blancs, des palmiers denses, et même une nouvelle délicieuse gourmandise naturelle. Vous ne verrez pas de pins ici.
Leur nature semi-procédurale leur donnera des expériences différentes. Certains pourraient avoir de vieilles ruines, d’autres une mine mère de minerai – ou les deux.
Mais avancez prudemment. Tu n’es pas le seul à chercher une fortune.
BATEAUX DE SCIENTIFIQUES
Nous avons ajouté un nouveau bateau : le PT Boat. On ne le trouve que dans les Profondeurs - C’est plus lent que le RHIB et consomme plus de carburant, mais il est plus puissant et puissant.
Attention, les Profondeurs sont remplies des nouveaux bateaux scientifiques. Ces navires (y compris les RHIB et le nouveau bateau PT) sont équipés de scientifiques qui parcourent les profondeurs en groupes coordonnés à la recherche de joueurs à engager. Vous pourriez les trouver en train de protéger la Caisse Piratée à bord d’un navire fantôme. Chaque bateau peut être vidé des Scientifiques et volé par le joueur. On se demande ce que vous trouverez à bord ?
Chaque vedette PT est équipée de deux tourelles. L’un équipé de deux mitrailleuses de 50 calibres, l’autre d’un seul canon de 50 calibres plus précis. Chacun peut être rechargé avec des munitions standard de fusil 5.56.
RHIB Refresh
Le RHIB avait besoin d’un peu de soin, et il n’y a pas de meilleur moment pour cela que la mise à jour navale. Le modèle et les textures ont été mis à jour, ainsi qu’un nouveau modèle de boîte de rangement.
Le RHIB est désormais équipé d’une boussole fonctionnelle et d’écrans de cartes – vous aidant à naviguer dans l’océan.
IA de nouveaux scientifiques sur les plateformes pétrolières ET EN MER
Si tu as combattu beaucoup de scientifiques, tu sais, essayer de les faufiler ou de les prendre à revers est la meilleure façon de te faire tuer.
Ils savent toujours où vous êtes, et vont instantanément faire un 180 degrés et vous faire un beam si vous essayez de jouer intelligemment et de les surpasser.
À cause de cela, il est très tentant soit de les tirer de très loin, soit de camper derrière un goulot d’étranglement et d’attendre qu’ils foncent inévitablement un par un.
Cela fait de la prise d’un monument gardé par des scientifiques un test de ressources avec un faible plafond de compétences.
En résumé, tout se résume à :
d
Tu connais le fromage, et as-tu assez de munitions et de bandages pour les détruire ?
De nouvelles IA scientifiques émergent progressivement, mais seulement pour , et pour l’instant.
Plateformes pétrolières
Navires fantômes
Îles des eaux profondes
On peut les distinguer à leur tenue camouflage navale et leur visière carrée.
Contrairement à leurs cousins, ils ne voient pas à travers les murs et doivent se fier aux bruits et aux observations récentes pour vous trouver.
Cela signifie que vous pouvez les appâter en jetant un coup d’œil ou en faisant du bruit, puis contourner et tirer dans le dos.
Cela est d’autant plus facilité par leur temps de réaction plus court.
Si vous vous présentez sous un angle qu’ils n’attendaient pas, ils seront surpris, et vous pourrez alors les abattre avant qu’ils ne puissent réagir.
De plus, ils ne fonceront pas dans des goulots d’étranglement pour se faire massacrer par un joueur de camping, ils essaieront plutôt de contourner, de lancer des grenades fumigènes et de foncer ensemble, ou simplement d’attendre en embuscade de l’autre côté.
Ils seront aussi beaucoup plus prudents face aux snipers, s’ils sont touchés ou entendent un coup de feu, ils se mettront tous à couvert et attendront.
Nous suivrons de près vos retours et continuerons à les ajuster.
Là où ils sont en un état suffisamment bon, nous envisagerons de transférer les autres scientifiques de l’île principale vers la nouvelle IA.
MODÈLE DE VUE DU PLANIFICATEUR DE BÂTIMENT
Le planificateur, lors de la construction ou du déploiement d’un objet, a toujours eu un modèle à la troisième personne que tout le monde peut voir, mais il n’a jamais eu de modèle de vue à la première personne.
Nous pensons qu’il serait agréable que ce que tout le monde voit corresponde à ce que vous voyez, donc nous avons ajouté un Viewmodel dans le planificateur.
Nouvelles missions
Nous avons 5 nouvelles missions à thème naval dans la mise à jour de ce mois-ci. Celles-ci peuvent être récupérées auprès d’un mélange de PNJ nouveaux et existants qui ont fourni des missions. Certaines nécessitent de s’aventurer dans les profondeurs marines, d’autres vous maintiennent ancré sur le continent.
Cette mise à jour apporte beaucoup de travail pour améliorer la manière dont nous créons et modifions les missions en interne. Nous voulons encore faire plus de choses avec les missions, mais nous sommes dans une meilleure position pour travailler dessus maintenant qu’auparavant. Ce travail apporte également plusieurs corrections de qualité de vie et améliorations des missions existantes et des conversations avec les PNJ, ainsi que des optimisations de fond associées.
Grands bateaux pétroliers
Des bateaux scientifiques apparaîtront désormais à Large Oilrig avec la caisse – offrant un défi supplémentaire aux joueurs lorsqu’ils prennent du pétrole de la mer.
Les RHIB patrouillent autour de la Grande Plateforme Pétrolière, empêchant les joueurs de s’approcher. Celles-ci réapparaissent à chaque réinitialisation de la plateforme pétrolière.
Vous pouvez tuer les scientifiques et voler le butin à bord. Les bateaux volés resteront après la réinitialisation de la plateforme pétrolière.
DLC Artist Pack
Rust possède l’une des bases de joueurs les plus diversifiées de tous les jeux populaires, allant des joueurs de PVP hardcore aux RP amicaux ou moins amicaux. Pour refléter cela, nous avons sorti nos meilleurs pinceaux numériques et créé le pack DLC Artist ; Une collection d’objets cool et ingénieux conçus pour vous aider à vous exprimer, que vous souhaitiez peindre un portrait charmant ou étiqueter la base de votre voisin.
Pistolet à paintball et salopette
Transformez l’assaut tactique en art avec le pistolet à paintball et la salopette. Avec un type de munitions unique, chargez la trémie de balles de peinture, sélectionnez la couleur de votre équipe et créez une scène. Il existe en 5 couleurs pour plusieurs équipes.
Les balles de peinture infligent des dégâts différents selon que le joueur blessé et celui instigateur ont des combinaisons ou non équipées. Il existe des convas de serveurs séparés pour les scaler si les admins le souhaitent, 'paintballstandarddamage' et 'paintballoverallsdamage'.
Vous pouvez bien sûr aussi utiliser le pistolet à paintball pour taguer ce que vous voulez, pas seulement les autres joueurs ! De plus, les salopettes de paintball ont une caractéristique unique : la capuche est dynamiquement relevée ou abaissée selon votre choix de couvre-chef.
Cible réactive peintable
Éclairez vos propres cibles avec ce skin déployable pour la cible réactive. Tu peux peindre à la fois sur la planche cible et sur le casque à seau. En plus, le seau agit comme la tête d’un joueur, vous permettant d’affiner vos compétences en tir à la tête.
Cadres ornés
Apportez une touche de classe à votre base avec ces cadres ornés. Peignez-les dessus ou ajoutez une photo, et une fois que vous êtes satisfait de votre chef-d’œuvre, donnez au cadre une description unique. Il existe en 5 tailles, de la petite à l’extra extra large.
Frames lumineux
Mettez vos œuvres sous les lumières avec cette collection de 5 cadres lumineux. En supportant l’IO, vous pouvez afficher ces lumières éteintes ou allumées, ce qui mettra en valeur votre travail pour que tout le monde puisse le voir.
Cadres d’obturateur
Déroulez vos créations avec les cadres d’obturateur. Disponible en 5 variantes de taille, vous pouvez faire rouler les obturateurs manuellement et en IO, offrant des possibilités infinies, d’un concours de jeux de rôle à la révélation ultime de la base de pièges.
Toiles sans cadre
Si le cadre extra-large n’est pas assez grand pour votre ambition, ne cherchez pas plus loin que ce jeu de 5 toiles sans cadre. Vous pouvez les utiliser pour créer des fresques d’une ampleur véritablement épique.
Chevalet portable
Emmenez votre talent à la grande nature avec ce nouveau mobile unique et unique. Vous pouvez monter n’importe quel cadre jusqu’à Large et peindre à votre guise, en profitant de l’air frais sous le vent de Fishing Village. En mode peinture, vous pouvez basculer l’arrière-plan et même la toile elle-même, ce qui vous aide à développer votre vision créative. Le chevalet supporte toutes les couleurs que vous voulez, même le noir...
Fenêtre peinte
Que vous souhaitiez fabriquer des vitraux, un aquarium, une vitrine ou un leurre à la manière de Maman, j’ai raté l’avion, cette fenêtre peinte vous sera très utile ! Ce dépliable est un skin pour la Fenêtre en Verre Renforcé.
Rosette Award Sprays
Enfin, avec le pack DLC Artiste, 4 sprays personnalisés utilisables avec l’outil Spraypaint. On y trouve des sprays pour la 1ère place, la 2e place, la 3e place et... Dernière place. Utilisez-les comme vous le souhaitez.
Nouveau skin d’atelier : SKS
Ce mois-ci, nous présentons le prochain atelier skinnable : le SKS
Le SKS a été une demande populaire de la communauté du skinning, et nous sommes ravis de répondre ! En tant que l’une de nos armes les plus récentes, nous avons hâte de voir comment la communauté fonctionnera avec ses graphismes mis à jour.
Pour créer votre propre skin SKS, rendez-vous dans l’atelier en jeu et trouvez l’objet d’arme SKS. À partir de là, vous pouvez télécharger le fichier du modèle et ajouter vos propres documents.
Performance des serveurs
Si vous avez suivi le développement de cette mise à jour, vous savez probablement que nous avons dû le faire à cause de problèmes préoccupants de performance des serveurs. Depuis, nous nous sommes extrêmement concentrés sur le fait de rapprocher les performances du serveur au maximum de celles d’avant la mise à jour navale. Bien que beaucoup de problèmes concernent le nouveau contenu, nous ne nous sommes pas arrêtés là et avons apporté beaucoup d’améliorations aux anciens goulots d’étranglement de performances.
Je l’ai reporté l’année dernière
Beaucoup de ces explications peuvent être un peu techniques, mais nous avons pensé qu’il serait intéressant de voir le processus que nous suivrons en travaillant sur ces questions.
Cuisson/Performance du four
Nous avons remarqué de longs temps d’image attribués au procédé du four – cela concerne n’importe quel feu de camp, chaudière, barbecue, etc. En y regardant de plus près, cela présentait quelques problèmes. Le processus de cuisson fonctionne tous les 0,5 seconde sans aléatoire, donc si beaucoup de fours tournaient en même temps, ils se regrouperaient probablement et provoqueraient de gros pics. Dans un cas de test artificiel de 500 fours fonctionnant en synchronisation, nous voyions 18 ms pour fonctionner sur tous les fours.
Les fours utilisent désormais un budget maximal de 0,25 ms par image pour régulariser le coût lors du fonctionnement à grande échelle. Cela ralentirait simplement le système, donc nous avons aussi fait quelques optimisations pour que chaque four fonctionne plus vite. Lors de la création d’un élément de sortie, nous créions un nouvel élément (par exemple, 1x métal fragment) et essayions d’ajouter cet élément à la sortie (ce qui ajoutait généralement +1 à la pile existante puis supprimait l’élément nouvellement créé). Il est beaucoup plus rapide de vérifier s’il y a déjà un élément dans la sortie et d’augmenter son compte, contournant ainsi le processus de création de nouveaux éléments (nous utilisons cette astuce sur le système Industrial depuis un moment). Chaque four itère également sur tous ses éléments pour trouver le carburant à chaque tick, qui est désormais mis en cache. Enfin, le four marquait son inventaire comme sale à chaque mise à jour du processus de cuisson (pour mettre à jour la progression animée sur l’icône de l’objet), qui ne se salit maintenant qu’en dépassant un seuil (5 %, 10 %, etc.), ce qui réduit considérablement la charge d’envoi de l’inventaire mis à jour.
Ces changements réduisent le test artificiel de 500 fours fondant du minerai métallique à un maximum de 0,25 ms, souvent moins que cela et sans changements visibles pour les joueurs.
Performance industrielle
Le système industriel a toujours été un défi en ce qui concerne la performance des serveurs. Les conceptions de bases et de tuyaux sont devenues de plus en plus élaborées et complexes au fil des années, ce qui révèle de nouveaux goulots d’étranglement dans la logique. Ce mois-ci, j’ai pu obtenir une copie d’une base extrêmement peu performante sur l’un de nos serveurs en direct, qui a été un benchmark utile. Dans certains cas, cette base dépensait 20 ms/image pour évaluer entièrement le système industriel, ce qui est évidemment un problème sur n’importe quel serveur.
Les principaux gains ici concernaient la réduction du nombre de fois où nous devions itérer sur des conteneurs d’objets et d’autres tableaux. À cette échelle, simplement obtenir un objet d’un conteneur peut être lent, car l’ordre des éléments en mémoire peut ne pas correspondre à celui des objets dans un conteneur, donc il faudrait potentiellement itérer sur tout le conteneur pour trouver quel objet se trouve dans un emplacement donné. Multipliez cela par chaque emplacement dans chaque entrée, en évaluant chaque emplacement sur chaque sortie, et le coût s’accumule rapidement. Faire une recherche rapide à laquelle nous pouvons nous référer pendant le processus industriel a été un gain considérable, dans certains cas, en contournant plus de 20 000 énumérations.
Vérifier que les éléments passaient les filtres nous faisait aussi perdre du temps, faire passer tout le conteneur d’entrée dans le filtre une seule fois au début du processus nous permettait de contourner encore plus d’énumérations. Cela signifiait aussi que nous pouvions retirer quelques couches de boucles imbriquées pour for. Le résultat final est que la base ci-dessus aurait maintenant un pic de 3 ms pour une image. C’est encore assez long, mais c’est une nette amélioration par rapport à l’étui original.
Système de relations
Le système RelationshipManager contrôle le système Contacts – prendre des photos des joueurs que vous rencontrez et suivre vos relations. C’est relativement limité en fonctionnalités, mais cela prenait pas mal de temps sur des serveurs très peuplés.
Cela consistait à itérer sur chaque joueur du serveur, à trouver les joueurs à portée, à vérifier s’ils étaient visibles (en utilisant un test physique) et à créer une nouvelle relation si besoin. Il passerait aussi en revue toutes les relations existantes qu’un joueur a, calculerait combien de joueurs ont marqué un joueur comme négatif et le signalerait comme hostile par défaut (par exemple, son badge sera rouge). Cela arrivait tous les 1 seconde sans aucune protection pour que beaucoup de joueurs déclenchent ce problème dans la même frame, ce qui pouvait entraîner des temps d’image très longs occasionnellement – jusqu’à 0,75 ms sur des serveurs chargés.
J’ai mis à jour ce processus pour utiliser une file d’attente budgétisée, donc nous ne ferons qu’un maximum de 0,15 ms de traitement par trame. Si d’autres joueurs ont besoin d’une mise à jour, elle attendra la frame suivante. Comme cette logique n’a pas besoin d’être parfaitement à jour, un léger délai est acceptable et ne sera probablement pas perceptible. J’ai aussi mis à jour le calcul de l’hostile pour qu’il ne s’exécute que si un joueur a modifié un contact (marqué ami/hostile/neutre), car dans la plupart des cas, ce calcul obtenait toujours le même résultat. Enfin, j’ai mis à jour la vérification de la ligne de vue lors de la création de nouveaux contacts pour utiliser le système d’occlusion serveur comme premier passage, ce qui signifie que nous pouvons souvent sauter le calcul physique.
Tailles des Contrôleurs de Joueurs
Nous supportons de changer la taille du collisionneur du joueur dans certains scénarios - lorsqu’il est au sol, en sommeil, monté sur les véhicules, etc. Cela s’appliquait en itérant sur chaque joueur du serveur, chaque frame, et en les mettant à jour selon les besoins. Sur un serveur modérément peuplé, cela prenait 0,25 ms, même si dans la plupart des cas il n’était pas nécessaire de mettre à jour la taille du collider.
J’ai amélioré cela pour utiliser une file d’attente budgétisée, donc il ne mettra à jour que 0,05 ms de joueurs par frame. Comme la taille du colisseur du joueur est assez importante, j’ai ajouté un ajustement manuel de la taille quand le joueur change d’état (par exemple, en veille), donc la taille devrait toujours être mise à jour immédiatement et non retardée de quelques images.
Volumes de parentalité
Nous avons un système dans Rust appelé « volumes parents » – comme son nom l’indique, ces volumes détectent si un joueur ou une autre entité est à proximité et doivent être parentés à un autre objet. Comme il y a beaucoup de cas limites, nous effectuons aussi des vérifications supplémentaires (comme des requêtes physiques) pour éviter les problèmes.
Les bateaux à venir créés par les joueurs en dépendent, et l’utilisent bien plus que tout autre chose dans le monde. Pendant le développement, nous avons découvert que cela ajoute un coût élevé au traitement des serveurs. Voici un exemple de 100 bateaux composés de 3 blocs et de 3 joueurs endormis :
Et voici combien cela coûte - , ce qui est beaucoup pour quelque chose qui n’est pas activement utilisé :
3,5 ms
J’ai pris le temps de réécrire cette logique qui s’exécute si est défini à (ce qui est par défaut). C’est maintenant :
TriggerParent.TickMode
1
• Utilise sa propre file d’attente de traitement au lieu d’invoquations, réduisant les blocages si le monde physique change entre les invokes individuelles
• Utilisation du traitement par lots et des travaux en rafale pour recouper le travail entre les threads lorsque possible
• Sauter le travail si le volume et son contenu n’ont pas bougé ou changé
En conséquence, le scénario ci-dessus prend désormais :
• 1,4 ms (-61 %) si chaque bateau bouge
• 0,25 ms (-93 %) si chaque bateau est statique
Pointes de spawn procédurales
En examinant notre télémétrie de performance, j’ai remarqué que nous subissons des pics de lag énormes et fréquents toutes les minutes environ :
Il s’avère que notre système d’entité-population avait du mal à faire réapparaître toutes les entités manquantes (en particulier les tas de déchets). Il fonctionne en suivant la densité d’une population sur le serveur, en exécutant plusieurs échantillons aléatoires du monde, en filtrant les invalides, puis en utilisant ces positions pour générer des entités.
J’ai écrit un outil qui simule le renouvellement de population( ), qui visualise comment fonctionne l’échantillonnage et pourquoi les échantillons sont rejetés. Diverses raisons de rejet sont codées par couleur, seul « Vert » étant le succès. Voici la visualisation des correctifs avant - (limite maximale) tentatives pour générer 800 tas de déchets :
spawn.dump_map <popname> [compte=100]
25000
Il s’avère que nous avions quelques bugs qui empêchaient à la fois la génération de nouvelles entités et des échantillons fixes même si nous n’avions pas d’entités à générer. En corrigeant cela et en relançant l’outil, on tente de faire apparaître 800 tas de déchets (il faut zoomer pour voir les pixels) :
3019
Cela a aussi eu un effet positif sur notre télémétrie au temps maximal d’image – les pics de lag sont beaucoup plus rares aujourd’hui :
Performance de l’AutoTurret
Les tourelles automatiques sont constamment un énorme poids pour les serveurs. C’est parce qu’ils font des mises à jour fréquentes de l’angle toutes les quelques secondes, ce qui arrive pour chaque tourelle sur un serveur. Chacune de ces mises à jour d’angle était constamment synchronisée via le réseau vers tous les clients voisins. Cela submergeait les clients avec une tonne de surcharge réseau inutile.
Le graphique ci-dessous montre la différence de temps d’exécution de la méthode utilisée pour transmettre ces valeurs sur le réseau. Le correctif est sorti à 22h sur nos serveurs de staging (vous pouvez voir la chute brutale après la mise en œuvre). Ce changement affecte également la Ballista et le nouveau Canon, réduisant leurs surcharges réseau à tous les deux.
SendAimDir()
Ces mises à jour d’angle étaient également effectuées pour chaque tourelle du fil principal sans beaucoup d’équilibrage de charge ni de régulation.
Pour contrer cela, j’ai introduit deux nouvelles boucles budgétaires, qui empêcheront un tas de tourelles automatiques de surconsommer les ressources du serveur. Cela sera plus évident sur les serveurs plus grands. Chacun des budgets serveurs pour les tourelles peut être configuré avec les Convars ci-dessous :
Un maximum de millisecondes peut être consacré par image aux mises à jour de l’angle de la tourelle et aux mises à jour générales
NOUVEAU - tick_update_ms (par défaut 1) -
Un maximum de millisecondes peut être passé par frame pour les tests de munitions de tourelle
NOUVEAU - ammo_update_ms
(par défaut 0.1) -
Combien de millisecondes peut-on passer par image à recueillir les angles de tourelle
scan_budget_ms
(par défaut 0,5) -
Performance de flottabilité
En préparation de la mise à jour navale, nous avions besoin d’un moyen pour que nos systèmes d’eau puissent supporter une grande quantité d’objets flottants dans les grandes profondeurs marines. Cela inclut non seulement les nouveaux bateaux des joueurs, mais aussi les objets flottants existants comme des cadavres ou du butin.
Le code de flottabilité lui-même était déjà assez optimisé et utilisait certaines de nos nouvelles API pour obtenir des éléments comme la hauteur de l’eau ou vérifier les collisions. Cependant, chaque objet en flottabilité exécutait des simulations pour lui-même, ce qui signifie qu’ils ont exécuté toutes les étapes individuelles de la flottabilité une par une.
Au lieu de faire des vérifications une par une, nous pouvons regrouper ces tests de flottabilité pour les faire passer sur tous les objets en utilisant plusieurs threads travailleurs. Auparavant, en logique simplifiée, nous vérifiions les hauteurs d’eau pour plusieurs points sur chaque objet, puis nous ajoutions des forces pour déplacer l’objet vers la surface de l’eau. Nous obtenons alors toutes les hauteurs de tous les objets flottants en même temps sur plusieurs threads, calculons leurs forces, puis réappliqueons enfin leurs forces sur le thread principal.
Cela finit par être 4 fois plus rapide dans un scénario avec 200 bateaux (chaque bateau ayant plusieurs points de flottabilité), et cela évolue mieux qu’avant à mesure que vous ajoutez plus d’objets.
Unité personnalisée / physx
La physique a longtemps été le goulot d’étranglement des performances des serveurs Rust. Au-delà de réduire le nombre de collisionneurs dans le monde, nous n’avons pas eu de moyen de réduire ce coût de manière significative. L’année dernière, cependant, nous avons obtenu la possibilité d’apporter des modifications personnalisées à notre propre version du moteur Unity et de déployer des mises à jour du jeu en l’utilisant.
On peut décomposer le tic physique de plusieurs façons. Le plus grand goulot d’étranglement pour la rouille est appelé le . C’est la partie du tick physique où l’on trouve rapidement des paires de collisionneurs susceptibles de se heurter, avant d’effectuer des calculs plus coûteux pour trouver des coordonnées précises à une étape ultérieure. Simplement à cause de la taille de la carte dans Rust et de la densité de collisionneurs des grandes bases, cela s’avère une opération coûteuse.
Broadphase
Nous avons apporté des modifications ciblées au moteur physique (PhysX), ce qui accélère considérablement cette partie du fonctionnement physique. Parlélaimer la phase large a été le plus grand impact que nous ayons pu apporter, en divisant chaque région en sa propre tâche planifiée sur tous les threads de tâches disponibles avant que les résultats ne soient à nouveau combinés sur le thread principal.
Le graphique ci-dessus montre le temps moyen passé sur le tick physique sur une longue période sur l’un de nos serveurs les plus actifs. Le point médian du graphe est quand nous sommes passés à la nouvelle version Unity avec nos bibliothèques PhysX personnalisées. L’amélioration des performances est assez drastique.
Pour garantir la sécurité de ces changements, nous avons déployé une mise à jour du serveur avant la mise à jour navale avec seulement le passage à la nouvelle version Unity/PhysX. Naturellement, tous ces gains de performance se sont transformés en augmentation des plafonds de joueurs, et le cycle recommence.
J’ai d’autres améliorations de PhysX/Unity en préparation pour l’avenir, donc les choses vont s’améliorer à partir de maintenant.
Performance du joueur monté - Bateaux
Quand un joueur était monté, nous réglions constamment sa position à la position montée à chaque frame plutôt que de simplement le parenter. La parentalité déplacerait automatiquement le joueur en position montée pour un coût relativement bas ou gratuit, alors que notre méthode de réglage est assez coûteuse. Il y a quelques raisons de base de code pour lesquelles nous devons définir chaque frame (en lien avec les volumes parents), mais j’ai réussi à en dépasser suffisamment pour pouvoir déployer un parenting montable sur quelques éléments montables sélectionnés. Pour l’instant, ce ne sera que des bateaux, mais je suis confiant que nous pourrons l’installer sur plus de tables montables à l’avenir. Ce coût était aussi augmenté par l’IA montée sur des véhicules, qui augmentait considérablement ce patch. Heureusement, ces améliorations corrigent aussi l’IA en augmentant le coût.
Avant, on montrait un serveur de test (environ 0,6 ms par frame à déplacer les joueurs) avec un faible nombre de joueurs (environ 20~) :
Avec des centaines d’IA, nous atteignons maintenant 0,02 ms sur la méthode parente de qui ne s’appelle même pas :
MountedPlayerSync
MountedPlayerSync
Performance de fourgon de queue
Le mois dernier, j’ai remarqué une baisse de performance inhabituelle en circulant dans Outpost, il s’est avéré que le train statique utilisait une quantité excessive de toiles, ce qui est maintenant réglé.
Cela a également eu un impact sur les joueurs à proximité du wagon-train de queue de queue dans la nature.
Performance du piège à fusil à pompe/tourelle à flammes
Nous avons remarqué des pics inhabituels causés par des tourelles à flammes et des pièges à fusil à pompe. Cela arrivait toutes les quelques secondes dans de grandes bases sans aucun TC. Assez rare, mais réglé quand même.
J’ai aussi réduit la surcharge réseau des tourelles à flammes. Ils envoyaient leur rotation à chaque joueur dans la portée du réseau toutes les 0,1 seconde, ce qui était inutile.
Profileur de serveur - Mode immédiat
Quelques jours avant le confinement interne, j’ai déployé une amélioration expérimentale : la capacité de capturer des régions spécifiques du code. Cela devrait être utile pour courir après des pics de lag ou mesurer du code en cours d’exécution peu fréquente. Voici quelques exemples d’utilisation :
ServerProfiler
enregistrer Run() et tous les internes, puis exporter un instantané en utilisant (ServerProfiler.RecordScope(« IndustrialQueue », RecordIndustrialQueueServerVar)) { industrialQueue.Run() ; } // OU // continuez à enregistrer et exportez uniquement lorsqu’ils passent plus de 5 ms en utilisant (ServerProfiler.RecordScopeIfSlow(« IndustrialQueue », TimeSpan.FromMilliseconds(5), RecordIndustrialQueueServerVar)) { industrialQueue.Run() ; }
Dans les deux cas, cela produira un fichier, que vous pouvez trouver localement dans server/<ident>/profiler/. Pour éviter d’inonder les instantanés et éviter trop de surcharge (l’enregistrement ralentit toujours les performances, l’export est asynchrone) :
IndustrialQueue.json.gz
• Il est fortement recommandé d’avoir un drapeau indiquant si les oscillations sont actives ou non (RecordIndustrialQueueServerVar par exemple)
• ServerProfiler dispose d’une période d’attente interne de 30 minutes après l’export, où les oscillations sont inactives. Configuré via le profil. ExportIntervalS, l’intervalle peut être réinitialisé avec profile. ResetExportInterval si vous ne voulez pas attendre
• L’ensemble de la fonctionnalité peut être désactivé via le profil. ImmediateModeEnabled (activé par défaut)
• Il est conçu pour du code qui tourne en 0,05 ms ou plus, donc ne l’utilisez pas pour profiler quelque chose de bon marché (installer le profileur et installer des crochets profileur coûte cher)
Twitch Drops - Home brew 4
Les Twitch Drops sont de retour !
Du 5 au 15 février !
Syntonisez pour voir des streams incroyables de certains de nos créateurs émergents préférés de la communauté Rust ! N’oubliez pas de réclamer vos Drops après avoir regardé ces créateurs fantastiques sur Twitch.
synchronisation
économiser 50 % de réduction sur Rust
Ahoy ! Pour célébrer la sortie tant attendue de la mise à jour navale, Rust est désormais à moitié prix pour une durée limitée ! et l’offrir à un ami pour attirer de nouveaux membres d’équipage !
Téléchargez-le sur Steam