| Q&A |
Cooki3d,
Bertrand Greslier
November 2006 |
| |
 |
"L'exemple
osgDepthShadow utilise les fragment shaders pour réaliser
des ombres portées. Open Scene Graph supporte
aussi d'autres effets spéciaux comme les champs
de particules, les flammes, le rendu cartoon et beaucoup
d'autres [...]
Pour
la partie web utilisant JOGL seule une infime partie
du code est interprétée car JOGL est aussi
écrit pour partie en C/C++ et n'est utilisé
par Cooki3d que pour déclarer le contexte OpenGL.
Donc les performances sont comparables à un moteur
100% C++, la perte sur le port web est minime."
<
Cooki3D (mode JOGL) |
|
| |
|
| Q1 |
Pouvez-vous
nous présenter Cooki3d ainsi que vos activités
? |
| A1 |
Cooki3d
Cooki3d est un projet Open Source et multi plate-forme dédié
à la 3D (limité à Linux et Windows pour
cette première version). Cet outil est donc basé
uniquement sur des librairies multi plates-formes et Open
Source robustes (SDL, OpenSceneGraph...) ainsi que sur l'OpenGL.
La licence de diffusion choisie est la GNU/GPL pour les projets
open sources. Néanmoins une licence propriétaire/commerciale
payante est disponible pour les entreprises ou particuliers
ne désirant pas diffuser leur code source.
Une api C++ : Cooki3d est d'abord une API pour la 3D développée
en C++. Ce langage a été choisi pour son efficacité,
sa portabilité et surtout pour sa richesse en terme
de ressources existantes dans la 3D (SDL, OpenSceneGraph [1500
utilisateurs déclarés!], ...). Cet outil veut
rendre la vie facile aux programmeurs (que j'encourage au
passage à travailler sous Linux pour des raisons de
productivité, d'efficacité, de coût, d'éthique...).
Ainsi, cette première version offre aux programmeurs
enrivon 18 classes de base chargeables en XML et permettant
de gérer les modèles 3D, les événements,
les médias... Cooki3d peut être utilisé
directement comme une API ou bien le plus souvent comme un
chargeur d'application grâce à un système
de plugins c++.
Un framework dédié :
Cooki3d est ensuite facile d'utilisation. Un framework écrit
en java est directement accessible et déployé
depuis une page web (on peut également l'utiliser en
local). Il permet de créer le fichier XML décrivant
l'application. Il permet également de générer
et compiler des plugins de manière automatique. Ce
framework nécessite encore d'avoir des connaissances
de base en programmation pour cette première version
si l'on utilise les plugins. [*] Néanmoins les prochaines
versions supporteront les languages de script Lua et Tcl.
De plus des facilités graphiques seront ajoutées
pour les nombreux utilisateurs potentiels moins portés
sur la programmation.
L'utilisateur a aussi la possibilité de choisir son
GUI. Les GUI disponibles pour cette première version
sont SDL, Producer, Java et QT4 (ces GUI sont multi plates-formes
et open source). Le GUI Java offre cette possibilité
du port web, intégré à la page html,
via une applet java/jogl. [*] Un ajout de GTK sera fait dans
les versions suivantes.
Mes activités
Ma première activité est de promouvoir cet outil.
Je me consacre à : améliorer cet outil et installer
des démos sur d'autres sites web, créer plus
de documentation, plus d'exemples... Les quelques licences
propriétaires vendues seront un apport symbolique.
Lié à cette activité, je propose mes
services de consultation, mes compétences de chef de
projet et de programmeur spécialisé pour le
développement d'applications spécifiques dans
la réalité virtuelle (imagerie, jeu vidéo,
...).
J'espère à moyen terme, avoir les ressources
financières suffisantes pour à mon tour lancer
des projets de réalité virtuelle et embaucher
des équipes d'infographistes et de programmeurs. |
| |
|
| Q2 |
Cooki3d
est présenté comme un game engine. Peut-on l'utiliser
pour créer un jeu en 3D avec du son, des gestions de
collision (...) ? |
| A2 |
Effectivement,
Cooki3d offre des objets permettant la gestion d'un son wav,
mp3 de manière très simple (play, pause, stop,
setPostion...). La gestion des collisions se fait sous forme
d'obstacles statiques (différenciel de terrain) ou dynamiques
(boites emglobantes...) qui génèrent des événements
de collision. Ces objets sont déjà directement
utilisables depuis le framework. De plus Cooki3d offre également
une gestion des personnages, de leurs différents comportements,
les déplacements à la souris sur un terrain...
ainsi que beaucoup d'autres fonctionnalités. |
| |
|
| Q3 |
Le
format Open Scene Graph n'est pas particulièrement réputé
pour son niveau d'optimisation pour le web (compression). Cela
ne génère t-il pas des fichiers de grosses tailles
par rapport au VRML par exemple ? |
| A3 |
Tout
d'abord OpenSceneGraph est un des outils les plus riches en
terme de format. Il offre un accès direct à une
multitude de format : OpenFlight (.flt), TerraPage (.txp) (including
multi-threaded paging support), LightWave (.lwo), Alias Wavefront
(.obj), Carbon Graphics GEO (.geo), 3D Studio MAX (.3ds), Peformer
(.pfb), Quake Character Models (.md2). Direct X (.x), and Inventor
Ascii 2.0 (.iv)/ VRML 1.0 (.wrl), Designer Workshop (.dw) and
AC3D (.ac) et le format natif ASCII .osg. Donc OpenSceneGraph
gère en natif VRML. Effectivement le format ASCII est
loin d'être compressé et il est parfois utilisé
pour des raisons de compatibilité entre versions d'OSG
et aussi de simplicité de lecture et de modification
directement en mode texte.
En envisageant même le cas ou l'utilisateur veut utiliser
le format osg, l'application (plugin) finale Cooki3d diffusée
sur le web est compressée sous forme de zip. Et l'on
sait que le texte se compresse à des taux de compression
très fort. De plus, l'utilisateur pourra très
facilement adapter son format propriétaire au système
de format d'Open Scene Graph en écrivant un plugin adapté.
En fait la taille final du modèle dépend surtout
du nombre de facettes qu'il contient et donc de la manière
dont il a été modélisé et optimisé
par l'infographiste.
Néanmoins, par défaut, Cooki3d limite volontairement
le nombre de format pour réduire la taille des librairies
déployées sur le poste client . [*] Pour utiliser
un format autre, une librairie de format additionnelle sera
déployée séparément. |
| |
|
| Q4 |
L'utilisation
d'une applet Java pour diffuser les contenus dans la fenêtre
du navigateur, ne devrait nécessiter aucune installation
particulière. Pourquoi Cooki3d requière un fichier
d'installation ? |
| A4 |
Tout
d'abord , Java (Sun JVM) n'est pas fourni en standard avec les
navigateurs. L'utilisateur doit donc posséder une JVM
(Java Virtual Machine ou JRE Java Runtime Edition) de Sun >
1.4.2. La page d'installation de Cooki3d conseille donc l'utilisateur
pour installer une jvm s'il n'en a pas déjà une,
ou si son navigateur n'a pas réussit à le rediriger
ou installer automatiquement le plugin Java (Sun JVM)...
Ensuite une applet java n'autorise pas par défaut à
charger une librairie ou à copier un fichier sur la machine
cliente pour des raisons de sécurité. La solution
proposée est donc de rajouter une permission spécifique
pour que l'applet puisse effectuer ces opérations, l'utilisateur
doit donner son autorisation en executant l'installation (fichier
.bat sous windows, fichier .sh sous linux). Et ensuite redémarrer
son navigateur ou bien rafraîchir la politique java des
sécurités dans la console java.
[*] Néanmoins, cette solution va être simplifiée,
cette manipulation ne sera plus nécéssaire dans
les versions suivantes. Une applet signée, centralisée,
sera utilisée et l'utilisateur aura donc juste à
cliquer sur 'Oui j'accepte Cooki3d...' uniquement pour la toute
première fois qu'il se retrouvera devant une applet Cooki3d. |
| |
|
| Q5 |
L'exemple
"osgprerender" montre de larges possibilités
du moteur, supporte t-il les fragment ou vertex shaders ? |
| A5 |
L'exemple
osgDepthShadow utilise les fragment shaders pour réaliser
des ombres portées. Open Scene Graph supporte aussi d'autres
effets spéciaux comme les champs de particules, les flammes,
le rendu cartoon et beaucoup d'autres...
[*] Dans une prochaine version des objets complémenaires
seront ajoutés dans le framework et l'api pour gérer
directement des effets spéciaux sans passer par du code.
Hélas, ce genre d'exemple nécéssite généralement
que l'utilisateur ait une bonne carte graphique pour pouvoir
en profiter, pour ce cas là supportant l'OpenGL et les
shaders... |
| |
|
| Q6 |
Nous
avons constaté une grande stabilité de votre solution,
même avec plusieurs scènes 3D affichées.
Est-ce que l'on peut obtenir des performances comparables à
une solution 100% C++ avec Cooki3d ? |
| A6 |
Lors
d'une execution externe (SDL, Producer, QT4) la solution est
déjà 100% C++. Pour la partie web utilisant la
GUI java/jogl seule une infime partie du code est interprétée
car jogl est aussi écrit pour partie en C/C++ et n'est
utilisé par Cooki3d que pour déclarer le contexte
OpenGL. Ecrire une solution 100% C++ pour le web nécessiterait
d'écrire un plugin pour chaque navigateur web et donc
un gros investissement en temps et en argent, avec comme résultat
beaucoup de bugs et des améliorations peut convainquantes
au vue des efforts accomplient. Donc effectivement les performances
sont comparables, la perte sur le port web est, en tous les
cas, minime. |
| |
|
| Q7 |
Sous
quelle forme est proposée Cooki3d ? |
| A7 |
Aujoud'hui,
la partie 'runtime' de Cooki3d et ses dépendances se
déployent automatiquement sur le poste client lorsqu'il
visite pour la première fois une démo. De même,
la partie 'developement' de Cooki3d est déployée
automatiquement lorsque l'utilisateur utilise le framework Cooki3d.
Sous windows, il faut avoir installer Mingw et Msys pour compiler
des plugins.
Les sources de l'api C++ (GNU/GPL) sont disponibles sur le site
www.cooki3d.org sur simple demande d'un compte utilisateur. |
| |
|
| Q8 |
Quels
sont vos objectifs avec Cooki3d, et quelles seront ses évolutions
? |
| A8 |
Mes
objectifs avec Cooki3d sont de diffuser très largement
sur le web des applications Cooki3d et d'imposer cette solution
comme un standard reconnu, fonctionnant sur n'importe quelle
plate-forme.
Les évolutions sont annotées d'une [*] au cours
de l'interview. Les principaux axes à souligner sont
l'amélioration de la documentation, des exemples et
de l'accessibilité aux fonctions avancées pour
les utilisateurs autres que les développeurs. |
| |
|
| |
|
| |
|
| |
|
 |
|
|