Logo Makeyourgame
Accueil Les formations Créer un jeu Les ateliers Les tutoriels Blog
Logo Makeyourgame
Les formations Les financements Les exercices La certification Unity
Logo Makeyourgame
Mes objectifs Les jeux Les ressources Le glossaire
Logo Makeyourgame
Les tutos Les tutos Youtube

Economisez quelques Draw Calls avec Sprite Packer de Unity : Unity

pictureProfil_alto
Ecrit par alto
Catégorie Unity
Mis à jour le 08/12/2022
Economisez quelques Draw Calls avec Sprite Packer de Unity

Apprenez comment économiser quelques Draw Calls avec Sprite Packer de Unity, une fonctionnalité ultra pratique et tellement simple d'utilisation.

9 min Débutant
Niveau: Intermédiaire Poste: Développeur.se et Graphiste 2D Moteur de jeu: Unity 2018.2

La recherche de performances de votre application doit faire partie de votre processus de développement. Non seulement cela vous permet d'assurer une expérience utilisateur sans "lag", mais en plus vous serez eco-responsables en économisant les batteries de vos utilisateurs.

Tous les Draw Calls, sans relâche tu analyseras !!

Analyse de la situation sans Sprite Packer

Prenons comme exemple d'étude une scène ultra simple, composée d'une Caméra, sans utiliser de Skybox (ie: Solid Color), avec une Light. Puis on va ajouter des éléments d'interface peu à peu, afin de voir l'impact de l'interface (IHM) sur les performances.

Mais avant toute chose il faut des images à utiliser pour l'interface.

En attendant le téléchargement et avant d'utiliser les images, lancer la scène et notez la valeur du FPS, des Batches et du Saved By Baches !!

https://makeyourgame.fun/upload/uploads/2018/11/statsSceneNew.png

...et observez le Frame Debugger (Window -> Frame Debuger). Amusez vous à essayer d'interpréter ce que vous voyez. " 1 batch , 0 batches saved"

Sachez qu'en cliquant sur Enable du Frame Debuger, vous capturez une frame !!

https://makeyourgame.fun/upload/uploads/2018/11/FrameDebugger-SpritePackerOff-1024x232.png

Le téléchargement est terminé ?

Nous allons ajouter un Panel, tout en utilisant une des images téléchargées, mais les première conclusions sont les mêmes avec le Sprite built-in de Unity. Puis on relance la scène, et on étudie les mêmes aspects ...

https://makeyourgame.fun/upload/uploads/2018/11/statsOnePanel-1024x1007.png

https://makeyourgame.fun/upload/uploads/2018/11/FrameDebuger-OnePanel.png

Observez vous quelque chose ?? Comment l'interpréter ?

A-t-on un nouvel appel réalisé ??

Et si on ajoute d'autres Sprites, donc d'autres éléments d'IHM ?

Justement ...amusez vous à ajouter Panel et Images, ou encore Button, tout en utilisant vos images, puis analysez les

https://makeyourgame.fun/upload/uploads/2018/11/statsButtons-1024x795.png

https://makeyourgame.fun/upload/uploads/2018/11/FrameDebugger3UI.png

Ici aussi de nouveaux appels sont apparus : 2 "Draw Mesh" en plus pour être exacts, 3 au total ...Tiens donc on a ici un Panel avec un fond Sprite, et 2 boutons avec 2 fonds Sprite, mais qui sont identiques. En effet les boutons utilisent ici la même image de fond (ie:Sprite) !! On a aussi bien entendu la font utilisée pour le texte des boutons. 3 appels pour l'IHM !!

Un Draw Call par Sprite à rendre !! Si le même Sprite est utilisé plusieurs fois dans la scène, un seul appel...

Ainsi plus l'interface sera complexe et chargée, et plus nous aurons d'appels, et c'est là que nous pouvons économiser en optimisant quelque peu les appels en utilisant Sprite Packer.

Des Sprites, un Atlas, un Spritesheet ..!?

Dans cette jungle de mots nouveaux, il faut l'avouer, on finit par se perdre !!

Pour faire court un Sprite est en quelque sorte un des formats (Sprite, Texture...) que Unity peut donner aux images que nous allons importer dans Unity.

Ensuite on peut regrouper les images avant importation ou après importation, dans une plus grande image parente en quelque sorte.

Une image unique pour les gouverner toutes !!

La grande image résultante, est appelée selon le contexte et/ou la technologie utilisée (ie: moteur de jeu) Spritesheet ou Atlas.

https://makeyourgame.fun/upload/uploads/2018/11/SpritePackerPack-992x1024.png

Un petit éclaircissement s'impose pour Atlas et Sprite Packer de Unity.

Comment utiliser Sprite Packer de Unity

Par défaut le Sprite Packer n'est pas activé dans l'éditeur, rendez vous dans Edit-> Project Settings -> Editor, et passer le mode Sprite Packer en "always enabled (legacy)".

Ensuite il faut assigner le Packing Tag de chaque Sprite que vous voulez mettre en Atlas. On peut donner le nom que l'on veut au tag, par contre pour les réunir...ben il faut leur donner à tous le même Tag !!

https://makeyourgame.fun/upload/uploads/2018/11/TagSpriteEditor-1024x496.png

Pour visualiser l'Atlas généré, au final par votre build, et une fois l'assignation du tag terminée, ouvrez Sprite Packer (Window -> Sprite Packer), puis cliquer sur "Pack"...et le tour est joué !

Si vous avez compris la règle précédente, vous pouvez ajouter d'autres éléments d'interface à votre scène. Puis relancez un test et analysez les valeurs et stats ...

https://makeyourgame.fun/upload/uploads/2018/11/statsSpritPackerOn-1024x776.png

https://makeyourgame.fun/upload/uploads/2018/11/FrameDebugSpritePackerOn-1024x764.png

La sentence est claire...3 batches, et surtout UN SEUL appel "Draw Mesh", juste pour l'Atlas qui a été généré !!

Mais pour quoi 3 batches au fait ??

  • 1 pour l'appel de l'Atlas dont les images sont utilisées sur l'interface
  • 1 appel pour la fonte
  • et un appel pour ? Fouillez un peu ce Frame Debuger ...

Autres possibilités ?

Vous pouvez bien sûr décider de vous passer de cet outil built-in Unity, et vous orienter vers d'autres solutions pour mettre en Atlas vos Textures et Sprites.

Il existe Texture Packer, logiciel payant, mais très efficace, sur lequel vous avez un bon contrôle lors de la mise en pack des Sprite (ie: images 2D). Ce logiciel est de plus très bien intégré avec Unity, puisqu'il existe un package gratuit, cette fois, sur l'asset store: Texture Packer Importer. Ce dernier permet de gérer l'importation dans Unity, des fichiers obtenus depuis Texture Packer.

Autres alternatives au Sprite Packer de Unity ? Jugez par vous mêmes !!

Vous connaissez d'autres alternatives ? Dites le nous !!

Vues: 2087

Licence:



Validation du Tutoriel

Veuillez vous connecter ou créer un compte pour pouvoir valider ce tutoriel et ainsi gagner de l'expérience (XP) !

Vous aimerez aussi...

Blog et Tutoriels

ScriptableObject

ScriptableObject

par alto

Un ScriptableObject est un conteneur de données que vous pouvez utiliser pour enregistrer de grandes quantités de données, indépendamment des instances de classe. L'un des principaux cas d'utilisation de ScriptableObjects est de réduire l'utilisation de la mémoire de votre projet en évitant les copies de valeurs.

applause logo0