Matériaux et nuanceurs

Suivez ces bonnes pratiques pour optimiser l'utilisation des matériaux et des nuanceurs dans votre jeu Android.

Les matériaux et les nuanceurs sont des composants essentiels des graphismes 3D modernes. Les jeux en 3D qui s'exécutent correctement sur un grand nombre d'appareils requièrent avant toute chose des graphismes en 3D qui ont été conçus pour tirer le meilleur parti des processeurs graphiques. Ce guide présente des optimisations et des bonnes pratiques concernant les matériaux et les nuanceurs sur mobile afin d'améliorer les performances de votre jeu et de minimiser la consommation d'énergie.

Certaines parties de cet article sont basées sur un document fourni par Arm Limited, qui en détient les droits d'auteur.

Nuanceurs des moteurs de jeu adaptés aux mobiles

Les moteurs de jeu n'associent pas tous les matériaux et les nuanceurs de la même manière. Le moteur Unity peut créer plusieurs nuanceurs, mais chaque nuanceur ne peut être attribué qu'à un seul matériau. Unreal Engine 4 peut appliquer différents nuanceurs à un matériau en fonction de la plate-forme cible.

Pour obtenir une définition des nuanceurs et des matériaux, consultez la page Bonnes pratiques concernant les matériaux et les nuanceurs pour les artistes.

Si vous utilisez un moteur de jeu tel que Unity ou Unreal Engine 4, optez pour les nuanceurs intégrés conçus pour le matériel mobile. Ces nuanceurs contiennent des implémentations de fonctionnalités simplifiées qui améliorent les performances sur les appareils mobiles. Si possible, désactivez les fonctionnalités que vous n'utilisez pas lorsque vous configurez vos matériaux. Parmi ces fonctionnalités, on peut par exemple trouver le nuançage de couleur (color tinting) ou les cartes détaillées. La désactivation des fonctionnalités inutilisées permet au moteur de les omettre dans le programme de nuanceur final, ce qui améliore les performances.

Unity

Unity inclut plusieurs moteurs de rendu. Pour les jeux mobiles modernes, la meilleure option est l'Universal Render Pipeline (URP). L'URP inclut un ensemble standard de nuanceurs dont la complexité s'adapte automatiquement à la plate-forme cible. L'ancien moteur de rendu Unity inclut une collection de nuanceurs conçus pour les plates-formes mobiles. Ces nuanceurs sont regroupés dans la catégorie Mobile.

Unreal Engine 4

Le moteur Unreal Engine choisit un nuanceur mobile en fonction de la plate-forme cible sélectionnée. Le rendu visuel des nuanceurs mobiles peut être différent de celui des nuanceurs par défaut Shader Model 5. Vous pouvez modifier le niveau de rendu d'aperçu dans l'éditeur Unreal pour simuler la sortie d'affichage des nuanceurs mobiles. Malgré certaines différences, Unreal utilise le même processus pour les matériaux sur toutes les plates-formes. Les nuanceurs mobiles obtiennent donc généralement un rendu et des comportements semblables à ceux des nuanceurs par défaut.

Configurer le rendu de l'aperçu sur mobile dans l'éditeur Unreal
Figure 1 Définir le rendu de l'aperçu sur mobile dans l'éditeur Unreal

Réduire les échantillonneurs de texture

Les jeux ciblant les appareils mobiles doivent utiliser le moins de textures possible dans leurs matériaux. Chaque texture ajoutée nécessite un échantillonnage de texture supplémentaire, qui consomme de la bande passante mémoire et augmente la consommation d'énergie. Unreal Engine 4 recommande au maximum cinq textures de matière lors de l'exécution sur des appareils mobiles. Même cinq échantillonneurs de texture peuvent s'avérer extrêmement coûteux pour une utilisation généralisée sur de nombreux appareils. Voici quelques stratégies pour réduire le nombre d'échantillonneurs de texture :

  • Utilisez l'empaquetage de texture pour combiner des textures à canal unique. Pour en savoir plus sur cette technique, consultez le guide Textures.
  • Remplacez les données de paramètres tels que la rugosité ou les propriétés métalliques par une constante numérique au lieu de les faire lire à partir d'une texture.
  • Utilisez des nuanceurs non éclairés ou un modèle d'éclairage simple pour pouvoir omettre les textures nécessaires à la gestion des calculs d'éclairage dans les modèles d'éclairage plus complexes.

Désactiver l'éclairage lorsque cela est possible

En termes de nuanceurs et de matériaux, l'utilisation d'éclairage ou non fait souvent débat. L'éclairage en temps réel implique des calculs supplémentaires de la part du nuanceur. Selon le type de système d'éclairage mis en œuvre, des textures de matériaux peuvent être nécessaires. Elles nécessitent davantage d'espace mémoire et de bande passante. Pour les jeux mobiles, en particulier ceux ciblant un matériel moins puissant, il est important de minimiser l'utilisation de l'éclairage en temps réel pour obtenir des performances optimales. Vous devriez envisager d'adopter une direction artistique privilégiant l'absence d'éclairage en temps réel, comme des dessins stylisés ou un style cartoon.

Comparaison du rendu d'un modèle avec et sans éclairage
Figure 2 : Exemple de modèle rendu avec un éclairage en temps réel (à gauche) et sans éclairage en temps réel (à droite).

Réduire au maximum l'utilisation de la transparence

Utilisez des matériaux opaques autant que possible. Il est toujours plus coûteux d'afficher un objet avec transparence qu'un objet opaque équivalent. La conception de matériel graphique mobile rend l'affichage de la transparence relativement plus coûteux qu'avec le matériel graphique d'une console de jeu ou d'un ordinateur. Dessiner de nombreux objets transparents dans votre jeu, en particulier lorsqu'ils sont superposés les uns aux autres, aura un impact négatif sur les performances.

Le dessin d'un même pixel plusieurs fois est un problème connu sous le nom de superposition. Évitez d'utiliser plusieurs couches de superposition de transparence. De nombreux jeux disposent d'outils de diagnostic qui permettent de visualiser les superpositions afin de les détecter et de les éliminer. Utilisez-les pour améliorer les performances de votre jeu et identifier les problèmes qui ralentissent votre fréquence d'images.

Exemple de l'outil de visualisation des superpositions dans l'éditeur Unity
Figure 3. : Exemple de l'outil de visualisation des superpositions dans l'éditeur Unity
Exemple de l'outil de visualisation des superpositions dans l'éditeur Unreal
Figure 4 : Exemple de l'outil de visualisation des superpositions dans l'éditeur Unreal.

Utiliser la méthode alpha appropriée

Les méthodes les plus courantes de mise en œuvre de la transparence sont le mélange alpha et les tests alpha.

Les tests alpha rendent le matériau de l'objet soit 100 % opaque, soit 100 % transparent. Vous pouvez configurer le seuil de valeur alpha pour cette limite. Dans Unity, ce type de transparence est appelé Cutout (Découpe). Dans Unreal Engine 4, il s'agit du mode de fusion Masked (Masqué).

Le mélange alpha permet au matériau de l'objet d'avoir une plage de transparence et de rendre un objet partiellement transparent. Unity appelle ce type de transparence Transparent. Dans Unreal Engine 4, il est appelé mode de fusion Translucent (Translucide).

Comparaison entre le mélange alpha et les tests alpha
Figure 5. : Exemple d'image (à gauche) rendue à l'aide de la combinaison alpha (au centre) et des tests alpha (à droite).

Le mélange alpha offre généralement une meilleure apparence visuelle que les tests alpha. Toutefois, pour certains types de maillages, tels que le feuillage, le mélange alpha peut avoir une apparence étrange lorsque le maillage est visible en mouvement. Cela est dû au fait que la perception des feuilles et des branches est rendue dans le mauvais ordre. Les tests alpha réduisent cet effet, au détriment d'une augmentation du crénelage et des arêtes vives sur les feuilles et les branches.

La durée de génération du même maillage par le mélange alpha et les tests alpha peut être différente. Pour les maillages où les deux modes génèrent une sortie visuelle acceptable, vous devez effectuer un benchmark pour déterminer si une méthode fonctionne mieux que l'autre.

Complexité du nuanceur de profils

Les fonctionnalités de rendu, comme les échantillonneurs de texture, l'éclairage et la transparence, augmentent la complexité du nuanceur et réduisent les performances de rendu. Vous pouvez utiliser des outils intégrés aux moteurs de jeu ainsi que des outils graphiques externes pour évaluer la complexité de votre nuanceur.

Unreal Engine 4 inclut un mode d'affichage Shader Complexity (Complexité du nuanceur) qui fournit une estimation des coûts pour les objets de votre scène.

Mode d'affichage Shader Complexity (Complexité du nuanceur) dans l'éditeur Unreal
Figure 6 Mode d'affichage Shader Complexity (Complexité du nuanceur) dans l'éditeur Unreal

Vous pouvez également utiliser la fonctionnalité Material Stats (Statistiques des matériaux) d'Unreal pour profiler le coût des matériaux à mesure que vous les créez.

Affichage de Material Stats (Statistiques des matériaux) dans l'éditeur Unreal
Figure 7 : Material Stats (Statistiques des matériaux) s'affiche dans l'éditeur Unreal.

Calculer dans le nuanceur de sommets

Les calculs du nuanceur de rendu sont généralement divisés entre un nuanceur de sommet et un nuanceur de fragments (également appelé nuanceur de pixels). Le nombre de fragments rendus est généralement supérieur au nombre de sommets. Si un calcul coûteux peut être effectué dans le nuanceur de sommets, celui-ci sera exécuté moins fréquemment que si le calcul était effectué dans le nuanceur de fragments.

Toutefois, si ces données sont utilisées par le nuanceur de fragments, elles doivent être transmises à partir du nuanceur de sommets. Si la quantité de données à transférer est trop importante, effectuer les calculs dans le nuanceur de fragments peut s'avérer plus intéressant en termes de performances. Vous pouvez utiliser les outils de profilage pour évaluer l'utilisation du tiler et déterminer l'emplacement optimal du nuanceur pour un ensemble de calculs. Unreal Engine 4 dispose d'une fonctionnalité UV personnalisés qui peut faciliter ce profilage.

Éviter les opérations mathématiques coûteuses

Les opérations mathématiques sont utilisées dans les programmes de nuanceur pour contrôler le comportement et l'apparence de la sortie du nuanceur. Les opérations courantes incluent l'arithmétique de base, les puissances, les parties entières, le logarithme, etc. Le coût de calcul des opérations mathématiques n'est pas égal. Un nuanceur rempli d'opérations coûteuses fonctionnera plus lentement, en particulier sur les appareils plus anciens. Exemples d'opérations relativement peu coûteuses :

  • Addition
  • Soustraction
  • Multiplication

Exemples d'opérations plus coûteuses :

  • Division
  • Fonctions transcendantes (sinus, cosinus, puissance, logarithme, tangente)

Performances du profil souvent

Les goulots d'étranglement qui affectent les performances ne sont pas toujours évidents. Évitez de supposer à quel endroit se trouvent vos zones problématiques et utilisez des outils de profilage pour évaluer vos performances de rendu. Assurez-vous d'effectuer des tests avant/après toute optimisation afin d'en évaluer l'impact avec précision.