Ce que vous obtiendrez de cette page : Conseils pour l'optimisation des ressources artistiques, pour les développeurs de jeux mobiles travaillant avec Unity. Ceci est le premier de deux articles sur l'optimisation de l'art pour les jeux mobiles.
Vous trouverez de nombreux autres conseils d'optimisation mobile dans ce livre électronique complet et ce cours Unity Learn sur Optimisation de l'art 3D pour les applications mobiles.
Les polygones et les sommets sont coûteux en calcul sur les plateformes mobiles. Placez les polygones dans les zones qui contribuent réellement à la qualité visuelle de l'application, afin de ne pas gaspiller votre budget de traitement.
En raison de la petite taille de l'écran de la plupart des appareils mobiles et de l'emplacement des objets 3D dans votre application, de nombreux petits détails triangulaires d'un objet 3D peuvent ne pas être visibles. Cela signifie que vous devez vous concentrer sur les grandes formes et les parties qui contribuent à la silhouette de l'objet, plutôt que sur les petits détails qui pourraient ne pas être visibles. Utilisez des textures et des cartes normales pour obtenir des détails précis.
Au fur et à mesure que les objets s'éloignent, le niveau de détail (LOD) peut les ajuster ou les faire basculer vers des maillages plus simples avec des matériaux et des shaders plus simples afin d'affiner les performances du GPU.
Plus de conseils pour la préparation du LOD
- Supprimez plus de polygones sur les zones plates et n'utilisez pas de zones denses de triangles sur les objets à faible LOD.
- LOD peut également s'appliquer à la complexité des shaders. Le shader et le matériau peuvent être optimisés pour des objets 3D plus éloignés. Par exemple, vous pouvez réduire le nombre de textures utilisées par un objet à mesure qu'il s'éloigne de la caméra.
- Il est souvent intéressant de réduire de 50 % le nombre de triangles entre chaque niveau de LOD.
- Vérifiez l'aspect du LOD à différentes distances de la caméra.
- Une topologie propre est essentielle pour les personnages et les objets déformés ou animés.
- Ne vous souciez pas d'avoir une topologie parfaite. Le joueur ou l'utilisateur final ne verra pas l'image filaire d'un modèle 3D une fois que vous aurez appliqué une texture et un matériau.
Quand ne pas utiliser le LOD
Le LOD n'est pas adapté à toutes les situations. Par exemple, évitez de l'utiliser dans une application où la vue de la caméra et les objets sont statiques, ou lorsque l'objet utilise déjà un faible nombre de polygones. LOD s'accompagne d'une surcharge de mémoire et d'une taille de fichier plus importante, car les données de maillage doivent être sauvegardées pour pouvoir être utilisées en temps réel.
Vous pouvez combiner plusieurs maillages en un seul afin de réduire le nombre d'appels de dessin nécessaires au rendu. Pour appliquer cette technique, créez un GameObject vide dans la Hiérarchie et faites-en le parent des maillages que vous souhaitez combiner, puis attachez un script implémentant la méthode Mesh.CombineMeshes() au GameObject parent.
Utiliser l'élimination des occlusions
Les objets cachés derrière d'autres objets peuvent potentiellement toujours être rendus et coûter des ressources. Utilisez l'option Occlusion Culling pour les éliminer.
Alors que l'élimination des frustes en dehors de la vue de la caméra est automatique, l'élimination des occlusions est un processus cuit au four. Il suffit de marquer vos objets comme Occludeurs statiques ou Occludeurs statiques, puis d'effectuer une cuisson dans la boîte de dialogue Fenêtre > Rendu > Occlusion Culling . Bien que cela ne soit pas nécessaire pour toutes les scènes, le culling peut améliorer les performances dans de nombreux cas. Pour plus d'informations, consultez le tutoriel Travailler avec l'atténuation de l'occlusion.
Voici quelques bons conseils à garder à l'esprit lorsque vous importez vos modèles.
- Type d'animation : Lors de l'importation d'un Mesh FBX qui ne contient pas de données d'animation, réglez le Type d'animation sur Aucun dans l'onglet Rig des Paramètres d'importation. Lorsque vous placez votre mesh dans la hiérarchie, ce paramètre permet de s'assurer qu'Unity ne génère pas de composant Animator inutilisé.
- Désactiver les rigs et les BlendShapes : Si votre maillage n'a pas besoin d'animation de squelette ou de blendshape, désactivez ces options dans la mesure du possible.
- Désactiver les normales et les tangentes : Si vous êtes absolument certain que le matériau de maillage n'aura pas besoin de normales ou de tangentes, décochez ces options pour réaliser des économies supplémentaires.
- Paramètres d'importation Si votre modèle n'est pas modifié au moment de l'exécution, désactivez l'option Read/Write Enabled (lecture/écriture activée) dans l'onglet Model (modèle) des Import Settings (paramètres d'importation) afin d'éviter qu'une copie ne soit créée en mémoire.
- Mélange statique/dynamique : La mise en lots statique est une technique d'optimisation courante qui réduit le nombre d'appels de dessin. Elle est idéale pour les objets composés d'un grand nombre de vertices qui ne se déplacent pas, ne tournent pas et ne changent pas d'échelle pendant le rendu. Cochez la case Statique dans l'inspecteur contenant le rendu de maillage de votre modèle cible.
Les textures peuvent être de différentes tailles. La réduction de la taille des textures qui nécessitent moins de détails permet de réduire la bande passante. Par exemple, une texture diffuse peut être réglée sur 1024 x 1024, et la carte de rugosité/métallique correspondante peut être réglée sur 512 x 512. Faites de votre mieux pour réduire de manière sélective la taille des textures et vérifiez toujours si les images ont été dégradées par la suite.
La plupart des logiciels de texturage utilisent et exportent des textures en utilisant l'espace colorimétrique sRGB.
Nous vous recommandons d'utiliser des textures diffuses dans l'espace colorimétrique sRGB. Les textures qui ne sont pas traitées en tant que couleurs ne doivent pas se trouver dans l'espace colorimétrique sRGB. Les textures comprennent par exemple les cartes métalliques, les cartes de rugosité et les cartes normales, les cartes étant utilisées comme des données plutôt que comme des couleurs. L'utilisation de sRGB dans ces cartes entraînera une mauvaise visualisation du matériel.
remarque Assurez-vous que le paramètre sRGB (texture de couleur) dans la fenêtre de l'inspecteur n'est pas coché à côté de la rugosité, de la spécularité, des cartes normales ou d'éléments similaires.
Les éléments tels que l'occlusion ambiante et les petits reflets spéculaires peuvent être intégrés et ajoutés à la texture diffuse. Cette approche signifie que vous ne devez pas trop compter sur les shaders coûteux en calcul et les fonctionnalités d'Unity pour obtenir des reflets spéculaires et l'occlusion ambiante.
Dans la mesure du possible, utilisez des textures en niveaux de gris qui permettent une mise en couleur dans le shader. Cela permet d'économiser la mémoire de la texture au prix de la création d'un shader personnalisé pour effectuer la mise en teinte. Soyez sélectif avec cette technique, car tous les objets ne sont pas beaux à voir avec cette méthode. Il est plus facile d'appliquer cette méthode à un objet dont la couleur est uniforme.
Le filtrage des textures améliore souvent la qualité des textures dans une scène, mais il peut aussi dégrader les performances, car l'obtention d'une meilleure qualité de texture nécessite souvent un traitement plus important. Le filtrage des textures peut parfois représenter jusqu'à la moitié de la consommation d'énergie du GPU. Le choix de filtres de texture plus simples et plus appropriés peut contribuer à réduire les besoins en énergie d'une application.
- Filtrage des points les plus proches : Il s'agit de la forme de filtrage de texture la plus simple et la moins exigeante en termes de calcul, même si, vu de près, ce filtrage peut donner aux textures une apparence de bloc.
- Filtrage bilinéaire : Le filtrage bilinéaire échantillonne et fait la moyenne des texels voisins pour colorer les pixels d'une texture. Contrairement au filtrage le plus proche, le filtrage bilinéaire permet d'obtenir des pixels moins complexes, car les pixels ont un gradient lisse. Le filtrage bilinéaire a pour effet secondaire de rendre les textures floues lorsqu'elles sont observées de près.
La majeure partie de votre mémoire sera probablement consacrée aux textures, et les paramètres d'importation sont donc essentiels. D'une manière générale, essayez de suivre les lignes directrices suivantes lors de l'importation de vos actifs.
- Diminuer la taille maximale : Utilisez les réglages minimums qui produisent des résultats visuellement acceptables. Cette opération n'est pas destructive et permet de réduire rapidement la mémoire des textures.
- Utilisez les puissances de deux (POT) : Unity exige des dimensions de texture POT pour les formats de compression de texture mobile (PVRCT ou ETC).
- Atlas vos textures : Le fait de placer plusieurs textures dans une seule texture permet de réduire les appels de dessin et d'accélérer le rendu. Utilisez le Sprite Atlas de Unity ou le TexturePacker detierce partie pouratlaser vos textures.
- Désactive l'option Read/Write Enabled (lecture/écriture activée) : Lorsqu'elle est activée, cette option crée une copie dans la mémoire adressable par le CPU et le GPU, ce qui double l'empreinte mémoire de la texture. Dans la plupart des cas, cette fonction est désactivée. Si vous générez des textures au moment de l'exécution, appliquez cette règle via Texture2D. Appliquer, en passant par makeNoLongerReadable fixé à true.
- Désactiver les mipmaps inutiles : Les Mipmaps ne sont pas nécessaires pour les textures qui conservent une taille constante à l'écran, comme les sprites 2D et les graphiques d'interface utilisateur. Laissez les mipmaps activés pour les modèles 3D dont la distance par rapport à la caméra varie.
- Utiliser le filtrage bilinéaire : Cela permettra de trouver un équilibre entre la performance et la qualité visuelle.
- Utiliser le filtrage trilinéaire de manière sélective : Il nécessite une plus grande largeur de bande de mémoire que le filtrage bilinéaire.
- Utiliser le filtrage bilinéaire et le filtrage anisotropique 2x : Choisissez-les à la place de trilinéaire et 1x anisotrope, pour améliorer à la fois l'apparence et la performance.
- Maintenir le niveau d'anisotropie à un niveau bas : N'utilisez un niveau supérieur à 2 que pour les éléments critiques du jeu.
Utilisez la compression adaptative et évolutive des textures (ATSC) pour iOS et Android. La grande majorité des jeux en cours de développement tendent à cibler des appareils de taille réduite qui prennent en charge la compression ATSC. Les seules exceptions sont les suivantes :
- Jeux iOS destinés aux appareils A7 ou moins (par exemple, iPhone 5, 5S, etc.) : Utiliser le PVRTC
- Jeux Android destinés aux appareils antérieurs à 2016 : UseEricsson Texture Compression (ETC2)
L'empaquetage des canaux de texture permet d'économiser la mémoire des textures, car il est possible de regrouper trois cartes dans une seule texture. Cela signifie qu'il y a moins d'échantillonneurs de textures. Cette approche est couramment utilisée pour regrouper la rugosité, la douceur et/ou la métallisation dans une seule texture. Il peut également être appliqué à n'importe quel masque de texture. Par exemple, vous pouvez également stocker le masque alpha. Les images avec des transparences peuvent avoir une empreinte mémoire plus importante puisqu'elles nécessitent un format 32 bits, mais en utilisant le canal libre pour stocker le masque alpha, vous pouvez garder la texture diffuse à 16 bits et diviser efficacement la taille du fichier par deux.
Utilisez le canal vert pour stocker le masque le plus important. Le canal vert comporte généralement plus de bits, car nos yeux sont plus sensibles au vert et moins au bleu.
Une carte UV projette des textures 2D sur la surface d'un modèle 3D. Le déballage UV est le processus de création d'une carte UV.
- La meilleure pratique consiste à garder les îlots UV, les unités individuelles d'une texture non enveloppée, aussi droits que possible afin de faciliter l'empaquetage des îlots UV et de réduire l'espace perdu. Un UV droit permet également d'éviter l'effet d'escalier sur les textures.
- Sur les plateformes mobiles, l'espace de texture est limité. La taille des textures est donc généralement plus petite que sur une console ou un PC. Un bon conditionnement des UV permet d'obtenir la meilleure résolution possible de vos textures.
- Envisagez d'avoir un UV légèrement déformé en gardant l'UV droit pour obtenir des textures de meilleure qualité.
- Dans certains cas, vous devrez exagérer et mettre en évidence les bords et les ombres pour améliorer la lisibilité de la forme. Les plateformes mobiles utilisant généralement des textures plus petites, il peut être difficile de capturer tous les détails nécessaires dans ce petit espace.
- Pour les applications mobiles, utilisez moins de textures et intégrez tous les détails supplémentaires dans une texture. Ceci est important car certains détails sont mieux intégrés dans la texture diffuse elle-même afin de s'assurer que ces détails sont visibles sur les petits écrans des téléphones portables.