Bonjour à tous,
Récemment inscrit sur ce forum, pour un projet qui sera détaillé dans une grosse semaine dans la partie collaboration, je me tourne vers vous pour une question que je pensais simple, mais sur laquelle je ne suis pas arrivé à trouver de réponse précise.
Donc, soit je ne sais pas chercher. Soit je pose mal ma question
Question :
Combien de polygones peut-on utiliser au maximum dans un environnement 3D (décor, objets, perso en même temps à l'écran) sur des devices comme l'Iphone 4, 4S, 5, 5S, 5C / GSII, GSIII, GSIV, Galaxy Note, etc. ?
Je me doute que cela doit dépendre d'autres facteurs et d'une optimisation générale, mais je me demandais s'il n'existait pas une guideline, ou une approximation éventuelle ?
Pour guider le développement dès le début et ne pas se perdre en polygones inutiles
Merci à tous,
[Question] Nombres de polygones maximum
Re: [Question] Nombres de polygones maximum
Salut,
Dans tous les cas, du point de vue des performances, la règle est simple : moins il y en, mieux c'est.
Ensuite, il faut aussi tenir compte des shaders utilisés, qui auront aussi un impact énorme sur les performances : si le shader est très complexe, tu pourras mettre à genou ton appareil mobile avec seulement une poignée de polygones.
Idem avec les shaders transparents, qui peuvent bouffer ton fillrate à vitesse grand V.
Bref, pour ce qui est des appareils mobiles, il faut essayer de limiter au maximum à tous les niveaux.
Dans tous les cas, du point de vue des performances, la règle est simple : moins il y en, mieux c'est.
Ensuite, il faut aussi tenir compte des shaders utilisés, qui auront aussi un impact énorme sur les performances : si le shader est très complexe, tu pourras mettre à genou ton appareil mobile avec seulement une poignée de polygones.
Idem avec les shaders transparents, qui peuvent bouffer ton fillrate à vitesse grand V.
Bref, pour ce qui est des appareils mobiles, il faut essayer de limiter au maximum à tous les niveaux.
Re: [Question] Nombres de polygones maximum
Salut,
J'ai déjà eu à gérer de très (très très très) gros objets dans Unity. (Des nuages de points de relevés scanner pour être exactes) Et je vais encore devoir plrendre encore plus gros (j'ai peur) Pour info, je n'ai jamais atteint de limite pour Unity, il a toujours accepté mes objets. Il a un peu rechigné, ramé mouliné dans le semoule... mais c'est toujours passé. Donc même pour quelques millions de points, ça passe toujours. Au niveau du rendu, j'utilise un shader trouvé sur le net qui est vraiment le plus simple imaginable (même pas de texture, juste une petite couleur).
Par contre, sur les périphériques mobiles ça rame un peu, mais j'ai des scripts particuliers appliqués dessus qui alourdissent beaucoup, je doit justement tester ce que ça donne sans ces scripts pour savoir si je vais pouvoir utiliser des objets plus lourd ou si c'est même pas la peine d'y penser. Sur Android, j'avais un Galaxy Note2 et j'avais un résultat correct. Ensuite, j'avais un iPad3 sur lequel ça tournais mieux, mais j'avais un autre truc qui faisait planter l'appli.
La particularité de mon cas est que j'avais très peu d'objets mais 2 qui sont très complexes, je ne sais pas s'il y aura beaucoup de différences avec une scène composés d'une immenses quantité d'objets moins complexes.
Pour info, si tu as des objets très complexes (comme moi), Unity va te les découper. Un objet est limité à un maximum de 65534 points ou triangles. Si ça dépasse, il divise les objets et parfois un peu comme ça lui chante.
J'ai déjà eu à gérer de très (très très très) gros objets dans Unity. (Des nuages de points de relevés scanner pour être exactes) Et je vais encore devoir plrendre encore plus gros (j'ai peur) Pour info, je n'ai jamais atteint de limite pour Unity, il a toujours accepté mes objets. Il a un peu rechigné, ramé mouliné dans le semoule... mais c'est toujours passé. Donc même pour quelques millions de points, ça passe toujours. Au niveau du rendu, j'utilise un shader trouvé sur le net qui est vraiment le plus simple imaginable (même pas de texture, juste une petite couleur).
Par contre, sur les périphériques mobiles ça rame un peu, mais j'ai des scripts particuliers appliqués dessus qui alourdissent beaucoup, je doit justement tester ce que ça donne sans ces scripts pour savoir si je vais pouvoir utiliser des objets plus lourd ou si c'est même pas la peine d'y penser. Sur Android, j'avais un Galaxy Note2 et j'avais un résultat correct. Ensuite, j'avais un iPad3 sur lequel ça tournais mieux, mais j'avais un autre truc qui faisait planter l'appli.
La particularité de mon cas est que j'avais très peu d'objets mais 2 qui sont très complexes, je ne sais pas s'il y aura beaucoup de différences avec une scène composés d'une immenses quantité d'objets moins complexes.
Pour info, si tu as des objets très complexes (comme moi), Unity va te les découper. Un objet est limité à un maximum de 65534 points ou triangles. Si ça dépasse, il divise les objets et parfois un peu comme ça lui chante.
Re: [Question] Nombres de polygones maximum
Merci pour vos réponses !
Donc, en gros, il faut viser le moins possible, et faire des tests en prototypage pour vérifier au fur et à mesure
Mais au vu des dernières grosses productions sur le marché, je ne pense de toutes façons pas être inquiété.
Merci encore,
Bonne soirée.
Donc, en gros, il faut viser le moins possible, et faire des tests en prototypage pour vérifier au fur et à mesure
Mais au vu des dernières grosses productions sur le marché, je ne pense de toutes façons pas être inquiété.
Merci encore,
Bonne soirée.
-
- Messages : 18
- Inscription : 24 Mars 2010 19:05
Re: [Question] Nombres de polygones maximum
hello, j'ai quelques connaissances en openGL, et voici quelques explications :
Tu as 3 types de ressources à gérer avec un jeu :
La Ram du téléphone
tout ce que tu charge en mémoire est stocké en mémoire, si par exemple tu fais des scenes avec plein d'objets, que tu oublie de détruire des objets qui ne sont plus utilisés par ton code, tout ça reste en mémoire.
La Ram de la carte graphique
Elle est utilisée pour mémoriser les polygones, et surtout les textures, en fonction de la carte graphique du téléphone, tu peux exploiter plus ou moins de textures, et surtout plus ou moins grandes
Le processeur du téléphone
C'est utilisé par le code que tu va écrire pour ton jeu, comme le déplacement des personnages, l'intelligence artificelle, déziper un fichier pour extraire les données, générer un atlas au runtime....
Le processeur de la carte graphique
Le processeur des cartes graphiques de téléphone sont puissants, et souvent mal exploités quand on débute, ça sert en gros a transformer les coordonées 3D des vertex en coordonées 2D à l'écran, et la manières dont sont gérées les textures (via les shaders) Aussi les animations dans certains cas peuvent être gérées par le GPU plutot que par le CPU, tout comme les particules.
imagine une scene avec un objet a 300 000 polygones qui tourne sur lui même, dans, ce cas, tout est géré par le GPU (qui est puissant) , c'est juste une matrice de transformation qui est mise à jour, celle qui sert a calculer l'emplacement des vertex a l'écran.
imagine toujours une scene a 300 000 polygones, mais qui est composée de 100 000 triangles de 3 polygones, avec chacun une texture différente, et un déplacement différent. Ici c'est 100 000 matrices de transformations qui sont gérées par le CPU qui est moins puissant.
Bref, il faut que tu le dis, tester souvent ton jeu
Tu as 3 types de ressources à gérer avec un jeu :
La Ram du téléphone
tout ce que tu charge en mémoire est stocké en mémoire, si par exemple tu fais des scenes avec plein d'objets, que tu oublie de détruire des objets qui ne sont plus utilisés par ton code, tout ça reste en mémoire.
La Ram de la carte graphique
Elle est utilisée pour mémoriser les polygones, et surtout les textures, en fonction de la carte graphique du téléphone, tu peux exploiter plus ou moins de textures, et surtout plus ou moins grandes
Le processeur du téléphone
C'est utilisé par le code que tu va écrire pour ton jeu, comme le déplacement des personnages, l'intelligence artificelle, déziper un fichier pour extraire les données, générer un atlas au runtime....
Le processeur de la carte graphique
Le processeur des cartes graphiques de téléphone sont puissants, et souvent mal exploités quand on débute, ça sert en gros a transformer les coordonées 3D des vertex en coordonées 2D à l'écran, et la manières dont sont gérées les textures (via les shaders) Aussi les animations dans certains cas peuvent être gérées par le GPU plutot que par le CPU, tout comme les particules.
imagine une scene avec un objet a 300 000 polygones qui tourne sur lui même, dans, ce cas, tout est géré par le GPU (qui est puissant) , c'est juste une matrice de transformation qui est mise à jour, celle qui sert a calculer l'emplacement des vertex a l'écran.
imagine toujours une scene a 300 000 polygones, mais qui est composée de 100 000 triangles de 3 polygones, avec chacun une texture différente, et un déplacement différent. Ici c'est 100 000 matrices de transformations qui sont gérées par le CPU qui est moins puissant.
Bref, il faut que tu le dis, tester souvent ton jeu
Re: [Question] Nombres de polygones maximum
Très intéressant ce que tu nous dit. Par contre, tu as des confusions entre les termes il me semble : mathématiquement parlant, un triangle est un polygone (une forme composée de plusieurs points). A chaque fois que tu as parlé de polygone, c'est plutôt de point, ou de vertex qu'il faut parler. (dans les 2 paragraphes d'exemples)
-
- Messages : 18
- Inscription : 24 Mars 2010 19:05
Re: [Question] Nombres de polygones maximum
Oui triangles et polygones ce sont la même chose dans mon message.
Ce que je voulais dire, c'est qu'un mesh de 100 000 triangles qui se déplace en x y z prend bien moins de ressources que 100 000 triangles qui se déplacent individuellement dans différentes directions.
Dans le premier cas:
CPU : une matrice a gérer
GPU : 100 000 vertex + une matrice
Dans le second cas :
CPU : 100 000 matrices
GPU : 300 000 vertex et 100 000 matrices
Ce que je voulais dire, c'est qu'un mesh de 100 000 triangles qui se déplace en x y z prend bien moins de ressources que 100 000 triangles qui se déplacent individuellement dans différentes directions.
Dans le premier cas:
CPU : une matrice a gérer
GPU : 100 000 vertex + une matrice
Dans le second cas :
CPU : 100 000 matrices
GPU : 300 000 vertex et 100 000 matrices