Hero background image

Conseils d'optimisation mobile pour les artistes techniques - Partie I

Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.

Ce que vous obtiendrez de cette page : Conseils pour optimiser les ressources artistiques, pour les développeurs de jeux mobiles travaillant avec Unity. C'est le premier de deux articles sur l'optimisation de l'art pour les jeux mobiles.

Vous pouvez trouver de nombreux autres conseils d'optimisation mobile dans ce livre électronique complet et ce cours Unity Learn sur l'optimisation de l'art 3D pour les applications mobiles.

Rendu 3D d'un personnage robot

Concentrez-vous sur la silhouette

Les polygones et les sommets sont coûteux en calcul sur les plateformes mobiles. Placez les polygones dans des 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 sur la plupart des appareils mobiles et de l'emplacement des objets 3D dans votre application, de nombreux petits détails triangulaires sur 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 les détails fins.

Exemples de LOD

Utilisez le Niveau de Détail (LOD)

À mesure que les objets s'éloignent, Niveau de Détail (LOD) peut les ajuster ou les changer pour utiliser des maillages plus simples avec des matériaux et des shaders plus simples afin d'affiner les performances du GPU.

Plus de conseils de préparation LOD

  • Supprimez plus de polygones sur les zones plus plates, et n'utilisez pas de zones denses de triangles sur des objets avec un LOD inférieur.
  • Le LOD peut également s'appliquer à la complexité des shaders. Le shader et le matériau peuvent être optimisés pour les objets 3D qui sont plus éloignés. Par exemple, vous pouvez réduire le nombre de textures qu'un objet utilise à mesure qu'il s'éloigne de la caméra.
  • Il vaut souvent la peine de réduire le nombre de triangles entre chaque niveau de LOD de 50 %.
  • Vérifiez à quoi ressemble le LOD à différentes distances de la caméra.
  • Une topologie propre est essentielle pour les personnages et les objets qui se déforment ou sont animés.
  • Ne vous obsédez pas à avoir une topologie parfaite. Le joueur ou l'utilisateur final ne verra pas le filaire d'un modèle 3D une fois que vous avez appliqué une texture et un matériau.

Quand ne pas utiliser LOD

Le LOD n'est pas adapté dans toutes les situations. Par exemple, évitez de l'utiliser dans une application où à la fois la vue de la caméra et les objets sont statiques, ou où l'objet utilise déjà un faible nombre de polygones. Le LOD entraîne une surcharge mémoire et une taille de fichier plus grande car les données de maillage doivent être enregistrées pour pouvoir être utilisées en temps réel.

Occlusion dans Unity

Combinez les maillages et cachez les objets

Vous pouvez combiner plusieurs maillages en un seul pour réduire le nombre d'appels de dessin nécessaires pour le 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.

Utilisez le culling d'occlusion

Les objets cachés derrière d'autres objets peuvent encore être rendus et coûter des ressources. Utilisez le culling d'occlusion pour les écarter.

Alors que le culling de frustum en dehors de la vue de la caméra est automatique, le culling d'occlusion est un processus préalablement calculé. Il suffit de marquer vos objets comme Static Occluders ou Static Occludees, puis de cuire à travers le dialogue Window > Rendering > Occlusion Culling . Bien que ce ne soit pas nécessaire pour chaque scène, le culling peut améliorer les performances dans de nombreux cas. Consultez le tutoriel Working with Occlusion Culling pour plus d'informations.

Importer des modèles dans Unity

Importation de modèles

Voici quelques bons conseils à garder à l'esprit lorsque vous importez vos modèles.

  • Type d'animation: Lors de l'importation d'un maillage FBX qui ne contient aucune donnée d'animation, définissez le type d'animation sur Aucun dans l'onglet Rig des paramètres d'importation. Lorsque vous placez votre maillage dans la hiérarchie, ce paramètre garantira qu'Unity ne génère pas de composant Animator inutilisé.
  • Désactiver les rigs et BlendShapes: Si votre maillage n'a pas besoin d'animation squelettique ou de blendshape, désactivez ces options autant que possible.
  • Désactiver les normales et tangentes: Si vous êtes absolument certain que le matériau du maillage n'aura pas besoin de normales ou de tangentes, décochez ces options pour des économies supplémentaires.
  • Paramètres d'importation: Si votre modèle n'est pas modifié à l'exécution, désactivez l'option Read/Write Enabled dans l'onglet Modèle des paramètres d'importation pour éviter qu'une copie ne soit créée en mémoire.
  • Static/Dynamic Batching: Le Batching statique est une technique d'optimisation courante qui réduit le nombre d'appels de dessin. C'est idéal pour les objets composés d'un grand nombre de sommets qui ne bougent pas, ne tournent pas ou ne changent pas d'échelle pendant le rendu. Cochez Statique dans l'Inspecteur contenant le Mesh Renderer de votre modèle cible.
Comparaison de la compression des textures

Tailles de texture et espace colorimétrique

Les textures peuvent avoir des tailles différentes. Réduire la taille des textures qui nécessitent moins de détails aidera à 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 associée peut être réglée sur 512 x 512. Faites de votre mieux pour réduire sélectivement la taille de la texture, et vérifiez toujours si des visuels ont été dégradés par la suite.

La plupart des logiciels de texturisation fonctionnent avec et exportent des textures en utilisant l'espace colorimétrique sRGB.

Nous recommandons d'utiliser des textures diffuses dans l'espace colorimétrique sRGB. Les textures qui ne sont pas traitées comme des couleurs ne doivent pas être dans l'espace colorimétrique sRGB. Des exemples de ces textures incluent les cartes métalliques, de rugosité et normales, car les cartes sont utilisées comme données plutôt que comme couleur. Utiliser sRGB dans ces cartes entraînera un visuel incorrect sur le matériau.

Remarque : Assurez-vous que le paramètre sRGB (texture couleur) dans la fenêtre de l'Inspecteur n'a pas de cases à cocher à côté des cartes de rugosité, spéculaire, normales ou d'éléments similaires.

Détails de texture sur les bardeaux de toit

Cuisez les détails dans la texture

Des éléments tels que l'occlusion ambiante et les petits reflets spéculaires peuvent être intégrés puis ajoutés à la texture diffuse. Cette approche signifie que vous n'avez pas à trop compter sur des shaders coûteux en calcul et des fonctionnalités Unity pour obtenir des reflets spéculaires et l'occlusion ambiante.

Démonstration de texture en niveaux de gris teintée

Textures en niveaux de gris teintées

Chaque fois que possible, utilisez des textures en niveaux de gris qui permettent le teintage de couleur dans le shader. Cela permet d'économiser de la mémoire de texture au prix de la création d'un shader personnalisé pour effectuer le teintage. Soyez sélectif avec cette technique, car tous les objets n'ont pas un bon aspect avec cette méthode. Il est plus facile d'appliquer cela à un objet qui a une couleur uniforme.

Filtrage de texture bilinéaire et trilineaire comparaison

Filtrage des textures

Le filtrage de texture améliore souvent la qualité de la texture dans une scène, mais cela peut également dégrader les performances car obtenir une meilleure qualité de texture nécessite souvent plus de traitement. Le filtrage de texture peut parfois représenter jusqu'à la moitié de la consommation d'énergie du GPU. Choisir des filtres de texture plus simples et plus appropriés peut aider à réduire les demandes énergétiques d'une application.

  • Filtrage le plus proche/Point: C'est la forme de filtrage de texture la plus simple et la moins intensive en calcul, bien que lorsqu'elle est vue de près, ce filtrage puisse donner un aspect pixelisé aux textures.
  • Filtrage bilinéaire: Le filtrage bilinéaire échantillonne et moyenne les texels voisins pour colorer les pixels dans une texture. Contrairement au filtrage le plus proche, le filtrage bilinéaire donne des pixels moins pixelisés, car les pixels ont un dégradé lisse. Un effet secondaire du filtrage bilinéaire est que les textures apparaîtront floues lorsqu'elles sont vues de près.
Sprite Atlas sur l'éditeur Unity

Tailles de texture et espace colorimétrique

La plupart de votre mémoire ira probablement aux textures, donc les paramètres d'importation ici sont critiques. En général, essayez de suivre ces directives lors de l'importation de vos actifs.

  • Réduisez la taille maximale : Utilisez les paramètres minimaux qui produisent des résultats visuellement acceptables. C'est non destructif et peut rapidement réduire votre mémoire de texture.
  • Utilisez des puissances de deux (POT) : Unity nécessite des dimensions de texture POT pour les formats de compression de texture mobile (PVRCT ou ETC).
  • Atlas vos textures : Placer plusieurs textures dans une seule texture peut réduire les appels de dessin et accélérer le rendu. Utilisez le Unity Sprite Atlas ou le TexturePacker tiers pour atlas vos textures.
  • Désactiver l'option Lecture/Écriture activée : Lorsqu'elle est activée, cette option crée une copie dans la mémoire accessible par le CPU et le GPU, doublant l'empreinte mémoire de la texture. Dans la plupart des cas, gardez cela désactivé. Si vous générez des textures à l'exécution, appliquez cela via Texture2D. Appliquez, en passant makeNoLongerReadable défini sur true.
  • Désactiver les mipmaps inutiles : Les mipmaps ne sont pas nécessaires pour les textures qui restent à une taille constante à l'écran, comme les sprites 2D et les graphiques UI. Laissez les mipmaps activées pour les modèles 3D avec une distance variable par rapport à la caméra.
  • Utilisez le filtrage bilinéaire : Cela aidera à trouver un équilibre entre performance et qualité visuelle.
  • Utilisez le filtrage trilineaire de manière sélective : Il nécessite plus de bande passante mémoire que le filtrage bilinéaire.
  • Utilisez le filtrage bilinéaire et le filtrage anisotrope 2x : Choisissez ceux-ci au lieu du filtrage trilineaire et du filtrage anisotrope 1x, pour améliorer à la fois l'apparence et la performance.
  • Gardez le niveau anisotrope bas : N'utilisez un niveau supérieur à 2 que pour les actifs de jeu critiques.
Comparaison de textures compressées

Compressez les textures

Utilisez la compression de texture évolutive adaptative (ATSC) pour iOS et Android. La grande majorité des jeux en développement ont tendance à cibler des appareils min-spec qui prennent en charge la compression ATSC. Les seules exceptions sont :

  • les jeux iOS ciblant les appareils A7 ou inférieurs (par exemple, iPhone 5, 5S, etc.) : Utilisez PVRTC
  • les jeux Android ciblant des appareils antérieurs à 2016 : Utilisez la compression de texture Ericsson (ETC2)
Canaux de texture

Utilisez les canaux de texture pour regrouper plusieurs textures en une seule

Le regroupement des canaux de texture aide à économiser la mémoire de texture car vous pouvez obtenir trois cartes dans une seule texture. Cela signifie moins d'échantillonneurs de texture. Cette approche est couramment utilisée pour regrouper la rugosité, la douceur et/ou le métal dans une seule texture. Elle peut également être appliquée à tout masque de texture. Par exemple, vous pouvez également stocker le masque alpha. Les images avec transparences peuvent avoir une empreinte mémoire plus grande car 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 réduire efficacement la taille du fichier de moitié.

Utilisez le canal vert pour stocker le masque le plus important. Le canal vert a généralement plus de bits car nos yeux sont plus sensibles au vert et moins sensibles au bleu.

UV manuelle dans Probuilder

Dépliage UV

Une carte UV projette des textures 2D sur la surface d'un modèle 3D. Le dépliage UV est le processus de création d'une carte UV.

  • Il est préférable de garder les îles UV, les unités individuelles d'une texture dépliée, aussi droites que possible afin de faciliter le regroupement des îles UV et de réduire l'espace gaspillé. Un UV droit aide également à prévenir l'effet d'escalier sur les Textures.
  • Sur les plateformes mobiles, l'espace de Texture est limité. En tant que tel, la taille de la Texture est généralement plus petite que sur une console ou un PC. Un bon emballage UV garantit que vous obtenez la meilleure résolution de vos Textures.
  • Envisagez d'avoir un UV légèrement déformé en gardant l'UV droit pour des Textures de meilleure qualité.
  • Dans certains cas, vous devrez exagérer et mettre en évidence les bords et l'ombrage pour améliorer la lisibilité de la forme. Puisque les plateformes mobiles utilisent généralement des Textures plus petites, il peut être difficile de capturer tous les détails nécessaires dans cet espace réduit.
  • Pour les applications mobiles, utilisez moins de Textures et intégrez tous les détails supplémentaires dans une seule Texture. C'est important car certains détails sont mieux intégrés dans la Texture diffuse elle-même pour s'assurer que ces détails sont visibles sur les petits écrans mobiles.