s&box-france
Toutes les actualités s&box
Facepunch·

Mise à jour 26.07.15

Cette mise à jour introduit des NPC parlants, des options d'importation audio et des optimisations de terrain.

Mise à jour 26.07.15

NPC parlants

Ajoute des sous-titres et un synchronisme labial aux fichiers audio. C'est un peu comme dans HL2, mais en mieux.

Ouvrir la vidéo

Paramètres d'importation audio

Ajoute des options de traitement à l'importation pour les compilations audio, pilotées par le .meta du son et appliquées par le compilateur audio natif :

  • Forcer Mono — réduit tous les canaux à un seul
  • Couper le silence — supprime les échantillons de début/fin en dessous d'un seuil
  • Normaliser le volume — expose la normalisation LUFS existante, ciblant -16 LUFS
  • Gain (dB) — ajustement de volume fixe, ±24dB

Toutes ces options sont inactives sauf si elles sont définies, donc les compilations de contenu existant restent identiques. Les points de boucle sont résolus après la coupe, afin qu'ils correspondent à la chronologie que l'utilisateur a définie dans l'éditeur audio. Changer un paramètre enregistre le .meta et recompiles l'asset (les vsnds bruts ne sont pas dans le chemin de compilation automatique des ressources du jeu), amorti pour que les glissements de curseur et les modifications de sélection multiple produisent une compilation par asset au lieu d'une tempête de compilations obsolètes.

Masquage de couverture de hauteur pour les décalcomanies

Couverture de hauteur est une nouvelle fonctionnalité pour les décalcomanies qui permet d'utiliser une carte de hauteur comme un masque de visibilité supplémentaire. Elle sera disponible tant que votre décalcomanie a une texture de carte de hauteur valide qui lui est assignée. Elle est contrôlée par deux propriétés dans le composant de décalcomanie :

  • Montant de couverture : génère un masque de plage de hauteur basé sur le montant actuel, où 1 est complètement visible, et 0 est invisible. Ce paramètre a un type ParticleFloat, ce qui signifie que vous pouvez tirer parti des paramètres de durée de vie du décalque et l'utiliser non seulement pour des effets statiques, mais aussi pour des animations.
  • Plage de couverture : ajuste la douceur des bords du masque, où 0 sera net, et 0.5 est lisse. 

Voici à quoi cela ressemble en action :

Ouvrir la vidéo

Notez qu'il fonctionne comme un masque supplémentaire, ce qui signifie qu'il sera appliqué en plus des masques d'opacité/atténuation sur votre décalcomanie si vous en avez. Bien que ce masque soit entièrement compatible avec le parallaxe, il n'est pas nécessaire de l'utiliser. 

Pour les passionnés de shaders personnalisés, j'ai également mis à jour la documentation de la classe Decals, et fourni de nouvelles informations sur la lecture des paramètres de couverture de hauteur à partir d'un tampon d'octets, leur décodage et leur application. 

Culling de terrain

Notre implémentation des cartes de clip de terrain était basique et nous empêchait d'utiliser des techniques d'optimisation plus avancées. Cette semaine, j'ai passé en revue presque tous les aspects de notre solution de terrain afin de pouvoir l'accélérer.

Le maillage est maintenant divisé en morceaux plus granulaires que nous pouvons tester par rapport à la caméra pour effectuer un culling. Dans la plupart des cas, le joueur est au milieu du terrain où au moins 70 % du terrain n'est pas visible à la caméra. En éliminant tous ces morceaux, nous pouvons obtenir de belles améliorations de performance.

Ouvrir la vidéo


Cela vous permet d'ajouter plus de détails là où cela compte, dans le champ de vision de la caméra. Le culling est plus agressif dans la vidéo pour montrer le culling.

Ouvrir la vidéo

Optimisations d'ombrage du terrain


Notre autre gros goulet d'étranglement était le nombre élevé de récupérations de textures.

Nous avons ajouté un passage de pré-calcul afin de pouvoir cuire les données à l'avance au lieu de les recalculer à chaque image lors de l'ombrage.  Nous sommes passés à GatherRed où nous échantillonnions des texels voisins et les passes de profondeur ne font maintenant presque aucun travail.

Dans le meilleur des cas, nous sommes passés de 24 récupérations de textures à 1, et notre temps de rendu de référence a été divisé par deux.


Nous avons également corrigé certaines incohérences dans notre mélange de hauteur. Les rochers qui dépassent de l'herbe devraient maintenant se comporter correctement au lieu de s'estomper.

Ouvrir la vidéo

Serious Engine Mount

Serious Engine rejoint la liste des jeux montables (achetés et installés), vous pouvez jouer des cartes et faire apparaître des objets & personnages de jeux réalisés avec ce moteur.

Ouvrir la vidéo

Démos à la première personne

L'enregistrement de démos prend maintenant correctement en charge les vues à la première personne en capturant des propriétés comme les balises de rendu et le drapeau Absolu. De plus, nous avons corrigé un bug d'enregistrement qui pouvait légèrement désaligner les valeurs capturées sur des pistes séparées, ce qui faisait vibrer les modèles de vue.

Ouvrir la vidéo

Améliorations des images clés de film

Grâce à vos retours, nous avons un lot de corrections et d'améliorations de qualité de vie pour le mode d'édition des images clés de Movie Maker. Cela inclut la correction du dernier image clé parfois sautée dans les films compilés, l'enregistrement du mode d'interpolation sélectionné en tant que cookie, et l'ajout d'un moyen de changer les valeurs de plusieurs images clés dans le menu contextuel.

Ouvrir la vidéo

Système de docking avancé

Dans l'éditeur, nous avons des docks, Qt les a intégrés mais ils sont mauvais, donc nous avons utilisé toolwindowmanager, ce n'était pas mal mais avait beaucoup de défauts - maintenant nous utilisons Qt Advanced Docking.

Dans l'ensemble, cela nous donne un système de docking de style IDE beaucoup plus complet et poli qui devrait être beaucoup plus stable, sans que nous ayons besoin de patcher le système de docking nous-mêmes.

ADS nous donne une base plus capable pour des fonctionnalités telles que :

  • Widgets centraux
  • Épinglage et masquage automatique 
  • Surbrillance de focus 
  • Menus d'onglets plus riches
  • Fermeture de groupes d'onglets
  • Groupes d'onglets flottants
  • Meilleur verrouillage des docks
  • Gestion de la taille minimale
  • État de mise en page plus cohérent
  • Corrections spécifiques à la plateforme futures

De plus, l'API est beaucoup plus simple pour créer et ajouter vos propres docks où le code était auparavant dupliqué avec DockManager.RegisterDockType, cette méthode est maintenant supprimée.

Widget de scène central

Depuis longtemps, je voulais créer des outils qui utilisent un widget central avec des docks autour, avec le système de docking avancé, nous pouvons maintenant le faire. L'éditeur de scène principal en fait déjà usage, donc nous n'avons pas besoin d'un dock par session de scène.

Cela nous sauve dans de nombreux cas où vous pourriez fermer votre dock de scène et foutre en l'air toute votre mise en page. Et si vous êtes en colère de ne plus pouvoir dock votre scène à l'intérieur de votre navigateur d'assets, tant pis.

Améliorations de peinture de vertex de mapping

La peinture de vertex dans les outils de mapping manquait de certaines fonctionnalités, donc j'ai travaillé sur une liste de choses que je voulais et que la communauté voulait.

Cela inclut ;

Remplissage de zone

Ouvrir la vidéo

Remplissage de zone - Bruit

Ouvrir la vidéo

Remplissage de zone - Occlusion

Ouvrir la vidéo

Remplissage de zone - Courbure

Ouvrir la vidéo

Ainsi que le support pour inverser et effacer les données de peinture.

Aussi quelques gain de temps rapides ;

Améliorer le lift de couleur

Ouvrir la vidéo

Sélection rapide de couleur

Ouvrir la vidéo

Échelle de distance de pinceau

Ouvrir la vidéo

Liste de saut de barre des tâches

Ajouté cela à nouveau, si vous épinglez l'éditeur s&box à votre barre des tâches, vous pouvez lancer des projets rapidement avec cela.

Erreur de métriques de performance

Je vais vous ennuyer avec quelques statistiques. Nous avons récemment commencé à nous demander pourquoi nos temps de phase de cadre individuels montraient un déclin constant au cours des derniers mois, alors que notre temps de cadre moyen global restait relativement stable.


Il ne faut pas être mathématicien pour voir que quelque chose concernant notre suivi des métriques était défectueux jusqu'à la semaine dernière :


Deux problèmes :

1. Nous agrégions les données de manière incorrecte. Nous utilisions :

FrameTimeAvg = (FrameTimeAvg + FrameTimeNew) / 2.0f

Cela fausse fortement la moyenne vers le timing le plus récent. Par exemple, disons qu'un millier de frames à 16ms ont déjà été agrégés, puis une seule frame à 100ms arrive. La moyenne passerait à 58ms.
Pour corriger cela, nous utilisons maintenant l'algorithme de Welford pour une moyenne mobile précise.

2. Nous incluions le temps d'inactivité dans notre temps de cadre global :
Le temps d'inactivité est le temps que le jeu passe à dormir entre les frames lorsqu'une limite de frame est définie. Cela signifie qu'un client verrouillé à 60 FPS rapporterait toujours 16,6ms, même lorsque le travail réel par frame est beaucoup plus bas. Nous suivons maintenant le temps d'inactivité séparément, afin que nous puissions surveiller le temps réel passé à calculer une frame.

Comme vous pouvez le voir dans le graphique, le temps d'inactivité représente une part significative du temps de cadre global, puisque la plupart des clients fonctionnent avec une limite de fps.

TL;DR Nous avons travaillé sur la performance ces derniers mois, mais les améliorations n'étaient pas vraiment visibles dans toutes nos métriques. Nous avons amélioré le suivi des métriques et continuerons à travailler dessus.