Comparatif Moteurs 3D, et le plus performant est…
23 Commentaires Publié le 18 novembre 2008 _ 3D, DéveloppementSuite aux derniers posts concernant les moteurs 3D ( Alterntiva3D, Away3D, Papervision3D & Sandy3D), j’ai fait quelques tests afin de comparer les temps de création d’objet (Cube, Sphere, Cône et Plane) dans chacun des moteurs.
Attention, suite aux dernières mises à jour du framework de Papervision3D, les problèmes de mémoire évoquer ci-dessous n’ont plus lieu d’être.
Comparatif à jour & complémentaire ici »
Mise à disposition des sources :
- Alternativa3D » (le framework n’est pas inclus, n’étant pas en open-source)
- Away3D »
- Papervision3D »
- Sandy3D »
Ma méthode fut la suivante :
- Implémentation au plus simple et identique pour chacun des moteurs.
- Mécanique identique de création des objets, instance unique.
- Une seule instance des materials ( filaire et texture )
- Utilisation de calcul asynchrone afin de ne pas avoir de valeurs faussés ( la création de l’objet est faite quand le processeur le permet )
- Test à la création de 1000 objets, avec différentes variables ( filaire ou bitmap, lissage de l’image ou non)
- Stockage des données dans un tableau, les résultats utilisés sont les moyennes de temps de création et de mémoire utilisés par objet.
- Vérification de la mémoire initiale, du pique de mémoire, ainsi que de la mémoire utilisé après les tests.
Version :
- Papervision3D : Public Beta 2.0 – Great White / 2008.09.09 (revision 731)
- Away3D : 2.1.0 / 2008.05.23
- Sandy3D : 3.0.2 / 2008.02.25
- Alternativa3D : 5.3.0 / 2008.08.12
Comme vous pourrez le remarquer les résultats sont très disparates suivant les moteurs, et même si les objets n’ont pas les mêmes caractéristiques (le nombre de segments d’un cube ne peut pas être augmenté dans Away3D & Sandy3D, contrairement à Alternativa3D & Papervision3D), les différences parlent d’elles mêmes… Vous le verrez dans les 4 points suivants :
1. Poids SWF
L’exportation du fichier swf et le poids de celui ci (non négligeable au moment de l’accès au site, notamment pour les petites connexions) montre les premières différences entre les moteurs.
Le premier cas importe les package de camera, vue et scene.
Le second cas importe en plus les pacakge de Cube, Plane, Cone et Sphere.
| - | |||
| 1. Sandy3D | - | ||
| 2. Alternativa3D | - | ||
| 3. Papervision3D | - | ||
| 4. Away3D | - |
2. Mémoire à l’initialisation du moteur:
Voyons maintenant l’espace mémoire pris lors de l’implémentation du moteur 3D. On test la mémoire sans lancer aucune création d’objet, et les moteurs montrent déjà que certains sont plus optimisés et d’autres, beaucoup, beaucoup moins :
1. Papervision3D – 167 ko
2. Away3D – 199 ko
3. Alternativa3D – 202 ko
4. Sandy3D – 1 136 ko
Sandy3D part donc déjà avec un gros handicap, on verra par la suite que ce n’est pas le seul…
3. Mémoire Globale:
L’écart se creuse encore, Papervision3D et Sandy3D ont une très mauvaise gestion de la mémoire, en effet malgré la suppression de l’objet sur la scène et de son instance, il est toujours en mémoire. L’application monte donc en mémoire, sans jamais redescendre, ce qui peut s’avérer extrêmement dangereux… Il est à noté que Away3D & Alternativa3D gèrent par contre très bien la mémoire, et suppriment les éléments comme il faut. Après la création de plusieurs milliers d’instance de plusieurs objets, on se retrouve avec une mémoire :
1. Away3D – 700 ko
2. Alternativa3D – 876 ko
3. Papervision3D – 50 784 ko
4. Sandy3D – 175 552 ko
Les graphes ci-dessous montre bien la gestion de la mémoire par les 4 moteurs 3D, on remarque sur Alternativa3D & Away3D, la mémoire qui évolue suivant les suppressions d’éléments et le lancement du Garbage Collector, alors que pour Papervision3D & Sandy3D, ca monte, ca monte, ca monte….
Alternativa3D

Away3D

Papervision3D

Sandy3D

4. Création d’objet :
Question de logique, plus l’objet à créer est compliqué, plus il faudra de temps pour le créer, et plus la mémoire utilisé par cet objet sera importante… Comparer les temps de création et d’espace mémoire entre chacun des moteurs objets est assez compliquer. En effet, malgré des valeurs identiques, les moteurs créer des objets plus ou moins complexes, je ne comparerais donc pas la forme de ces objets, le nombre de triangle étant assez identiques, l’appréciation de la qualité de l’objet est spécifique à chaque utilisateur…
|
Création d’un objet filaire
|
||||
| Box | Plane | Cone | Sphere | |
| Away3D | 0.814ms – 23ko | 0.321ms – 9ko | 1.265ms – 37ko | 4.884ms – 138ko |
| Alternativa3D | 5.865ms – 95ko | 1.913ms – 20ko | 5.723ms – 102ko | 9.434ms – 179ko |
| Papervision3D | 4.961ms – 126ko | 0.872ms – 23ko | 2.996ms – 76ko | 4.126ms – 84ko |
| Sandy3D | 1.645ms – 16ko | 0.267ms – 12ko | 10.848ms – 222ko | 15.299ms – 314ko |
|
Création d’un objet avec bitmap non lissé
|
||||
| Box | Plane | Cone | Sphere | |
| Away3D | 1.292ms – 35ko | 0.817ms – 23ko | 1.67ms – 49ko | 5.159ms – 153ko |
| Alternativa3D | 5.909ms – 96ko | 1.966ms – 21ko | 5.733ms – 102ko | 9.478ms – 178ko |
| Papervision3D | 6.486ms – 169ko | 1.801ms – 70ko | 3.607ms – 121ko | 5.31ms – 130ko |
| Sandy3D | 1.856ms – 18ko | 0.254ms – 12ko | 11.389ms – 229ko | 16.295ms – 330ko |
|
Création d’un objet avec bitmap lissé
|
||||
| Box | Plane | Cone | Sphere | |
| Away3D | 1.319ms – 35ko | 0.843ms – 23ko | 1.722ms – 51ko | 5.195ms – 152ko |
| Alternativa3D | 5.811ms – 97ko | 1.954ms – 21ko | 5.764ms – 102ko | 9.475ms – 182ko |
| Papervision3D | 6.391ms – 169ko | 1.837ms – 70ko | 3.556ms – 121ko | 5.259ms – 128ko |
| Sandy3D | 1.747ms – 18ko | 0.221ms – 12ko | 11.16ms – 228ko | 15.657ms – 330ko |
4.1 Temps
De manière globale, Away3D est le plus rapide.
Sandy3D a des performances équivalente voire meilleure pour la création de Box ou de Plane, mais est très très loin d’être aussi performant dans la création de Cône ou de Sphère, une fois de plus celui ci se démarque par sa singularité.
Quelque soit le type de texture utilisé, Alternativa3D a des temps de création quasi similaires, il est donc moins performant lors de création d’objet filaire, mais cet handicap se réduit donc lors de la création d’objet « texturé ».
Les temps de création d’objet par Papervision3D se situe dans la moyenne de celle d’Away3D et Alternativa3D, excepté pour les Box, ceci étant du aux nombres de segments crées par Papervision3D.
1. Away3D
2. Papervision3D
3. Alternativa3D
4. Sandy3D
4.1 Mémoire
Comme pour les temps de création, Away3D est le moins gourmand en général :
- Sandy3D consomme moins de ressources lors de la création de Box ou de Plane, mais explose littéralement lors de la création de Cône et de Sphère
- Papervision3D, consomme beaucoup moins de ressource lors de la création de Sphère, mais utilise presque 6 fois plus de mémoire qu’Away3D lors de la création de Box ( notamment du, comme pour le temps de création, au nombre de segments crées par Papervision3D )
Alternativa3D est quant à lui dans la moyenne haute des autres moteurs, sans pour autant être catastrophique.
1. Away3D
2. Papervision3D / Alternativa3D
4. Sandy3D
Différence de temps de création entre un objet filaire et un objet texturé :
| Box | Plane | Cone | Sphere | |
| Away3D | +/- 0.5ms | +/- 0.5ms | +/- 0.5ms | +/- 0.3ms |
| Alternativa3D | +/- 0.1ms | +/- 0.1ms | +/- 0.1ms | +/- 0.1ms |
| Papervision3D | +/- 1.5ms | +/- 1.0ms | +/- 0.7ms | +/- 1.2ms |
| Sandy3D | +/- 0.1ms | +/- 0.1ms | +/- 0.5ms | +/- 1.5ms |
Ces écarts de temps de création sont à corrélés avec la mémoire utilisés par la création de cet objet :
| Box | Plane | Cone | Sphere | |
| Away3D | +/- 12ko | +/- 14ko | +/- 13ko | +/- 14ko |
| Alternativa3D | +/- 1ko | +/- 1ko | +/- 1ko | +/- 3ko |
| Papervision3D | +/- 43ko | +/- 47ko | +/- 45ko | +/- 46ko |
| Sandy3D | +/- 2ko | +/- 2ko | +/- 6ko | +/- 15ko |
On peut remarquer que ces écarts sont quasi idem pour chacun des objets crée par chaque moteurs 3D, Alternativa3D ayant un delta proche de zéro, on peut conclure que la gestion de texture filaire ou bitmap se fait de la même façon. On remarque aussi les différences de delta pour Sandy3D entre les objets Box/Plane et Cône/Sphère.
5. Conclusion
Les tests effectués ne sont peut être pas représentatifs de la création d’une application, ou d’un site internet, mais ils nous montrent comment réagissent ces moteurs 3D dans des cas extrêmes, et si certains cas semblent dangereux (notamment la gestion de la mémoire), il faut garder en mémoire que tout le monde n’a pas de machine surpuissante, et qu’il faut toujours penser à qui est destiné le développement que l’ont fait (et pas se dire, si ca marche sur ma machine, y’a pas de raison que ca marche pas ailleurs, comme je l’entend assez souvent…).
De plus, ce comparatif ne prend pas en compte les différentes possibilités offertes par certains moteurs 3D (réélections…), il faut donc choisir judicieusement le moteur en fonction de ces possibilités ainsi que de ces performances.
Concernant les performances, venons en donc aux conclusions.
4. – Sandy3D et la mémoire, ce n’est pas un histoire d’amour, et ce, dès l’initialisation du moteur, et même si les performances lors de la création de Box et de Plane sont parmi les meilleures, la gestion de la mémoire (pas de suppressions des instances), les performances « catastrophiques » pour la création de Cône et de Sphère (donc d’éléments complexes), montrent les lacunes de Sandy3D. Au vue des résultats, c’est le seul moteur qui ne réagit pas de façon homogène, si vous l’utiliser il faut rester dans des formes simples, et peu nombreuses…
2. ex aequo – Les temps de création de Papervision3D se situe dans la moyenne, c’est au niveau de la mémoire que ça se gâte, malgré une bonne gestion lors de la création de Sphère, il est bien plus gourmand lors de la création de Box et de Plane. Nous avons pu voir que Papervision3D ne supprime pas ces instances et rencontre donc le même problème que Sandy3D, sans pour autant cumuler au même sommet mais c’est à surveiller lors de création et suppression de nombreux éléments…
2. ex aequo – Alternativa3D, dernier venu dans le monde des moteurs 3D, gère extrêmement bien (ou plutôt normalement !?) la mémoire, il est cependant plus gourmand en temps de création (entre 2 et 5 fois plus) que les autres moteurs. Malgré son coup de licence qui peut freiner, ces performances en font un des meilleurs moteurs 3D actuels.
1. Et pour finir, Away3D. Temps de création les plus bas du comparatifs, mémoire nécessaire à la création les plus bas aussi, excepté sur quelques points (Box et Sphère), mais qui reste excellents, et gestion de la mémoire globale excellente aussi. Bref le moteur 3D que je conseillerai (en terme de performance, encore une fois, et pas de possibilité de rendu graphique ).
Merci à Philippe, dit « Papa », pour sa relecture !
NB:
- Comparatif réalisé avec le Flash Player 10
- J’ai utilisé le terme Box de façon générale, la classe exacte pour Away3D et Papervision est Cube, il en est de même pour Plane3D dans Sandy3D
23 commentaires pour “Comparatif Moteurs 3D, et le plus performant est…”
Laisser un commentaire
|
RechercheCatégories
|
||
19 novembre 2008 à 1:53
[...] à (tagada!) Tsouin.com que l’on doit un travail énorme de comparatif de performance des quatre moteurs 3D… les plus aboutis : Papervision3D, Away3D, Alternativa3D et Sandy3D sur leurs performances. Il en [...]
19 novembre 2008 à 7:51
Merci pour ce comparatif détaillé ! Je suis agréablement surpris par les perf d’Away3D.
Sinon. Je confirme pour les fuites mémoires de Papervision. C’est très embêtant, surtout quand tu es obligé de remplacer tout un tas d’objet 3D.
Il y a peut être quelque chose à espérer sur les dernières night build :
http://dev.papervision3d.org/2008/11/13/papervision3d-memory-leaks-now-patched-up/
A suivre
19 novembre 2008 à 10:45
Superbe article ! Bravo à toi pour ces tests. J’avais remarqué les problèmes de mémoire sur Papervision aussi. Je vais aller me renseigner du coté de Away3D en tout cas.
19 novembre 2008 à 11:34
Hello,
Comparaison tres instructive en effet.
Ca fait plusieurs mois que j’utilise papervision et les problemes de gestion memoire sont effectivement le gros point noir de cette api (comme mentionne par SylvainW, il semble que ces problemes commencent a disparaitre meme si le moteur reste gourmand)
Pour ceux interresses, ce post donne quelques infos sur les optimizations possibles de PV3D en terme de memoire management (http://www.nabble.com/Suggested-optimisations-for-geomerty-related-memory-usage-to20572281.html#a20572281).
Away3D, au dela des resultats qui sont ici presentes me semble aussi etre l’api la plus activement developpee si l’on en croit le nombre de commit SVN qui sont fait chaque semaine le probleme restant la gestion d’une documentation centralisee ( Sandy excelle sur ce point la )
My 2 cents
19 novembre 2008 à 17:54
Oh boy, we are the fattest !!
Promis: pour notre version F10, on va faire attention aux classes grasses!!
Juste une petite note en passant, la classe Cube est sur la table d’operation, pour les subdivisions.
19 novembre 2008 à 20:38
Very interesting. Could you publish test sources? I can’t beleve if there are identic ways to setup scenes in these four engines. There should be different approaches to optimise scene in each engine. Anyway it would be great to see sources.
20 novembre 2008 à 0:59
Hello again,
Afin de calmer les polemiques qui commencent a fuser a propos de la veracite de ces tests, serait il possible d’avoir acces aux sources afin que chaque partie puisse faire un check de son cote pour validation et eventuellement te renvoyer un update de ce source contenant des modifs visant a en ameliorer les perf ?
Thanks a lot.
20 novembre 2008 à 2:43
Without disclosure of all used test methods per engine, these results are useless. The results seem random at best, so why not show per-engine source code, and the test goals to go with the actual results ?
20 novembre 2008 à 3:23
A priori le problème de gestion de la mémoire a été résolu pour Papervision3D dans la dernière release comme l’explique Seb Lee sur son blog :
http://www.sebleedelisle.com/?p=309
Peut être refaire le test?
20 novembre 2008 à 3:53
[...] can read it here ! (sorry it’s in french :p [...]
20 novembre 2008 à 13:17
J’ai mis à disposition, comme demandé, les fichiers sources utilisés pour le comparatif.
Je n’ai pas mis la version complète de la classe de calcul asynchrone, mais seulement les fonctions utilisées, et Alternativa3D n’étant pas open source, et n’étant pas téléchargeable sans identification, je n’ai pas non plus mis le framework…
20 novembre 2008 à 14:39
Merci,
ce genre de tests sont extremement utiles. Cela montre une fois de plus qu’il est aussi extremement important de valider le fonctionnement d’une api vis a vis de ses alternatives ( je n’aurai jamais pense voir une telle difference )
En tout cas ce post aura eu le merite d’alerter l’equipe pv3d sur cette issue la et je suis certain qu’elle va y remedier rapidement.
L’ideal serai qu’ a partir d’une serie de scenes template, il soit possible pour chacune des equipe de publier une grille de performance.
my 2 cents
20 novembre 2008 à 15:08
@makemepulse, je vais tester ca
–
@menorki, je ne pensais pas trouver autant de différence non plus, j’ai pourtant vérifier, et affiner à chaque fois mes tests, mais le résultat était là.
Je confirme que Papervision3D n’est pas un mauvais moteur 3D, ce genre de test est poussé à l’extrême, et il n’y a que dans peu de cas qu’on atteindra ces limites…
20 novembre 2008 à 15:46
Avec la dernière revision (804), les fuites de mémoire n’existent plus, les performances de Papervision3D sont au niveau de Away3D et Alternativa3D, voir meilleures.
Je fais un update du post…
21 novembre 2008 à 12:00
Merci, d’avoir pris le temps de faire tout ça, c’est très utile.
21 novembre 2008 à 12:22
En effet, l’initialisation du moteur est assez lourde sur cette version du moteur.
Depuis, nous l’avons bien changé, car en effet, trop de personnes nous ont signalé ce problème. Cela est du au fait que j’initialisais constamment des données nécessaires au OutlineAttribute, et ce calcul est très lourd.
Pourrais tu refaire un test équivalent avec la version dans le trunk de Sandy3D, à savoir la prochaine 3.0.3?
Très bon bench dans tous les cas.
Juste dommage de comparer seulement sur l’initialisation d’objets, le rendu serait aussi intéressant à comparer
Thomas
21 novembre 2008 à 12:26
Chaque chose en son temps pour les comparatifs, c’est déjà pas mal de boulot
Je vais tester la 3.0.3 de Sandy3D ( je n’étais pas au courant de cette nouvelle version )
25 novembre 2008 à 20:25
snif… Moi j’aime bien Sandy3D, vivement que la 3.0.3 corrige le tir !
N’empêche, il faut aussi voir le rendu
16 décembre 2008 à 16:55
Bonjour,
je viens de faire une release de la 3.1 (anciennement prévue 3.0.3) en Release candidate.
Vous pouvez donc mettre à jour ce bench si l’envie vous prend et le temps vous le permet.
Thomas
16 décembre 2008 à 17:48
Yep, j’ai suivi la news sur le site de sandy3D, j’essaye de m’occuper de ca cette semaine
13 février 2009 à 4:13
Would be interested to see what the new version of Away3d (2.3.0) can do to improve it’s stats… would another comparison be possible?
5 mars 2009 à 14:46
I work on a new version, i post the result a soon as possible
20 mars 2009 à 23:45
[...] out and very Flash AS3-like; if you don’t like it there are other options. There’s a nice comparsion on the four major 3D engines for Flash here (warning: it’s in French). Lots of talk about speed of object creation, memory requirements, [...]