Avec ce composant il est possible d'optimiser sa scène en jouant sur le Level Of Detail (LOD)
Il faut savoir avant toute chose que plus le meshes d'un modèle 3D est complexe et plus il y aura de vertices et triangles. Cette quantité définit en réalité le niveau de détail (Level Of Detail - LOD) d'un modèle 3D.
Mais cela possède un impact sur les performances globale de votre scène, et donc de votre jeu vidéo à terme.
Pourquoi utiliser le LOD avec Unity ?
Cette technique n'est pas forcément utile à toutes les situations, mais elle peut vous être très bénéfique pour optimiser quand le cas se présente.
Clairement pour un jeu vidéo 2D avec une projection orthographique, cela n'a aucun interêt ... En effet un Sprite dispose de très peu de vertices et triangles, contrairement à un mesh 3D.
De plus si votre caméra ne bouge pas (zoom - dézoom par exemple), ce ne sera pas utile non plus d'utiliser le composant LOD de Unity.
Si on récapitule, dans le cas où vous allez bouger la caméra 3D, tout en utilisant des modélisations 3D avancées, alors le composant LOD group de Unity est pour vous !
L'idée du composant LOD group est d'utiliser différentes versions du même modèle 3D, mais disposant de moins en moins de vertices et triangles. On dégrade certes la qualité du modèle 3D, mais comme on va s'éloigner avec la caméra, il est inutile d'avoir un niveau de détail élevé.
Ainsi au loin seuls les modèles 3D dégradés seront rendu à la caméra, réduisant ainsi le nombre vertices et triangles à rendre à l'écran. On optimise de fait les performances !
Composant LOD group de Unity
Le composant propose de base d'utiliser 3 niveaux de détails, nommé LOD 0, LOD 1, LOD 2. Et au-delà d'une distance maximale, le modèle sera tout simplement rendu invisible (culled)
Il est bien sûr possible d'ajouter d'autres niveaux de détails...mais il faudra bien sûr prévoir une autre version du modèle 3D.
L'idée de ce composant est donc de présenter au près de la caméra, le modèle associé au LOD 0. Puis en s'éloignant, et à partir d'une certaine distance le LOD 1 ... ainsi de suite jusqu'à ce que l'on juge que l'on puisse cacher le modèle (culled) car on est beaucoup trop loin.
De plus avec ce composant, il est possible d'ajouter des transitions lors du passage d'un LOD à un autre LOD, permettant de rendre moins "violent" la perte de détails.
Le pourcentage de chaque zone LOD définit dans la composant, correspond au pourcentage global que le modèle 3D occupe à l'écran. Ainsi lorsque le modèle n'occupera plus que 13% et moins de l'écran, le modèle correspondant au LOD 2 sera rendu à l'écran, les autres LOD 0 et LOD 1 seront cachés (ignorés).
Mettre en place le composant LOD group
Commencez dans une nouvelle scène, par créer un GameObject vide
clic droit dans la vue hierachy -> create -> empty GameObject
Puis ajoutez à ce gameObject le composant LOD Group dans la vue Inspector
add component -> LOD group
Désormais le reste du travail consiste à ajouter les modèles 3D en tant qu'enfants, puis à les assigner au composant selon leur LOD.
Mais pour cela nous avons bien sûr besoin de modèles 3D !
Dans le cadre de ce tutoriel nous allons utiliser un asset gratuit de l'Asset Store. Importez le dans Unity et ouvrez la scène exemple fournie.
Dans la scène exemple tout est déjà prêt, le gameObject qui porte le composant LOD group, et ses enfants ... 3 modèles de qualités décroissantes (LOD 0 vers LOD 2). Pour reconstruire l'exemple il suffit donc d'ajouter chaque prefab (fourni dans le package) en tant qu'enfant de notre gameObject vide crée précédemment.
Puis pour finir il faut assigner les enfants au composant.
Et c'est tout !
Le LOD group en action
Il suffit alors de lancer la scène, puis d'éloigner la caméra pour que l'effet LOD group prenne vie !
Vous pouvez aussi vous contenter d'éloigner la caméra sans lancer la scène, dans la vue Scene
Dans la vue Game, pensez à activer les stats pour observer les variations du nombre de "tris et verts" lorsque vous éloignez la caméra.
En vous éloignant vous devez observer que le nombre de vertices (verts) et triangles (tris) diminue et cela doit correspondre à l'éloignement qui est indiqué sur le composant LOD group.
L'idée maintenant est de vous laissez comparer en faisant le même test d'éloignement avec le prefab LOD 0, mais utilisé en dehors du LOD group. Puisque le LOD group ne sera pas utilisé, le moteur devra toujours rendre à l'écran le prefab LOD 0 , quelque soit l'éloignement... les stats devraient être moins bonnes !
Et c'est là tout l'interêt du composant LOD group de Unity.
Créer des modèles 3D dégradés
En effet ce n'est pas tout de pouvoir utiliser le composant, mais comment créer des modèles 3D dégradés à partir d'un modèle de haute qualité ?
Si vous n'êtes pas vous même modeleur, ou si vous ne travaillez pas avec un modeleur, cela va être tout de suite plus difficile !
Mais il existe tout de même des solutions, malheureusement payantes, mais qui peuvent même être super professionnelles.
Unity travaille conjointement avec le plugin pixyz , qui permet de générer automatiquement des LODs ! Par contre le prix est exhorbitant ... à utiliser que si vous êtes en entreprise et que votre besoin de création de LODS est quotidien !
Sur l'Asset store il existe aussi des solutions intéressantes à bien moindre coût, comme le package Automatic LOD.
Si aucune de ces solutions ne vous convient, alors il faudra le faire vous même ou le faire faire .
C'est maintenant à vous de jouer !
N'oubliez pas !
Avant de foncer dans l'utilisation du LOD group dans votre projet ... analysez réellement si cela peut vous apporter un plus ou si c'est inutile.