Conseils pour améliorer les performances de votre jeu Unity. Partie 1

Bonjour. En prévision du début du cours «Unity Game Developer. Basic »ont préparé une traduction utile pour vous.








introduction



Lorsque nous créons des jeux, nous négligeons souvent l'un des aspects les plus importants du développement de jeux: l'optimisation. En conséquence, nous obtenons des retards et des FPS faibles (parfois même sur les appareils haut de gamme, si tout fonctionne vraiment). La plupart des gens verront toujours l'optimisation du jeu comme la dernière étape, et c'est la première erreur - cela devrait toujours être le premier élément de la liste.



Il est impossible de surestimer l'habitude à chaque construction, chaque jour lorsque vous ajoutez un nouveau mécanisme ou une nouvelle configuration d'éclairage, ou tout autre système basé sur la physique à vos jeux, vérifiez toujours la construction pour voir s'il y a des problèmes de performances dus à ceux-ci. le changement est une bonne pratique de développement de jeux.



Si vous ne prenez pas le temps d'optimiser les performances dès le début du projet, cela peut entraîner des problèmes pour vous et votre jeu dans les dernières étapes. Ici, je souhaite partager quelques réflexions et conseils sur la façon dont vous pouvez améliorer les performances de votre jeu en me basant sur quelques leçons pratiques que j'ai apprises de mes erreurs au cours des 5 dernières années.



Profil de votre jeu



Le Profiler est le premier de la liste et l'un de mes outils préférés de tous les temps dans Unity pour surveiller les performances du jeu afin de voir ce qui cause vraiment des problèmes de performances. C'est très utile pour avoir une compréhension détaillée de la façon dont votre jeu réagit aux divers changements dans l'éditeur.





Vous pouvez trouver le profileur dans Window-> Analysis-> Profiler.Il



affiche des catégories telles que l'utilisation du processeur et du GPU, le rendu, la physique, l'audio, etc. Nous ne pouvons pas nous fier au profilage dans l'éditeur (profilage de l'éditeur), car l'éditeur affecte les performances du projet pendant les tests, ce qui peut affecter la validité des informations de profilage. Il est préférable de créer une version distincte pour obtenir des données de profilage précises.



Profilage à distance



Pour que cela fonctionne, vous devez installer le SDK Android et connecter le débogage JDK et USB. N'oubliez pas que c'est toujours une bonne idée de tester les performances de votre jeu en termes de mécanique, de mise à l'échelle de l'interface utilisateur, etc. Pour tester les performances réelles du jeu, vous devez créer une version de profilage personnalisée.





Pour connecter le Remote Profiler, accédez à Modifier> Paramètres du projet> Éditeur et dans la section Appareil, sélectionnez Tout appareil Android.



Création de profilage



Pour vous assurer que Unity a accès à votre build qui peut être profilée, vous devez activer «Développement de build ou prise en charge de Deep Profiling» et «Auto-connect Profiler» dans les paramètres de build avant de le créer. Cela permet à l'éditeur Unity de lier automatiquement votre build.







Lorsque votre enchère est prête, ouvrez votre jeu sans fermer la fenêtre Unity Profiler. Unity affichera désormais automatiquement les données de performances de la version actuelle du jeu dans la fenêtre du profileur.



Vous pouvez en savoir plus sur le profileur ici .



Lot d'objets GameObjects



Le batching est une très bonne technique pour améliorer les performances en réduisant le nombre d'appels Draw, qui regroupe le rendu de plusieurs GameObjects similaires en un seul appel draw. Il existe deux types de méthodes de traitement par lots: statique et dynamique. Il existe certaines limitations pour le traitement par lots - nous ne pouvons pas traiter par lots les maillages, les tissus et certains composants de rendu.



Dosage statique



Le batching statique est utilisé chaque fois que les GameObjects sont statiques. Ces GameObjects statiques ne doivent pas bouger, mettre à l'échelle ou tourner, et doivent utiliser le même matériau pour tous les GameObjects statiques pour que le traitement par lots fonctionne.



Si vos GameObjects n'interagissent pas avec votre lecteur ou si vous ne modifiez pas la transformation, il est préférable d'utiliser le traitement par lots statique pour la plupart des environnements de votre jeu, tels que les bâtiments, les routes, etc.







Lot dynamique



Le batching dynamique est similaire à statique en ce sens que GameObjects doit utiliser les mêmes matériaux, mais peut regrouper des objets en mouvement sans avoir à les rendre statiques. Fondamentalement, Unity peut charger automatiquement les GameObjects dans le même appel de dessin s'ils utilisent le même matériau, mais ils ont certaines des restrictions de traitement par lots dynamiques qui leur sont imposées selon Unity:



  1. Le traitement par lots de GameObjects dynamiques a une certaine surcharge par sommet, de sorte que le traitement par lots n'est appliqué qu'aux maillages avec pas plus de 300 sommets et pas plus de 900 attributs de sommet.

    • Shader Vertex Position, Normal UV, 300 , Shader Vertex Position, Normal, UV0, UV1 Tangent, 180 .
    • : .
  2. GameObject- , transform (, GameObject A +1 GameObject B –1 ).
  3. Material , GameObject- , . Shadow Caster.
  4. : / . , GameObject- .
  5. Multi-pass .

    • Unity , . « » .
    • Legacy Deferred ( ) , GameObject .


Le traitement par lots dynamique fonctionne différemment pour les systèmes de particules, les lignes de rendu et le rendu de traînée que pour les maillages.



  1. Pour chaque type de moteur de rendu compatible, Unity collecte tout le contenu du lot dans 1 grand tampon Vertex.
  2. Le moteur de rendu définit l'état du matériau du lot.
  3. Unity lie le tampon Vertex au périphérique graphique.
  4. Pour chaque moteur de rendu du lot, Unity met à jour le décalage dans le Vertex Buffer, puis envoie un nouvel appel de dessin.


Il existe d'autres moyens d'améliorer le traitement par lots en utilisant certains actifs d'Assetstore comme Simple Mesh Combine, Bakery, ou nous pouvons également utiliser Mesh.CombineMeshespour combiner plusieurs maillages en un seul, ce qui est idéal pour optimiser les performances.



Faites cuire votre éclairage



En gros, il existe trois modes d'éclairage: temps réel, cuit et mixte.



Le temps réel est le meilleur MAIS vous devez le payer avec des performances. Il apporte une lumière directe dans la scène et met à jour chaque image au fur et à mesure que les lumières et les objets de jeu se déplacent dans la scène, mettant immédiatement à jour l'éclairage.



Chaque fois que vous avez la possibilité de cuire un éclairage sur une scène, assurez-vous de l'utiliser car il est idéal pour les gains de productivité, en particulier si vous ciblez les appareils mobiles. Il est toujours préférable d'utiliser un faible éclairage sur scène pour obtenir le look souhaité.







De cette façon, toutes vos lumières seront pré-calculées hors ligne dans un processus appelé Lightmap Baking. Lorsque vous définissez l'indicateur statique GameObject Lightmap, Unity transforme les informations sur GameObject Light, les ombres, les lumières rebondies et les ombres douces en textures qui touchent votre scène. Cependant, Lightmaps a certaines limitations, l'éclairage ne peut pas être mis à jour dynamiquement pour les objets que vous sélectionnez avec l'indicateur statique Lightmap.











J'ai fait une scène SCIFI il y a quelques mois pendant mon temps libre et je pense que c'est le meilleur exemple du fonctionnement de l'éclairage cuit. Bien sûr, j'ai utilisé Emission.



Si quelqu'un est intéressé par un aperçu de la création de cette scène SCIFI et de la façon dont j'ai obtenu ce look, faites-le moi savoir, je pourrais peut-être y consacrer un article séparé.

, !







C'est un très bon moyen d'améliorer les performances de votre jeu avec l'occlusion Unity. En général, Occlusion Culling signifie que Unity n'affichera pas les GameObjects qui sont complètement cachés de la perspective de la caméra (occultés) par d'autres GameObjects.





Pour ouvrir la fenêtre Occlusion, allez dans Fenêtre-> Rendu-> Occlusion Culling.





Si quelqu'un est intéressé par la façon dont j'ai obtenu ce look dans la scène Mystery Forest, faites-le moi savoir, je pourrais peut-être écrire un article séparé à ce sujet.

Voici une vidéo si vous êtes intéressé!


twitter.com/i/status/1096336962259021824



Par défaut, Unity applique Frustum Culling, ce qui signifie qu'il n'affiche que la ligne de visée de la caméra, montrant tous les objets. Par exemple, si la caméra regarde un mur, tous les objets derrière ce mur seront également rendus. Nous n'avons pas du tout besoin de cela, nous devons donc ajouter Occlusion Culling à notre scène.







C'est pourquoi nous devons utiliser Occlusion Culling, ce qui signifie que la caméra ne rendra que le mur sans objet derrière.





Lire la suite:






All Articles