Le nouveau pipeline d'importation d'actifs : Une base solide pour accélérer les importations d'actifs

À partir de la version 2019.3, le nouveau pipeline d'importation d'actifs est utilisé par défaut pour les nouveaux projets, dans le but de vous faire gagner du temps en accélérant le changement de plateforme et en jetant les bases d'importations plus rapides. Nous améliorons également l'échelle du pipeline d'actifs pour les très grands projets. Lisez la suite pour en savoir plus sur les nouvelles améliorations, ainsi que sur nos motivations et considérations. Chaque fois que vous ajoutez une nouvelle ressource à votre projet, elle n'en fait pas partie tant que le pipeline d'importation de ressources ne l'a pas découverte et importée. La détection correcte de l'état du projet est la responsabilité de l'Asset Import Pipeline, qui vous permet d'interroger cet état par le biais de diverses API. En 2017, le travail de réécriture de l'Asset Import Pipeline a commencé à ouvrir la voie à une approche plus robuste et évolutive, tout en répondant à un certain nombre de points douloureux signalés par vous dans vos flux de travail quotidiens. Avec Unity 2019.3 (désormais disponible en version bêta), le nouveau pipeline d'importation d'actifs (également connu sous le nom de pipeline d'importation d'actifs V2) sera la mise en œuvre par défaut pour les nouveaux projets. Les projets plus anciens peuvent choisir de passer au nouveau pipeline d'importation d'actifs pour bénéficier des avantages de ce nouveau système. Le moment est venu de partager certaines des idées qui sous-tendent la nouvelle canalisation. Plus précisément, nous souhaitons partager les considérations prises pour s'assurer que le nouveau système est compatible avec les API existantes afin que les scripts n'aient pas à être réécrits lors de la mise à niveau vers le nouveau pipeline d'importation d'actifs.
De nombreux flux de travail font partie du cycle de développement quotidien. Nous avons identifié les problèmes qui prennent le plus de temps et nous avons mis en place des solutions pour les résoudre. L'importation d'actifs peut prendre beaucoup de temps. La conversion des données sources dans un format que l'éditeur Unity, ou une plateforme, est prêt à utiliser n'est pas un processus trivial. Par exemple, l'importation d'un modèle 3D complexe nécessite un grand nombre de calculs et, lorsqu'elle est combinée à l'animation, ce temps peut rapidement augmenter. Pour ce faire, trois concepts clés doivent être pris en compte dans le cadre de la solution :
Pour la plupart des types d'actifs, Unity doit convertir les données du fichier source, en fonction de la plateforme cible de vos projets. Le résultat varie selon les formats de GPU compatibles tels que PVRTC, ASTC ou ETC. En effet, la plupart des formats de fichiers sont optimisés pour économiser de l'espace de stockage, alors que dans un jeu ou toute autre application en temps réel, les données doivent être dans un format prêt à être utilisé immédiatement par le matériel, tel que l'unité centrale, les graphiques ou le matériel audio. Par exemple, lorsque Unity importe un fichier image PNG en tant que texture, il n'utilise pas les données PNG d'origine au moment de l'exécution. Au lieu de cela, lorsque la texture est importée, Unity crée une nouvelle représentation de l'image dans un format différent qui est stocké dans le dossier Library du projet. C'est cette version importée qui est utilisée par la classe Texture dans le moteur, et qui est téléchargée vers le GPU pour l'affichage en temps réel. C'est ce qu'on appelle le résultat de l'importation.
Nous devons savoir que vous et moi obtenons les mêmes résultats d'importation dans le même format exact, même si nous utilisons du matériel différent. Le principe de l'obtention du même résultat pour une entrée donnée est ce que nous appelons le déterminisme.
Le pipeline d'importation d'actifs garde la trace de toutes les dépendances pour chaque actif et conserve un cache des versions importées de tous les actifs. Les dépendances d'importation d'un bien sont toutes les données susceptibles d'influencer le résultat de l'importation. Cela signifie que si l'une des dépendances d'importation de votre ressource est modifiée, la version en cache de la ressource importée devient obsolète et la ressource doit être réimportée pour refléter ces changements.
Dans différentes situations, l'importation peut prendre beaucoup de temps. Nous avons identifié les deux flux de travail suivants et mis en œuvre deux solutions pour résoudre les problèmes susmentionnés : Importation de nouveaux projets et changement rapide de plate-forme.
Lorsque vous configurez un projet pour la première fois, c'est essentiellement la même chose que lorsque le dossier Bibliothèque est supprimé. Cela signifie que chaque actif du dossier assets doit être énuméré et importé par le pipeline d'importation d'actifs. Il s'agit naturellement d'une opération coûteuse. Cependant, en s'assurant que notre processus d'importation est déterministe et stable d'une machine à l'autre, le temps nécessaire pour récupérer les résultats de l'importation peut être réduit de plusieurs ordres de grandeur, en fonction de la taille de l'actif source et de la taille du résultat de l'importation. Pour ce faire, nous utilisons le nouvel accélérateur Unity qui met en cache les résultats d'importation sur le nuage à partir de toute personne connectée, ce qui vous permet de télécharger directement les résultats d'importation à partir d'un serveur plutôt que d'avoir à passer par le traitement lourd qu'impliquerait l'importation d'un actif.
Jusqu'à Unity 2019.2 (avec le pipeline d'importation d'actifs original), le dossier Library était composé des GUID des actifs et de leur nom de fichier. Ainsi, le passage d'une plate-forme à une autre invaliderait le résultat de l'importation dans le dossier Bibliothèque , ce qui obligerait à le réimporter chaque fois que l'on passe d'une plate-forme à une autre.

Si vous deviez passer d'une plateforme à l'autre plusieurs fois par jour, cela pourrait facilement prendre des heures, en fonction de la taille de votre projet.
Certains d'entre vous ont trouvé des solutions de contournement, comme d'avoir une copie de votre projet par plateforme sur votre machine, mais cela n'est pas très efficace.
Avec le nouveau pipeline d'importation d'actifs, nous avons supprimé la correspondance entre le GUID et le nom de fichier. Comme les dépendances d'un actif particulier sont suivies, nous sommes en mesure de les regrouper pour créer une révision du résultat de l'importation d'un actif. Cela nous permet d'avoir plusieurs révisions par ressource, ce qui signifie que nous ne sommes plus liés par une correspondance entre le GUID et le nom de fichier. L'absence de cette exigence nous permet d'avoir des résultats d'importation qui fonctionnent dans différentes configurations. Pour le changement rapide de plate-forme, nous pourrions avoir un résultat d'importation par plate-forme, de sorte que lorsque vous changez de plate-forme, le résultat d'importation est déjà là, ce qui rend le changement de plate-forme beaucoup plus rapide qu'avec l'Asset Import Pipeline V1.

Lorsque vous apportez des modifications aux actifs, Unity génère un certain nombre de nouveaux fichiers qui seront générés. Cela occupera plus d'espace de stockage sur votre disque. Cependant, nous avons décidé d'aborder ce problème en supprimant les résultats d'importation inutilisés lors du redémarrage de Unity. Nous gardons une trace du dernier résultat d'importation par plate-forme, de sorte que le changement rapide de plate-forme peut encore avoir lieu tandis que les résultats d'importation plus anciens sont supprimés, ce qui vous aide à libérer de l'espace disque.
Le nouveau pipeline d'importation d'actifs est disponible avec la version bêta d'Unity 2019.3. Si vous avez un projet existant, vous pouvez le mettre à niveau vers le nouveau pipeline d'importation d'actifs en utilisant la fenêtre des paramètres du projet dans l'éditeur :


En sélectionnant Version 2, vous indiquerez à l'éditeur que vous souhaitez désormais utiliser le nouveau pipeline d'importation d'actifs avec ce projet, et en redémarrant votre projet, vous le réimporterez en utilisant le nouveau code du pipeline d'importation d'actifs. Cette opération a essentiellement le même effet que la suppression du dossier Bibliothèque, mais sans le supprimer. Lorsque vous passez à l'utilisation d'Asset Import Pipeline V2, les résultats d'importation de l'Asset Import Pipeline d'origine ne sont pas supprimés, car V2 crée sa propre structure de dossiers pour stocker ses résultats d'importation.
Les projets que vous avez créés dans Unity 2019.2 ou une version antérieure utiliseront toujours le pipeline d'importation d'actifs original par défaut. Lorsque vous ouvrez un tel projet dans Unity 2019.3 pour la première fois, vous aurez une option de mise à niveau vers le nouveau pipeline d'importation d'actifs. Si vous refusez, votre projet continuera à utiliser le pipeline d'importation d'actifs original. En outre, la version sélectionnée est stockée dans le fichier EditorSettings.asset de votre projet, ce qui permet de contrôler la version.

Lors de la création d'un nouveau projet avec Unity 2019.3 ou plus récent, le nouveau pipeline d'importation d'actifs est devenu la nouvelle méthode de travail par défaut. Tous les nouveaux projets que vous créerez l'utiliseront.
À l'occasion de l'événement Unite Copenhagen 2019, notre équipe a présenté deux exposés. Mon intervention est une introduction générale aux sujets abordés dans ce billet de blog et peut vous aider à prendre des décisions pour vos propres stratégies de gestion d'actifs. Mon collègue Jonas Drewsen a parlé des prochaines fonctionnalités visant à rendre le pipeline d'actifs plus extensible et à garantir la stabilité des projets :
Téléchargez la version bêta d'Unity 2019.3 et essayez le nouveau pipeline d'importation d'actifs. Nous sommes impatients de connaître votre avis sur le forum! Vous pouvez également me contacter sur Twitter si vous avez d'autres questions.
