Logo Makeyourgame
Accueil Les formations Créer un jeu Les ateliers Les tutoriels Blog Loterie
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

Réduisez vos draw calls avec le Static Batching de Unity : Unity

pictureProfil_alto
Ecrit par alto
Catégorie Unity
Mis à jour le 26/09/2020
Réduisez vos draw calls avec le Static Batching de Unity

A chaque fois que l'on veut dessiner un GameObject à l'écran , le moteur de Unity, envoie un draw call, comprenez appel pour dessiner, aux API graphiques telles que OpenGL ou direct3D.

4 min Débutant

Apprenez à optimiser votre jeu vidéo en utilisant le static batching.

Mais les "draw calls" sont gourmands en ressources, et comme le travail de fond à effectuer à chaque appel est conséquent, cela impact de fait le CPU.

Afin d'éviter de voir le FPS tomber et ainsi d'avoir un jeu injouable, nous devons apprendre à contrôler et surtout optimiser nos appels graphiques ou "draw calls".

Comment dessiner à l'écran avec Unity?

D'après la documentation, le moteur de jeu Unity utilise deux approches built-in pour gérer les "draw calls":

                                   
  • Le Dynamic batching: pour des Meshes assez petits, cela transforme leurs sommets sur la CPU, regroupe plusieurs sommets similaires et les dessine tous en une fois.
  •                                                                  
  • Le Static batching: combine les GameOjects statiques ("static" ie. qui ne bougent pas) en grands Meshes, et les dessine plus rapidement.
  •                                  

Ces techniques built-in ont de gros avantages. Par exemple elles permettent d'optimiser en réduisant ainsi les draw calls, tout en laissant la possibilité d'utiliser le culling individuellement pour autant.

Cependant elles ne sont pas parfaites. En effet le static batching consomme plus de mémoire/stockage et le dynamic batching provoque des pics au niveau du CPU.

Depuis les dernières versions de Unity, on dispose en plus du mode d'optimisation GPU instancing.

Préparer un Material au batching

Seuls des GameObjects qui partagent le même Material peuvent être "batchés" ensemble.

Sachez cependant que de manière générale c'est une bonne pratique de regrouper un maximum de GameObjects utilisant le même Material.
Super mais la plupart du temps les Textures changent d'un même modèle 3D à l'autre, impossible de regrouper ces GameObjects pourtant casi identiques..

Il suffit alors de réunir toutes les textures dans une seule grande image, et ainsi vos modèles partageront bien le même grand Material... Pour plus de détails renseignez vous sur les Texture atlases.

Pour aller plus loin

Utiliser le Dynamic batching

Unity gère automatiquement ce type de batching, vous n'aurez donc rien faire, si ce n'est de vérifier que vos Material respectent les conditions d'éligibilité.

                                   
  • En premier lieu on retrouve bien entendu le fait que vos Material sont bel et bien partagés par plusieurs GameObjects.
  •                                                                  
  • Mais il faut aussi savoir qu'il faut maintenir le nombre de vertex de dessous de 900, sinon le batching ne sera pas appliqué.
  •                                                                  
  • Retrouvez d'autres conditions spécifiques aux shaders.
  •                                  

 

Utilisez le Static batching

Le Static batching permet au moteur Unity de réduire les draw calls pour vos éléments à partir du moment où ces derniers partagent encore une fois le même Material ET qu'ils ne se déplacent pas (ie: statiques - static) .

Ce type de batching est souvent plus efficace que le Dynamic batching, mais il utilise plus de mémoire.

Afin de pouvoir utiliser le static batching, il suffit de cocher la case "Static" sur vos GameObject immobiles dans votre jeu vidéos (murs, routes, certaines props...)

https://docs.unity3d.com/uploads/Main/StaticTagInspector.png

 

Au final nous aurons fait un premier overview de la notion de batching sous Unity, ainsi que différents types de batching, permettant à terme d'optimiser votre jeu vidéo.

A ce jour les SkinnedMeshRenderer ou encore les composants de type Cloth, ne supportent pas le batching.

Vues: 3688

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