-->

Comparatif Moteurs 3D, et le plus performant est…

| 23 Commentaires

Suite 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.

!!! UPDATE !!!
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.

Cas 1 : Implémentation du moteur
-
Cas 2 : Implémentation primitives
1. Sandy3D
60ko
-
87ko
2. Alternativa3D
70ko
-
94ko
3. Papervision3D
83ko
-
95ko
4. Away3D
105ko
-
132ko

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

Alternativa3D

Away3D

Away3D

Papervision3D

Papervision3D

Sandy3D

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

  1. Pingback : Hebiflux » 3d en flash : comparatif des moteurs et des nouveautés chez Alternativa

  2. 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 :)

  3. 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.

  4. 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

  5. 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.

  6. 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.

  7. 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.

  8. 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 ?

  9. 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? :)

  10. Pingback : Make me pulse - Making a better life for web developer since 2006

  11. 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…

  12. 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

  13. @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…

  14. 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…

  15. Merci, d’avoir pris le temps de faire tout ça, c’est très utile.

  16. 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

  17. 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 )

  18. snif… Moi j’aime bien Sandy3D, vivement que la 3.0.3 corrige le tir !

    N’empêche, il faut aussi voir le rendu :)

  19. 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

  20. Yep, j’ai suivi la news sur le site de sandy3D, j’essaye de m’occuper de ca cette semaine :)

  21. 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?

  22. I work on a new version, i post the result a soon as possible

  23. Pingback : confectionary malfunction » pure unadulterated actionscript geekery

Laisser un commentaire

Champs Requis *.


Seo