Les UI trop lourd sur android et iOS ?
Les UI trop lourd sur android et iOS ?
Bonjour a tous !
Ca fait plusieurs semaines que je galère à faire tourner mon jeu sur tous les supports (android, iOS ). J’ai beau chercher partout, je ne trouve pas !
Voici les tests
Editeur : 50 fps avec des ralentissements de temps en temps à cause de vSync
Smartphone android Moto E (plutôt bas de gamme) : 60 fps (nickel)
iPad mini 2 Retina : 60 fps (nickel)
Smartphone android JIAYU S3 (plutôt puissant) : 24fps
iPad 3 Retina avec iOS 9.3 : 20 fps
Quand je profile l’iPad 3 j’ai :
90% d’overhead
30 drawcalls max pour le jeu
70 batched drawcalls en Dynamic Batch
5000 tri et 8000 vertex
Les optimisations que j’ai faites
Sprite Packer -> J’ai regroupé toutes mes icônes de UI en une image
QualitySettings -> hard shadow only, low resolution, 50 de distance, Vsync activé (de toute les manières obligé pour l’iPad)
Physics -> toute la physique est géré en 2D. Elle consomme peu d’après le profiler.
Le personnage est modifié régulièrement, il est donc MarkDynamic()
Je n’ai aucun objet static car il bouge tous
J’ai enlever tous les matériaux standard (ca me mettait un warning sur l’iPad 3) et j’ai mis à la place « mobile / diffuse»
Quasiment tous les objets qui ont une couleur unique (donc tous sauf le personnage). Je leurs ai mis tous le même shader que j’ai fait d’après ce tuto https://www.youtube.com/watch?v=O3dbE2t8lPQ de unity cookie.
Voici un profile de l’iPad 3 quand je suis dans le menu du jeu. Le menu est une scène 3d assez simple. La ça tourne correctement.
Cependant, quand j’affiche un panel toujours dans la même scène, avec un menu déroulant comme dans l’image ci dessous, j’obtiens des ralentissements (cf le profile ci dessus)
Notez également que j’ai quelques autres warnings sur xCode du type :
warning: arm64 function not 4-byte aligned: ltmp0 from /Users/rochet/Dangerous Bounce/Dangerous Bounce/Libraries/libiPhone-lib.a(PLCrashAsyncThread_current-5565F35D16E4818B.o)
Je me demande donc :
Pourquoi ai-je des ralentissement sur l’iPad 3 iOS 9 dans le jeu ?
Est ce que les UI serait à l’origine du problème ?
Mon jeu a vraiment besoin de tourner a 60fps pour être fluide.
Je vous remercie d’avance !
Ca fait plusieurs semaines que je galère à faire tourner mon jeu sur tous les supports (android, iOS ). J’ai beau chercher partout, je ne trouve pas !
Voici les tests
Editeur : 50 fps avec des ralentissements de temps en temps à cause de vSync
Smartphone android Moto E (plutôt bas de gamme) : 60 fps (nickel)
iPad mini 2 Retina : 60 fps (nickel)
Smartphone android JIAYU S3 (plutôt puissant) : 24fps
iPad 3 Retina avec iOS 9.3 : 20 fps
Quand je profile l’iPad 3 j’ai :
90% d’overhead
30 drawcalls max pour le jeu
70 batched drawcalls en Dynamic Batch
5000 tri et 8000 vertex
Les optimisations que j’ai faites
Sprite Packer -> J’ai regroupé toutes mes icônes de UI en une image
QualitySettings -> hard shadow only, low resolution, 50 de distance, Vsync activé (de toute les manières obligé pour l’iPad)
Physics -> toute la physique est géré en 2D. Elle consomme peu d’après le profiler.
Le personnage est modifié régulièrement, il est donc MarkDynamic()
Je n’ai aucun objet static car il bouge tous
J’ai enlever tous les matériaux standard (ca me mettait un warning sur l’iPad 3) et j’ai mis à la place « mobile / diffuse»
Quasiment tous les objets qui ont une couleur unique (donc tous sauf le personnage). Je leurs ai mis tous le même shader que j’ai fait d’après ce tuto https://www.youtube.com/watch?v=O3dbE2t8lPQ de unity cookie.
Voici un profile de l’iPad 3 quand je suis dans le menu du jeu. Le menu est une scène 3d assez simple. La ça tourne correctement.
Cependant, quand j’affiche un panel toujours dans la même scène, avec un menu déroulant comme dans l’image ci dessous, j’obtiens des ralentissements (cf le profile ci dessus)
Notez également que j’ai quelques autres warnings sur xCode du type :
warning: arm64 function not 4-byte aligned: ltmp0 from /Users/rochet/Dangerous Bounce/Dangerous Bounce/Libraries/libiPhone-lib.a(PLCrashAsyncThread_current-5565F35D16E4818B.o)
Je me demande donc :
Pourquoi ai-je des ralentissement sur l’iPad 3 iOS 9 dans le jeu ?
Est ce que les UI serait à l’origine du problème ?
Mon jeu a vraiment besoin de tourner a 60fps pour être fluide.
Je vous remercie d’avance !
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Les UI trop lourd sur android et iOS ?
Dans le profiler, tu peux regarder plus en profondeur ce qui provoque le ralentissement dans l'overview. Tu cliques sur ton graphique, il se met en pause et tu peux vérifier.
Perso, tu devrais vérifier la taille de tes sprites. Qu'ils soient pas surdimensionnés donc qu'ils ne pompent pas trop de RAM.
Perso, tu devrais vérifier la taille de tes sprites. Qu'ils soient pas surdimensionnés donc qu'ils ne pompent pas trop de RAM.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Les UI trop lourd sur android et iOS ?
Salut
J'ai bien vérifié tout mes sprites et ils sont bien dimensionnés.
Je vais faire des tests en les compressant encore plus mais quand même pour un iPad 3, ça m'étonnerais qu'il ne soit pas capable de supporter une image de 1024 x 2048 (c'est l'image qui regroupe toutes les icônes de tête qui apparaissent dans le menu déroulant) surtout qu'il a un écran rétina.
Par ailleurs j'ai pu lire que le Scroll Rect était gourmand en ressource mais pourquoi il y aurait-il une telle baisse de fps ? Pourquoi est-ce fluide sur les autres appareils même moins puissant ?
Est ce qu'il est gourmand d'utiliser les variables Animator ?
Merci !
J'ai bien vérifié tout mes sprites et ils sont bien dimensionnés.
Je vais faire des tests en les compressant encore plus mais quand même pour un iPad 3, ça m'étonnerais qu'il ne soit pas capable de supporter une image de 1024 x 2048 (c'est l'image qui regroupe toutes les icônes de tête qui apparaissent dans le menu déroulant) surtout qu'il a un écran rétina.
Par ailleurs j'ai pu lire que le Scroll Rect était gourmand en ressource mais pourquoi il y aurait-il une telle baisse de fps ? Pourquoi est-ce fluide sur les autres appareils même moins puissant ?
Est ce qu'il est gourmand d'utiliser les variables Animator ?
Merci !
Re: Les UI trop lourd sur android et iOS ?
J'ai continué mes recherches et même en compressant les images ça ne fonctionne pas.
Voici les tests que j'ai fais :
- Scripting Backend : J'ai testé Mono2x
- J'ai activé l'option Strip Engine Code
- J'ai viré toute la physique et j'ai programmé par moi même
- J'ai fait un test en enlevant tout les GUI
- Désactivé dans le menu tous les GUI en dehors du champs de vision
Et avec tout cela : Pas de résultat !
Notez également que j'ai beaucoup d'animator qui tournent : un pour chaque panel avec deux états (affiché, caché).
Je vous met deux captures d'écran du profiler :
En voici une pour le jeu
Et voici une qui montre la mémoire
Je trouve ca énorme que System.ExecutableAndDlls prenne 0.79GB !
Est ce que quelqu'un aurait une idée d'où cela pourrait provenir ?
Est ce que l'AOT Compilation Options pourrait aider ?
Merci d'avance J'avoue que je ne sais plus trop où chercher !
Voici les tests que j'ai fais :
- Scripting Backend : J'ai testé Mono2x
- J'ai activé l'option Strip Engine Code
- J'ai viré toute la physique et j'ai programmé par moi même
- J'ai fait un test en enlevant tout les GUI
- Désactivé dans le menu tous les GUI en dehors du champs de vision
Et avec tout cela : Pas de résultat !
Notez également que j'ai beaucoup d'animator qui tournent : un pour chaque panel avec deux états (affiché, caché).
Je vous met deux captures d'écran du profiler :
En voici une pour le jeu
Et voici une qui montre la mémoire
Je trouve ca énorme que System.ExecutableAndDlls prenne 0.79GB !
Est ce que quelqu'un aurait une idée d'où cela pourrait provenir ?
Est ce que l'AOT Compilation Options pourrait aider ?
Merci d'avance J'avoue que je ne sais plus trop où chercher !
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Les UI trop lourd sur android et iOS ?
0.79GB, c'est énorme!
Je suis pas calé pour ça, mais je dirai que tu dois utiliser des dlls/plugins bien trop complets et gourmands. Strip Engine Code permet de baisser l'utilisation de mémoire, apparemment.
Je serai plutôt d'avis d'aller voir du côté des dlls que tu utilises et de n'utiliser que celles dont tu as réellement besoin, voire essayer d'en trouver des moins complètes, voire reprogrammer un peu (-> je veux dire par là, que si tu utilises une dll énorme pour une simple fonction, ça peut valoir le coup de la programmer à ta sauce si c'est possible).
Je suis pas calé pour ça, mais je dirai que tu dois utiliser des dlls/plugins bien trop complets et gourmands. Strip Engine Code permet de baisser l'utilisation de mémoire, apparemment.
Je serai plutôt d'avis d'aller voir du côté des dlls que tu utilises et de n'utiliser que celles dont tu as réellement besoin, voire essayer d'en trouver des moins complètes, voire reprogrammer un peu (-> je veux dire par là, que si tu utilises une dll énorme pour une simple fonction, ça peut valoir le coup de la programmer à ta sauce si c'est possible).
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Les UI trop lourd sur android et iOS ?
Salut
J'ai utilisé très peu de plug-in , seulement 1 pour le Google Play Dev Console et un autre pour résoudre un bug. J'ai viré les deux : toujours pas de résultat. Par contre j'utilise Unity Analytics et SceneManager pour passer d'une scène a une autre.
J'ai fait d'autre tests avec la police de caractère que j'utilise : J'ai essayé ne pas la mettre dynamic mais ça na rien fait.
Autre chose intéressant, j'ai refait des tests sur le JIAYU en le profilant. De temps en temps le jeu tourne à 60 fps parfaitement pendant quelques parties ! Cependant les lags reviennent et durent plusieurs parties. Quand ça lag, j'obtient 90% de gfx.WaitForPresent.
Merci pour ta réponse rapide !
J'ai utilisé très peu de plug-in , seulement 1 pour le Google Play Dev Console et un autre pour résoudre un bug. J'ai viré les deux : toujours pas de résultat. Par contre j'utilise Unity Analytics et SceneManager pour passer d'une scène a une autre.
J'ai fait d'autre tests avec la police de caractère que j'utilise : J'ai essayé ne pas la mettre dynamic mais ça na rien fait.
Autre chose intéressant, j'ai refait des tests sur le JIAYU en le profilant. De temps en temps le jeu tourne à 60 fps parfaitement pendant quelques parties ! Cependant les lags reviennent et durent plusieurs parties. Quand ça lag, j'obtient 90% de gfx.WaitForPresent.
Merci pour ta réponse rapide !
Re: Les UI trop lourd sur android et iOS ?
Salut
Est-ce que tu utilises des scrollrect avec des mask ??? si oui enlève les mask et ajoute des Rect Mask 2D à la place.
As-tu bien fait le tour des sprites voir que tu n'ai pas des sprite énormes qui trainent quelquepart ?
pour le GFXWaitForPresent, as tu l'Vsync d'activé ? c'est probablement normal en fait c'est la syncrho des FPS max.
http://answers.unity3d.com/questions/69 ... esent.html
Est-ce que tu utilises des scrollrect avec des mask ??? si oui enlève les mask et ajoute des Rect Mask 2D à la place.
As-tu bien fait le tour des sprites voir que tu n'ai pas des sprite énormes qui trainent quelquepart ?
pour le GFXWaitForPresent, as tu l'Vsync d'activé ? c'est probablement normal en fait c'est la syncrho des FPS max.
http://answers.unity3d.com/questions/69 ... esent.html
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Re: Les UI trop lourd sur android et iOS ?
Oui j'utilisais les scrollrect avec des masks. Je l'ai changé par un RectMask2D mais malheureusement je n'ai pas vu vraiment différence
Merci quand même du conseil, ça ne peut que amélioré les performances.
Pour le vSync, il est toujours activés pour deux raisons :
- Sur iOS c'est obligatoire
- Sur les autres appareils, le jeu parait légèrement saccadé même à 60fps du fait que la caméra se déplace continuellement.
Merci quand même du conseil, ça ne peut que amélioré les performances.
Pour le vSync, il est toujours activés pour deux raisons :
- Sur iOS c'est obligatoire
- Sur les autres appareils, le jeu parait légèrement saccadé même à 60fps du fait que la caméra se déplace continuellement.
Re: Les UI trop lourd sur android et iOS ?
Moi de mon coté je fais des jeux à interfaces. Donc à quasi 100% interface Unity avec le système d'UI. Et sur ma plus grosse application (qui elle n'est pas un jeu), j'ai pas mal de lags sur des tablettes qui ne sont pas au top.
J'ai fait pas mal d'optim' mais si vous avez des conseils encore, je suis preneur.
J'ai fait pas mal d'optim' mais si vous avez des conseils encore, je suis preneur.
Re: Les UI trop lourd sur android et iOS ?
ha oui j'oubliais, très important désactiver le pixel perfect !
et le scroll rect le RectMask2d a en principe changé beaucoup de chose face au mask normal
http://forum.unity3d.com/threads/scroll ... ow.396366/
l'UI unity reste galère, a mon premier build sur mon XperiaZ qu'a un paquet d'années, j'etais écran figé tellement ça lag.
plusieurs optis a vérifier :
le sprite packer et des images sprites petites 256
le pixel perfect, radical pour moi
RectMask2D a la place des mask ET de mon objectpoolling dans la liste (a priori il le fait pour nous)
éviter le multi canvas
désactiver tout ce qui ne sert pas, et faire de l'objectpooling si c'est nécessaire
bien entendu éviter les Update() voir s'interdire ces dernières en utilisant des Events
chose étrange il faut que je débranche mon téléphone de l'USB sinon en mode debug il souffre ! et encore plus avec le profiler.
une fois tout ça réglé mon interface est quasi fluide sous mon experia daubé.
et le scroll rect le RectMask2d a en principe changé beaucoup de chose face au mask normal
http://forum.unity3d.com/threads/scroll ... ow.396366/
l'UI unity reste galère, a mon premier build sur mon XperiaZ qu'a un paquet d'années, j'etais écran figé tellement ça lag.
plusieurs optis a vérifier :
le sprite packer et des images sprites petites 256
le pixel perfect, radical pour moi
RectMask2D a la place des mask ET de mon objectpoolling dans la liste (a priori il le fait pour nous)
éviter le multi canvas
désactiver tout ce qui ne sert pas, et faire de l'objectpooling si c'est nécessaire
bien entendu éviter les Update() voir s'interdire ces dernières en utilisant des Events
chose étrange il faut que je débranche mon téléphone de l'USB sinon en mode debug il souffre ! et encore plus avec le profiler.
une fois tout ça réglé mon interface est quasi fluide sous mon experia daubé.
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !