Virtual Assets dans l'Unreal Engine 5.1 : des synchronisations de données optimisées

5 décembre 2022
Disponible depuis peu, l'Unreal Engine 5.1 propose une nouvelle fonctionnalité pour optimiser la synchronisation des données : Virtual Assets.

Actuellement en version bêta, Virtual Assets offre un moyen de découpler les données structurées des données de masse. Ainsi, les développeurs synchronisent uniquement ce dont ils ont besoin depuis les systèmes de contrôle de source comme Perforce. S'ils n'ont pas besoin d'accéder à l'intégralité des données d'objets, ils bénéficient d'espaces de travail réduits et de synchronisations plus rapides.

Dans ce blog technologie, Grace Yen, responsable de produit senior, et Paul Chipchase, développeur principal de Virtual Assets dans l'équipe Unreal Engine, décrivent Virtual Assets afin que vous puissiez déterminer si cet outil convient à votre projet.

Quels sont les problèmes résolus par Virtual Assets ?

Au cours des dernières générations de développement de jeux, nous avons remarqué quelques tendances intéressantes concernant la taille des projets. Non seulement la taille des projets augmente (nous avons sondé de manière informelle certains de nos utilisateurs pour le vérifier), mais de nombreux développeurs s'orientent vers un modèle de jeu vidéo en tant que service (ou GaaS pour Game as a Service), avec des mises à jour constantes tout au long d'un cycle de vie pouvant durer des années.

Nous avons également vu des équipes faire évoluer continuellement la manière dont les mises à jour sont déployées. Certaines équipes optent pour des "flux de fonctionnalités" afin d'éviter que les nouveautés n'affectent le reste de l'équipe jusqu'à ce que la version soit stabilisée et prête à être déployée.

Nous avons observé que certains membres d'équipe travaillent en dehors des séries de mises à jour de leurs produits (pour faire fonctionner les jeux-services), et identifié des modèles avec des axes de développement de type "principal" et "avancé".

Cela pose un autre problème, car les membres d'équipe se retrouvent souvent à court d'espace SSD. Ils doivent parfois prendre des décisions peu économiques consistant à désynchroniser un axe de travail dont ils auront probablement besoin plus tard, afin de libérer de la place pour le travail en cours.

Avant la pandémie, certains studios (dont le nôtre) rencontraient des difficultés avec les tailles et les temps de synchronisation. Nous avons déployé des solutions comme les serveurs Performance Edge pour tenter de donner aux utilisateurs des points d'accès plus rapides. Toutefois, quand il a fallu travailler à domicile en 2020, nous avons commencé à souffrir du fait que les membres des équipes ne disposaient pas de connexions internet fiables, ou du moins, qu'ils avaient des débits très variables.

Constituer les meilleures équipes implique parfois de rassembler des membres qui se trouvent à différents endroits, et nous pensons que cette tendance va perdurer. Même dans un scénario hybride où les membres de l'équipe passent du temps sur deux sites, on peut avoir le problème aggravé de la synchronisation multiple avec le matériel affecté à chaque site.

Avec des technologies puissantes comme Nanite et le système de géométrie virtualisée de l'UE5, qui permettent d'obtenir des détails à l'échelle du pixel et un nombre élevé d'objets, nous nous attendons à ce que la taille des projets augmente encore à l'avenir.
En résumé, nous consacrons de plus en plus de temps et d'espace à la synchronisation, car :
  • Les projets sont de plus en plus volumineux.
  • Les jeux ont une durée de vie accrue et gagnent en contenu.

Le problème s'aggrave, car :
  • Les équipes doivent parfois synchroniser plusieurs axes de travail, liés par exemple à de nouvelles fonctionnalités ou à la gestion des services.
  • Le matériel physique (par exemple, les SSD) est plus coûteux et s'avère plus difficile et lent à obtenir.
  • Plus l'équipe est nombreuse, plus il est parfois difficile de travailler efficacement.
  • Les travailleurs hybrides et les travailleurs à distance ont des problèmes de synchronisation.
  • Les équipes qui commencent à exploiter Nanite obtiennent une plus grande qualité visuelle, mais aussi des ensembles de données plus volumineux.


Quelle est l'approche d'Epic concernant Virtual Assets ?

Notre solution Virtual Assets repose sur l'idée fondamentale que l'on ne doit synchroniser que les données dont on a besoin et que les données nécessaires ultérieurement doivent être rapidement accessibles.

C'est un changement par rapport à certaines méthodes que les équipes utilisaient pour contourner le problème. Les équipes (y compris la nôtre) sont devenues très douées pour inciter les développeurs à synchroniser de nuit, en planifiant longtemps à l'avance pour minimiser les temps d'arrêt. Virtual Assets n'enlève rien à cela. Ce que cette fonctionnalité offre, c'est un moyen plus rapide et plus efficace de synchroniser les données pour tout le monde, surtout lorsqu'on ne peut pas planifier et qu'une urgence survient sur un axe de travail qui n'est pas encore mis à jour.

Nous avons examiné nos fichiers d'empaquetage (.umap/.uasset) et avons identifié une belle occasion de réduire les données que les utilisateurs devaient synchroniser. Bien souvent, les utilisateurs n'ont besoin que d'une partie des informations sur une ressource pour pouvoir l'afficher de manière utile dans l'éditeur. Dans le cas d'une texture, par exemple, une vignette et des propriétés d'éditeur telles que les coordonnées et l'échelle suffisent souvent. Malheureusement, les données de masse d'un objet UTexture correspondent aux pixels bruts d'origine, dont on n'a pas forcément besoin. En nous basant sur ce constat, nous avons divisé les ressources en deux catégories :
  • Les "données structurées" restent là où sont vos ressources dans votre contrôle de source. Elles contiennent tout ce dont l'éditeur a besoin pour charger et représenter la ressource.
  • Les "données de masse" sont la partie dont on n'a probablement pas besoin. Elles sont affectées à une zone distincte du contrôle de source.
L'un de nos objectifs dans le développement de Virtual Assets était de maintenir les flux de travail existants de nos utilisateurs. Les membres d'équipe doivent pouvoir se synchroniser et travailler de la même manière, mais plus rapidement. En divisant et en laissant les métadonnées des ressources principales à l'emplacement d'origine, les utilisateurs peuvent synchroniser les données de la même manière qu'auparavant. En arrière-plan, l'outil se charge de récupérer les données de masse à partir d'un nouvel emplacement source si nécessaire. Pour mettre ce dispositif en place, vous devrez travailler avec votre administrateur de contrôle de source afin de configurer un emplacement séparé avec les mêmes autorisations d'accès que votre emplacement de contrôle de source original.

Récapitulatif :
  • On divise les ressources pour que les données de masse soient stockées dans un autre emplacement de contrôle de source.
  • Les utilisateurs travaillent comme avant, mais se synchronisent sur des ensembles de métadonnées de ressources plus restreints.
  • Dans les rares cas où ils ont besoin des données de masse dont ils ne disposent pas, les utilisateurs peuvent les récupérer à la demande.
 

Comment déployer Virtual Assets ?

La fonctionnalité Virtual Assets est actuellement en version bêta, ce qui signifie qu'il est possible de l'essayer, mais que sa forme est susceptible de changer. On doit donc l'utiliser avec prudence dans les projets de production. Nous tenons toutefois à souligner que cet outil s'est avéré suffisamment robuste pour la production de Fortnite à partir de la saison 22.

Plusieurs modes ont été implémentés pour aider les équipes à activer Virtual Assets :
En fonction de la taille du projet et du calendrier de production, plusieurs approches peuvent être essayées. Par exemple :
  • Sur un nouveau projet, nous recommandons l'activation de Virtual Assets dès le début.
  • Sur un projet en cours de production, mieux vaut éviter d'employer cette fonctionnalité pour les zones ou les ressources du jeu utilisées de façon intensive. En revanche, il est possible de faire une passe sur des ressources plus importantes qui n'ont pas été modifiées depuis longtemps.
  • Il est également possible de cibler les ressources principales en fonction de leur taille pour les virtualiser facilement.

Mises en garde :
  • Nous n'avons pas encore implémenté de mode de travail hors ligne, mais nous reconnaissons qu'il s'agit d'une fonctionnalité très utile. C'est une priorité sur notre liste et elle sera intégrée dans la version 5.2. Cela signifie que pour les utilisateurs qui travaillent sans connexion (par exemple, dans un avion), Virtual Assets ne sera pas complètement fonctionnel pour eux pour le moment. Ils risqueront de se retrouver à un endroit où ils ne peuvent pas récupérer les données de masse pour un élément qu'ils veulent modifier. L'éditeur ne devrait pas planter, mais il leur faudra se reconnecter pour récupérer les données de masse dont ils ont besoin.
  • Il y a une division des données primaires. Si ce n'est pas un problème en cours de production, c'est un élément supplémentaire à prendre en considération en cas de transfert de contenu du jeu en dehors de l'infrastructure existante. Dans ce cas, on peut utiliser l'outil autonome UnrealVirtualizationTool pour "réhydrater" les ressources virtualisées et leur rendre leur forme originale (en stockant à nouveau les données de masse dans le fichier d'empaquetage).
  • Cette implémentation ne fonctionne bien que si les utilisateurs ont accès à un cache de données partagé avec des débits de connexion satisfaisants. Dans le cas contraire, l'utilisateur constatera des ralentissements notables ; auquel cas, mieux vaut consacrer tout le temps et l'espace nécessaires à la synchronisation dès le départ. Nous reviendrons là-dessus dans la prochaine section.
  • Actuellement, seul le contrôle de source Perforce est pris en charge.
  • Cette technologie est toujours en phase bêta. Bien que nous ayons déployé Virtual Assets en interne et que nous travaillions actuellement dessus, nous ne pouvons pas garantir la date à laquelle cette fonctionnalité sera prête pour la production ni comment elle sera prise en charge à l'avenir.
 

La fonctionnalité Virtual Assets convient-elle à mon projet ?

Il n'y a pas de réponse définitive à la question de savoir si Virtual Assets peut vous être utile, car de nombreux facteurs sont à prendre en compte. Toutefois, les questions ci-dessous devraient vous aider à déterminer si vous devriez essayer cette solution. Il est aussi important de noter que la virtualisation n'est pas à sens unique. Vous avez toujours la possibilité de réhydrater tout ou partie de vos données virtualisées si vous le souhaitez.
  • Votre équipe rencontre-t-elle actuellement des problèmes d'espace disque ou pensez-vous que la croissance de vos données va se poursuivre jusqu'au point où vous rencontrerez ce type de problème ?
  • Les membres de votre équipe ont-ils souvent besoin de synchroniser plus d'une version de votre projet en partageant généralement une grande quantité de contenu entre les versions ?
  • Les membres de votre équipe ont-ils accès à un bon cache de données dérivées (CDD) partagé ?
    • C'est aussi une question importante. Si la plupart des membres de votre équipe ont accès à un CDD partagé, mais qu'il y a quelques exceptions, vous pouvez utiliser Virtual Assets pour l'ensemble du projet tout en permettant à certains membres de ne pas l'activer. Dans ce cas, ces membres "dévirtualisent" les ressources lorsqu'ils s'enregistrent, mais vous pouvez essayer d'exécuter des scripts pour détecter le problème et le résoudre automatiquement, même si cela se fait au détriment du contrôle de la source.
 

Conseils pour maximiser les avantages de Virtual Assets

  • Nous vous recommandons d'utiliser les flux de travail d'enregistrement d'Unreal Editor. Cette méthode met en place des contrôles pour s'assurer que les ressources sont toujours virtualisées au moment de l'enregistrement. Bien que nous fournissions certains outils qui peuvent s'exécuter à partir de Perforce pour vérifier les ressources virtualisées, il est toujours possible qu'un utilisateur omette cette étape.
 

Virtual Assets en action

Bien souvent, en ce qui concerne les fonctionnalités que nous intégrons dans l'Unreal Engine, nous aimons être nous-mêmes nos premiers clients. Nous avons implémenté Virtual Assets dans des projets internes/exemples, mais aussi dans Fortnite. Les chiffres ci-dessous sont fournis à titre indicatif pour vous donner une idée des gains d'espace et de temps que nous avons constatés pour Fortnite. Vos gains dépendront de la composition des types de ressources dans votre jeu. Par exemple, nous avons utilisé la fonctionnalité sur Valley of the Ancient (qui n'est pas vraiment un jeu), et grâce à l'utilisation intensive des maillages Nanite, nous avons obtenu une économie de 50x.

Pour Fortnite, voici ce que nous avons mesuré :

À venir

Dans l'Unreal Engine 5.1, Virtual Assets :
  • Fonctionne avec Perforce
  • Prend en charge les ressources texturales et audio
  • Propose différents modes à activer (par type de ressource, chemin d'empaquetage, ou tous)
  • Les données de masse sont référencées par un hachage du contenu de la ressource

Beaucoup d'autres fonctionnalités sont prévues pour Virtual Assets, notamment :
  • Un mode de travail hors ligne (synchronisation de toutes les données à l'avance)
  • La prise en charge de types de ressources supplémentaires (ex. maillages statiques, dont Nanite)
  • La prise en charge d'autres solutions de contrôle de source

Voilà qui conclut cet article. Nous espérons que ce blog technologie vous a été utile. Pour en savoir plus sur Virtual Assets, n'hésitez pas à consulter la documentation.

    Obtenez l'Unreal Engine dès maintenant !

    Procurez-vous l'outil de création le plus ouvert et le plus avancé au monde.
    L'Unreal Engine est prêt à l'emploi, avec toutes les fonctionnalités et un accès complet au code source.