Virtools vs Unity

En matière de developpement 3D il existe aujourd'hui une multitude d'outils (middleware ou moteur 3D purs) pour arriver a ses fins et produire des applications 3D interactives de qualité.
En ce qui nous concerne nous avons préféré ne pas nous spécialiser dans une seule technique, mais au contraire d'en maitriser plusieurs afin d'offrir à nos clients différents choix (et donc différents couts).
Nous avons opté pour les 3 solutions suivantes:
- Utilisation du middleware Virtools
- Utilisation du middleware Unity
- Utilisation du moteur 3D Ogre

Je ne vais pas m'étendre sur la solution Ogre qui par sa nature necessite principalement du developpement C++
Je vais par contre exposer ici les différences (qui me viennent à l'esprit) entre Virtools et Unity.

N'hésitez pas à nous envoyer vos remarques si vous n'estes pas d'accord avec les notres, ou si vous souhaitez que l'on aborde d'autres points de comparaison.

Si vous recherchez des competences dans une des ces technologies pour votre projet et que google vous a ammenné jusqu'ici...n'hésitez pas à nous envoyer un email.

----------------- Notes 2011 -----------------
J'ai completé ce comparatif coté Unity mais pas coté Virtools puisque celui ci n'est plus maintenu.
Virtools a été remplacé par 3DVIA Studio que je n'ai pas eu trop le loisir d'utiliser d'autant que le cout des licences reste un veritable frein a son utilisation, ce qui fait qu'aujourd'hui les alternatives comme Unity restent préferables et rencontrent un veritable succés aupres des developpeurs.

v1.41

Virtools (4.1)
Unity (3.5)
Version gratuite
Virtools n'est pas distribué en version free, il n'est donc pas possible de l'essayer, ni pour les étudiants de se former de maniere autodidacte.
Cependant Virtools a sorti en 2009 l'outil "3DVIA Studio" qui est une version alternative de Virtools et qui est gratuite mais qui ne permet que de développer des applications Web et de ne les diffuser que sur le site de 3DVIA.

Unity est disponible en version gratuite avec quelques limitations:
- Pas de plugins
- Pas d'ombres
- Pas de profiler
- ...

Unity Pro est disponible en version d'essai avec une limitation dans le temps à 30 jours.

Cout de licence

Virtools ne dispose pas de grille tarifaire officielle, ce qui est tres perturbant et assez problematique pour evaluer les couts d'un projet lorsqu'on ne dispose pas encore de licence.
De mémoire la licence de developpement par poste etait > 10000€
On a également la possibilité de louer une licence à l'année pour un motant > 4000€
(note: ces chiffres ne sont qu'approximatifs, pour avoir le veritable tarif il faut contacter virtools et négocier) .
Ces couts ne prennent pas en compte les différents packs additionnels disponibles.

Les tarifs Unity sont clairements affichés sur leur site et on peut commander les licences directement.
La version pro de base est aux alentours de 1050€
Auquels il faut rajouter les options suivant les plateformes:
iOS 280€
iOS Pro 1050€
Android 280€
Android Pro 1050€

Pour plus d'informations voir sur le site d'Unity https://store.unity3d.com/shop/ .
Comparaison des licences http://unity3d.com/unity/licenses

Couts de publishing
impossible de donner des chiffres la dessus car cela depend de beaucoup de choses (CA de l'entreprise, type de projet, type de distribution...), il faut donc négocier cela directement avec Virtools.
Mais dans tous les cas c'est un poste qui consomme une grande part du budget, donc à ne pas oublier lors du chiffrage.
Il n'y en a pas.
Si vous avez la licence de développement, libre a vous de produire ce que vous voulez.
Build WEB de l'application
Virtools fournit une commande d'export WEB simple et rapide qui genere un fichier .html et un fichier .vmo qu'il suffira de placer sur n'importe quel serveur.
Unity fournit une commande d'export WEB simple et rapide qui genere un fichier .html et un fichier .unity qu'il suffira de placer sur n'importe quel serveur.
La comunication avec le site se fait en JavaScript.
O on peut ainsi à partir d'Unity appeller une fonction JS mais qui ne renvera pas de valeur et s'executera de maniere asynchrone.
On peut aussi à partir d'Unity directement executer des commandes JS.
Et on peut à partir de JS appeller des fonctions de scripts unity attachées à des objets de la scene.
Plateformes supportées

Virtools propose des exports pour:
- PC Windows
- Web
et plus récement:
- XBox 360
- Wii

Unity propose des exports pour:
- PC Windows
- MAC
- Web
- iOS (iPhone,iPad,iPod)
- Android
- Wii
- XBox360
- PS3
- Flash

Build STANDALONE PC de l'application

Virtools fournit avec le SDK les sources C++ d'un player standalone capapble de lire les .nmo. Cependant cela necessite de l'adapter ou au moins de le recompiler avec visual studio. C'est donc beaucoup moins rapide que l'export d'Unity.
Malgrés cela cette solution a l'avantage de laisser au developpeur la possibilité d'encapsuler son application Virtools dans n'importe quelle application classique (Win32, QT...), ce qu'Unity ne permet pas de faire.

Unity fournit une commande d'export Standalone simple et rapide qui genere un fichier .exe ainsi qu'un repertoire de Data.
Cependant il n'est pas possible d'encapsuler une instance de l'application dans une autre application classique, ce qui est regrétable.
Build iOS & Plugin iOS

 

Lorsque l'on developpe pour iOS à partir d'unity (deja il faut la faire avec un mac) le build de l'application se fait en 2 etapes.
On build le projet unity qui genere un projet xCode.
Ensuite on doit ouvrir ce projet xCode et compiler l'application avec les bons certificats et tester sur les devices à partir de la.
Il faut evidement avoir installé le SDK iOS.

Du coup il devient tout a fait possible d'intervenir sur le code generé afin de rajouter des fonctionnalités pour par exemple acceder au hardware du device ou pour utiliser un sdk ios comme facebook ou encore pour profiter de fonctionnalités du SDK iOS qui ne sont pas remontées dans unity tel que l'InAppPurchase par exemple.
Cependant la communication entre iOS et Unity n'est pas aisée dans les 2 sens. Le systeme de plugin (doc unity) permet à partir d'unity d'appeller des fonction iOS mais l'inverse est plus compliqué (mais pas impossible).
Notons qu'il est donc possible de "mélanger" des view Unity et des view iOS dans une meme application, mais bon c'est extremement long à debugger, c'est pour ca que je conseille dans ce cas la de faire le maximum de choses dans Unity et de bien decoupler les roles.

A partir de la version 3.5, le "Build&Run" fonctionne.
Build Android & Plugin Android

 

Lorsque l'on developpe pour Android à partir d'unity (PC ou MAC) les choses sont assez simples.
Un simple "Build and Run" et l'application genere un fichier .APK qui se lance sur votre device.
Bien sur il faut avoir installer le SDK de developpement Android.
Bon n'esperez pas disposer des informatino de debug dans la console unity, si vous voulez voir les log de votre application il faut passer par le log du device ("adb logcat").

Au niveau des plugins, il faut les generer (tel que decrit dans la doc) en .JAR et .SO et les placer dans un repertoire particulier des assets de votre projet (Assets/Plugins/Android). On peut meme aller plus loin et intégrer un manifest (qui remplacera celui par defaut utilisé par unity (et que l'on peut trouver dans le rep d'install d'unity)) ce qui permet par exemple de pouvoir integrer le sdk facebook android.

Plugins WEB
Virtools dispose d'un systeme de serveur qui permet de distribuer des plugins fait avec le SDK. Le serveur est bien sur payant mais cela offre de grandes possibilités pour les applications online.
Les plugins Unity ne sont pas compatibles avec l'export WEB
Interface
L'interface de Virtools est suffisament aboutie et pratique a l'utilisation. L'interface d'Unity est également de bonne facture.
Stabilité
Virtools (4.1) souffre de plantages difficilements explicables et qui risquent sérieusement de vous faire perdre tout votre travail !!
De ce fait il est necessaire d'effectuer des sauvegardes incrementales de votre projet, et il n'est pas rare en fin de projet de disposer de plusieurs centaines de versions.
Note: Cela a propablement été corrigé, en partie ou totalement, sur la version 5

Unity est relativement stable à l'exeption de quelques cas de plantage systematiques:
- Par de protection sur les boucles infinies

Unity n'utilisant que des scripts, il n'y a aucune chance pour que vous perdiez votre travail de programmation lorsque celui-ci plante. C'est un des gros avantages à utiliser des Scripts externes.

Language de programmation (hors plugins)
Virtools propose 2 manieres de programmer. Soit à base de shematic, soit dans un language de script proche du C, le VSL.
Le shematic permet de faire des choses tres rapidement, mais il a ses limites car au dela d'une certaine complexité il faudra une rigueur extreme pour maintenir le fonctionnement.
Le VSL est plus pour les programmeurs dans l'ame, il devient indispensable à partir du moment ou le shematic devient trop complexe.
Une combinaison des 2 est probablement la meilleure solution.
Notons qu'a partir de la version 5 Virtools permet de scripter en LUA.
Sous Unity on ne code qu'avec des scripts (Javascript, C#, Boo), ce qui est moins rapide au depart qu'avec Virtools et son shematic, mais qui permet ensuite plus facilement de capitaliser.
Un code propre permettra de traiter des applications de toutes complexités sans problemes.
Les outils de programmation
Virtools dispose de suffisament d'outils de programmation au sein de l'interface, notons par exemple le présence des 2DCurve (avec un editeur visuel), outils qui est cruellement absent d'Unity.

Unity ne dispose pas d'énormement d'outils pour aider au developpement, bien que l'on puisse noter la présence d'un module "Animation" qui permet de fabriquer rapidement des animations simples à base de keyframe.
Le profiler d'Unity est egalement de bonne facture comparé à ce que propose Virtools.

Debugger pas à pas
Virtools dispose d'un debugger autant pour le shematic que pour le VSL
Le debugger present sur Unity n'est vraiment pas pratique et a tendance a bloquer. Rien a voir avec l'ergonomie de visual studio et c'est egalement moins bon que le debugger Virtools.
Import médias 2D
Virtools utilise les formats de fichier standards: JPG, PNG...
Unity utilise les formats de fichier standards: JPG, PNG... ainsi que les fichiers PSD (Photoshop), ce qui est extremement pratique.
Notons qu'Unity convertit les images dans sons propre format.
import médias 3D
Pour exporter un modele 3d vers Virtools il faut le convertir en .NMO (format proprietaire Virtools), pour cela Virtools fournit les exporters necessaires pour les différentes versions de Max et Maya.
Notons que Virtools livre également les sources C++ de ces exporters.
Notons également que la modelisation des personnages animés pour utilisation Virtools n'est pas aisée au premier abord car les contraintes sont nombreuses, il faut de l'experience.
Unity ne comprend en natif que les fichiers .FBX, il faut alors trouver un exporter FBX pour votre logiciel de 3D. Le format FBX etant répandu cela ne doit pas etre dur à trouver.
Notons qu'Unity convertit les fichiers FBX dans sons propre format, ce qui pose un probleme important: l'impossibilité de charger dynamiquement des fichiers 3D non préparés au préalable (donc impossible de faire un standalone visionneur de FBX !)

Si l'on dispose sur son poste de Cinema 4D ou de 3Ds Max, alors unity sera capable de lire les formats de fichier associés.
import médias Audio
Unity Importe facilement WAV et MP3
import médias Video
Unity accepte les fichers video de différents format directement dans les assets.
Ces videos sont utilisées comme une texture que l'on doit manipuler en l'appliquant sur des objets ou dans de la GUI.

Cependant cette techique n'est pas valable pour iOS et Android. Sur ces plateformes on doit utiliser une autre technique qui utilisera le hardware des devices pour lire la video. Celle-ci ne pouvant etre jouée qu'en fullscreen tout en mettant en pause l'application unity. Du coup on ne maitrise pas non plus les transitions entre l'application unity et la video puis entre la video et l'application unity.
Sur ces plateformes la video doit etre encodée dans un format compatible avec le hardware et doit obligatoirement etre placée dans un repertoire spécifique des assets (Asstes/StreamingAssets).

Notons qu'avec un plugin iOS/Android on a la possiiblité de lire les videos frame par frame et de renvoyer ces frames vers une texture Unity.

import autres médias
Unity accepte les Font classiques TTF.
En theroie on peut utiliser ces fonts tout a specifiant dynamiquement la taille de celle ci lors de l'utilisation.

Cependant cette derniere fonctionalité n'est pas valable pour iOS et Android ou on doit placer dans les assets autant de fois la font que de tailles différentes que l'on souhaite utiliser.
Plugins Standalone
Les plugins Virtools sont developpés en C++ à l'aide du SDK et permettent rellement d'éttendre les possiblités du logiciel.
Les plugins unity se contentent d'exporter des fonctions de DLL afin de les rendre accessibles aux scripts, mais ca s'arrette la, il n'y a pas moyen de manipuler la scene ou le moteur via un plugin C++.
Le systeme de plugin est donc suffisant mais pas aussi performant que celui de Virtools.
Notons que la liaison entre les fonctions de DLL et Unity doit obligatoirement se faire via un script C#
Customisation Editeur
Virtools offre via son SDK de grandes possibilités de création de modules additionnels à l'editeur.
Unity offre la possibilité de creer des petits modules editeur, mais ce n'est pas aussi puissant que ce que propose Virtools via le SDK
SDK
Le SDK de virtools est dans sa grande majorité un exemple de clarté. il permet de developper des plugins puissants en donnant acces à preque tout le coeur du moteur 3D et à la scene.
Le SDK d'Unity se limite à l'utilisation de sripts JS de type "Editor" et à la possibilité d'import de fonctions de DLL.
En somme il n'existe pas de SDK C++ qui permettrait d'acceder au fonctions d'Unity ou à la scene 3D. Cet etat de fait oblige a tout faire à base de scripts, le c++ etant reservé à la partie gestion de périphériques sans connections avec la scene 3d ou le moteur de rendu.
Particules
Virtools dispose d'un systeme de particule assez évolué et performant. Le systeme de particule d'Unity est également performant, meme s'il semble à peine en dessous de celui de Virtools.
A partir de la version 3.5 un nouveau systeme de particule visiblement beaucoup plus parametrable est disponible dans Unity.
Shaders
Virtools intégre un editeur de shader (code) qui est pratique.
Les shaders doivent etre codés pour chaque API, soit HLSL pour DirectX et GLSL pour OpenGl.
Virtools esistant depuis un certain temps maintenant, certains editeurs visuels de shader sont capables d'exporter leur shaders vers Virtools.
Unity ne dispose pas d'éditeur de shader intégré, ceux-ci sont codés dans des scripts .shader.
Les shaders sont ecrits en cgFx, ce qui les rend compatibles OpenGl et DirectX sans adapatation.
Les shaders sous unity sont un peu plus complexes que sous Virtools car ils intégrent la notion de material (notion qui n'existe plus qu'esthetiquement dans l'editeur, tous les reglages se faisant via les shaders)

Notons qu'il existe certains developpements d'editeur de shader pour unity tel que Strumpy Shader
Travail collaboratif
Le travail collaboratif sous Virtools n'est pas simple, il est necessaire de mettre en place un systeme de chargement dynamiques des differentes parties du projet et de bien s'entendre sur la methode de communication entre ces parties. Chaque developpeur pourra alors travailler sur une partie distincte.
Le travail collaboratif est beaucoup plus simple sous Unity que sous Virtools grace au fait que tout se fait en scripts externes.
On peut ainsi partager les sources des scirpts via SVN.
Seule la scene ne doit pas etre partagée, mais l'interet est de faire une scene dynamique.

Documentation unity sur comment utiiliser SVN avec Unity
Serveur de médias
Virtools dispose d'un serveur de médias - pas testé
Unity dispose en option d'un serveur de médias - pas testé
Pack additionnels
C'est une des forces de Virtools, de proposer (moyenant finance) des packs additionnels complets pour par exemple gérer les péripheriques les plus connus de Réalité Virtuelle.
Unity ne propose pas de packs additionnels, vous devez les faire vous meme.
Rhytme d'évolution du logiciel
Virtools évolu lentement par grosses versions espacées dans le temps et nécessitant de gros investissements pour se tenir à jour.
Virtools est maintenant géré par Dassault Systeme, un environnement qui différe probablement dans la taille et dans l'esprit de l'environnement d'Unity.
Notons que pour les clients, le logo "Dassault Systeme" est un gage de qualité et de stabilité et cela est à prendre en compte.
Virtools 'est arretté à la version 5, Studio Pro a pris la releve.
Unity evolu tres rapidement.
Réalité Augmentée & ARToolkit
Nous avons intégré ARTookit à Virtools sans trop de problemes, l'essentiel des calculs se faisant dans le plugin directement en C++

Nous avons intégré ARTookit à Unity sans trop de problemes, l'essentiel des calculs se faisant dans le script d'importation C#

Notons qu'il existe maintenant une librairie tres interessante pour faire de la RA avec Unity sur iOS et Android:
https://ar.qualcomm.at/qdevnet/ 

Reconnaissance Vocale
Pas testé, mais cela marcherait sans aucuns doutes.
Nous avons intégré la librairie de reconnaissance vocale Lynx à Unity sans trop de problemes.
VR

Virtools dispose d'un pack VR qui permet d'acceder notament à de l'affichage stereo. Notons d'ailleurs que cette feature etait accesible sans pack dans la version 3.5 de Virtools, mais pour des raisons commerciales ont doit maintenant acquerir le pack VR pour en disposer (Vraiment domage).
Cependant depuis la sortie de la solution stereo materielle de NVidia l'interet du systeme de stereo intégré devient tout relatif...

Rien n'est prevu dans Unity, il est alors necessaire de developper sois meme, mais cela peut etre problematique du à l'absence de SDK C++.

Merci pour leurs remarques pertinantes à:
Edwin
Marc