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

Utiliser le composant LOD group avec Unity : Unity

pictureProfil_alto
Ecrit par alto
Catégorie Unity
Mis à jour le 26/09/2020
Utiliser le composant LOD group avec Unity

Avec ce composant il est possible d'optimiser sa scène en jouant sur le Level Of Detail (LOD)

9 min Intermédiaire

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.

Ainsi on dira que plus la quantité est élevée et plus le LOD est élevé. 

Mais cela possède un impact sur les performances globale de votre scène, et donc de votre jeu vidéo à terme.

Il est indispensable d'avoir les bases de Unity pour pouvoir suivre ce tutoriel. Vous êtes débutant en création de jeux vidéo avec Unity ? Préférez nos Ateliers sur la prise en main de Unity
.

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 !

Cette technique du LOD est très utilisée pour gérer les forêts, qui au loin, seraient très gourmandes à rendre en terme de performances.

https://makeyourgame.fun/upload/users/alto/tutoriels/Lod/lodforestunity-5f6f6834a4361.png

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)

https://makeyourgame.fun/upload/users/alto/tutoriels/Lod/lodgroupunity-5f6f6807f3b9d.png

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.

https://makeyourgame.fun/upload/users/alto/tutoriels/Lod/lodtransition-5f6f798f1174a.gif

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). 

Sachez qu'il est aussi possible de scripter le comportement de ce composant grâce à l'API de Unity.

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.

https://makeyourgame.fun/upload/users/alto/tutoriels/Lod/lodgrouphierarchystructure-5f6f6b8250cba.png

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.

Si vous utilisez URP ou HDRP dans votre éditeur Unity, il faudra upgrader les materiaux. En effet ce package est prévu pour fonctionner de base avec le renderer built-in de Unity et pas URP ou HDRP. Retrouvez comment corriger les textures roses. 

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.

https://makeyourgame.fun/upload/users/alto/tutoriels/Lod/lodassignmodel-5f6f79ff6658c.gif

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.

https://makeyourgame.fun/upload/users/alto/tutoriels/Lod/activatestatsgame-5f6f6f1e1e4f1.png

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.

Il est à noter que certains modèles 3D de l'Asset Store sont livrés aussi avec des LODS.

Si aucune de ces solutions ne vous convient, alors il faudra le faire vous même ou le faire faire  https://makeyourgame.fun/sceditor/emoticons/angel.png .

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.

Vues: 1853

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