Bonjour,
je suis en train de faire un jeu 2D sur iPhone à l'aide de Unity3D et du SpriteManager2.
Quand je lance le jeu sur mon iPhone 4, le FPS est ridicule (10FPS) et le profiler m'affiche des valeurs plutôts bizarres/intéressantes :
- Camera.Render met plus de 100ms à faire son action à chaque frame ;
- des fois, il ne met que 7-8ms, et là, c'est le Device.Present qui demande plus de 100ms.
Si j'ai bien compris, le Device.Present est là surtout indiqué que le CPU attend le GPU, et rien d'autres, non ? Mais dans ce cas, pourquoi a-t-il besoin d'attendre plus de 100ms ?
Si quelqu'un a la moindre idée ?
Merci !
Camera.Render super lent dans le Profiler
Re: Camera.Render super lent dans le Profiler
Pas possible de t aider sans plus d info,
Quel type de shader tu utilse,
Dimension de tes texture
Nombre de draw call
Utilise tu beaucoup de sprite avec transparence qui s overlap
Est tu en Hd resolution sur ton iphone
As tu de light dans ta scene
Utilise tu le MSAA
En gros tu dois certainement taper les limite du gpu ce qui fais qu il rame,
Faut filer plus d info sur la composition de ta scene, balance un screen du profiler aussi
Quel type de shader tu utilse,
Dimension de tes texture
Nombre de draw call
Utilise tu beaucoup de sprite avec transparence qui s overlap
Est tu en Hd resolution sur ton iphone
As tu de light dans ta scene
Utilise tu le MSAA
En gros tu dois certainement taper les limite du gpu ce qui fais qu il rame,
Faut filer plus d info sur la composition de ta scene, balance un screen du profiler aussi
Re: Camera.Render super lent dans le Profiler
Salut !
Désolé pour le retard de la réponse.
C'était bien une mauvaise utilisation des shader.
J'avais vu pas mal de tutoriels sur Sprite Manager qui utilisaient le shader "Transparent/Vertex Colored", sauf qu'il n'est pas vraiment fait pour les mobiles (et du coup, plombait le Device.Present, sûrement pour les raisons que tu as dits).
Du coup, j'utilise les shader plus rapide de Unity comme le "Mobile/Particles/Alpha Blended" (que j'ai un peu modifié par la même occasion) et ça tourne beaucoup mieux (j'ai gagné 20fps).
J'ai aussi optimisé le batch render (me suis rendu compte d'une erreur de code qui démultipliait mes Material et du coup, 0 batch) et j'ai réduit le culling en désactivant les GameObject qui ne sont pas censés s'afficher (gain de 3ms par frame).
J'en ai profité pour passer le Quality Settings de "Good" à "Fastest" en conservant par contre le "Texture Quality" sur "Full Res".
J'ai vu que pas mal de gens conseillaient de passer le "Script Call Optimization" (sur les Player Settings en iOS) de "Slow and Safe" à "Fast but no Exceptions", sauf que sur le coup, ça fait crasher mon application. Je regarderai ça plus tard, si ça peut faire gagner quelques fps.
Au final, avec ça, mon jeu tourne à 30fps sur iPhone 4, iPad 1 et 2, et à ~25fps sur iPhone 3GS.
Là je suis en train de voir pour réduire le nombre de GameObject sur ma scène où j'ai actuellement 2400~5000 par niveau.
Par contre, c'est quoi MSAA ?
Désolé pour le retard de la réponse.
C'était bien une mauvaise utilisation des shader.
J'avais vu pas mal de tutoriels sur Sprite Manager qui utilisaient le shader "Transparent/Vertex Colored", sauf qu'il n'est pas vraiment fait pour les mobiles (et du coup, plombait le Device.Present, sûrement pour les raisons que tu as dits).
Du coup, j'utilise les shader plus rapide de Unity comme le "Mobile/Particles/Alpha Blended" (que j'ai un peu modifié par la même occasion) et ça tourne beaucoup mieux (j'ai gagné 20fps).
J'ai aussi optimisé le batch render (me suis rendu compte d'une erreur de code qui démultipliait mes Material et du coup, 0 batch) et j'ai réduit le culling en désactivant les GameObject qui ne sont pas censés s'afficher (gain de 3ms par frame).
J'en ai profité pour passer le Quality Settings de "Good" à "Fastest" en conservant par contre le "Texture Quality" sur "Full Res".
J'ai vu que pas mal de gens conseillaient de passer le "Script Call Optimization" (sur les Player Settings en iOS) de "Slow and Safe" à "Fast but no Exceptions", sauf que sur le coup, ça fait crasher mon application. Je regarderai ça plus tard, si ça peut faire gagner quelques fps.
Au final, avec ça, mon jeu tourne à 30fps sur iPhone 4, iPad 1 et 2, et à ~25fps sur iPhone 3GS.
Là je suis en train de voir pour réduire le nombre de GameObject sur ma scène où j'ai actuellement 2400~5000 par niveau.
Par contre, c'est quoi MSAA ?
Re: Camera.Render super lent dans le Profiler
http://en.wikipedia.org/wiki/Multisample_anti-aliasingGaMaYa a écrit : Par contre, c'est quoi MSAA ?
Re: Camera.Render super lent dans le Profiler
Ah oui d'accord !
Non, je n'en utilise pas ici.
Non, je n'en utilise pas ici.