1/ Introduction
L'écran de l'ordinateur ne s'ouvre plus seulement sur un univers en deux dimensions. Il offre désormais un passage vers un espace en 3 dimensions à l'intérieur duquel on se promène et on échange des informations. On peut même désormais s'y rencontrer et y "vivre" grâce à l'apparation des métamondes et de leurs avatars.
Internet n'est pas en marge de cette évolution, bien au contraire. Après la structuration et l'accessibilité des informations apportées par le concept WWW, il a été nécessaire de "concrétiser" l'information. La nécessité d'outils de visualisation 3D s'est donc vite faite sentir. Il existe désormais sur le Web un langage qui permet de manipuler de manière interactive des objets et des scènes 3D, d'une puissance telle que l'on peut produire des objets complexes (tels que des fractales) et leur faire faire à peu près tout ce que l'on veut (animations complexes) :
VRML est donc un langage de description de "mondes 3D" utilisable sur le Web. Il permet une visualisation interactive de modèles 3D partagés, et est indépendant des plateformes utilisées.
2/ Historique
VRML est réellement né à Genève au printemps 1994, à l'occasion de la première conférence mondiale sur le World Wide Web. Il est le produit d'un groupe de réflexion dirigé par Berners-Lee. Le projet a vraiment été lancé quelques mois auparavent par Mark Pesce et Toni Parisi. Ceux-ci avaient en effet déjà développé un "prototype" (Labyrinth) , puis décidèrent de prendre contact avec Berners-Lee afin de valoriser leurs travaux.
Le but est de développer les spécifications de VRML, qui sera un langage indépendant des plateformes en liaison avec le World Wide Web, destiné à décrire les scènes 3D, et utilisable dans les browsers (visualiseurs), les logiciels de création et autres outils, autorisant ainsi la réalite virtuelle sur le Web.
Devant le potentiel succès de VRML, Mark Pesce se chargea d'organiser ce développement collectif, afin de concrétiser le projet dans les plus courts délais.
3/ Développement des spécifications de VRML
Une des étapes essentielles de ce projet fut de choisir un outils de développement en 3D. Plusieurs formats de fichiers utilisés en 3D ayant déjà fait leurs preuves, Mark Pesce décide de reprendre un des formats existants et de l'adapter aux besoins du Web. Plusieurs candidats se présentent :
C'est finalement OpenInventor qui sera retenu.
Open Inventor :
C'est une boite à outils orientée objet développée
par Silicon Graphics. Le format de données est binaire ou ASCII.
Il autorise une manipulation interactive des objets des classes pour l'animation
et les contraintes une interface commune à toutes les applications,
etc.
Open Inventor a servi à créer des logiciels
de CAO, de visulation scientifique, de simulation, de réalité
virtuelle, de jeux, etc.
Silicon Graphics s'implique dès lors dans le projet de proposition pour VRML 1.0 (Gavin Bell ) . La partie du format ASCII de Open Inventor est alors mise en domaine public.
VRML est donc un langage de description de scènes
3D non compilé (il est interprété
par le logiciel utilisé pour visualiser la scène) et donc
est totalement indépendant de la plateforme utilisée. Le fichier
de description d'une scène subit en premier lieu une analyse syntaxique,
puis les objets 3D sont codés puis affichés par le Browser
VRML ou par un Browser HTML équipé de Plug-In.
Premiers développements de la version 1 de VRML :
Markup est remplacé par Modeling afin de mieux mettre en valeur l'aspect graphique de VRML.
Les visualiseurs (Browsers) disponibles sont :
Template Graphics Software (Sun Solaris ZX/TZX, IBM AIX, Windows
NT Intel),
Portal, Worldview de Intervista, (Toni Parisi), EZ3D, VRweb,
etc.
Août 1995 : VRML Architecture Group
1/ Les spécifications
VRML 1.0 permet de décrire et d'organiser des objets. Ils s'agit en fait d'un ensemble d'objets (noeuds) qui permettent de construire des scènes 3D qui sont stockées dans des fichiers ascii. Comme dans OpenInventor, les noeuds sont organisés selon une arborescense (SceneGraph) qui permet d'ordonner les objets et surtout de les structurer.
On a 36 noeuds différents, regroupés en 3 types, qui structurent la scène de façon hiérarchique :
En clair,VRML 1.0 met a disposition les éléments suivants :
Pour avoir plus d'informations sur les spécifications
de VRML 1.0, allez visiter
3DSite
VRML
2/ Exemple
Voici un fichier en VRML 1.0 contenant une scène simple, composée d'un cône rouge et d'une sphère bleue, le tout illuminé par une lumière "directionnelle" :
#VRML V1.0 ascii
Separator {
DirectionalLight { # On definit un noeud Lumiere Directionnelle
direction 0 0 -1 # Lumiere emise de l'observateur vers la scene
}
PerspectiveCamera { # Definition d'un noeud Camera
position -8.6 2.1 5.6
orientation -0.1352 -0.9831 -0.1233 1.1417
focalDistance 10.84
}
Separator { # La sphere rouge
Material {
diffuseColor 1 0 0 # Pour le rouge
}
Translation { translation 3 0 1 }
Sphere { radius 2.3 } # Sphere de rayon 2.3
}
Separator { # Le cube bleu
Material {
diffuseColor 0 0 1 # Le Bleu
}
Transform {
translation -2.4 .2 1
rotation 0 1 1 .9
}
Cube {} # Un cube
}
}
Il est noter qu'un fichier écrit en VRML 1.0 doit toujours commencer par la ligne #VRML V1.0 ascii, où le caractère "#" signifie que les caractères qui suivent sur cette ligne sont des commentaires.
Un fichier VRML ne peut contenir qu'un seul noeud. Il est cependant possible de le définir comme un noeud de type groupe, qui pourra alors contenir autant de noeuds qu'on le desire. La définition explicite des attributs d'un noeud n'est pas obligatoire, puisqu'il existe des valeurs prédéfinies.
Pour encore plus d'exemples :
3/ Différences avec OpenInventor
A ce stade du développement de VRML, il y a peut de différences par rapport à OpenInventor. En effet, seuls quelques noms de groupes diffèrents, mais la structure reste identique. Il a cependant été ajouté un ensemble de noeuds pour simuler les fonctionnalités WWW, par exemple :
-WWWInline : équivalent a IMG de HTML
- WWWAnchor : c'est un noeud de type "groupe", qui permet une interaction avec la scène. C'est équivalent a HREF de HTML. Un exemple d'utilisation de ce noeud serait de l'employer pour passer d'une scène VRML àune autre (par exemple utile dans un meta-monde).
Vous pouvez aller visiter le site VRML de SGI : http://vrml.sgi.com
1/ Evolution
VRML 1.1 est abandonné en 1996.
On désire ajouter des extensions propriétaires
(Worlds, Sony, Netscape)
En Février 1996, les nouveaux objectifs sont :
Six propositions sont reçues :
2/ Les spécifications
VRML devient dynamique avec des possiblités nouvelles d'interactions. On y ajoute également une nouvelle structure hiérarchique et des nouveaux noms (texte, groupes, etc.)
Des nouveaux noeuds sont ajoutés (Grouping Nodes, Browser Information, Lights and Lighting, Sound, Shapes, Geometry, Appearance, Geometric Sensors, Special Nodes) les séparateurs ont été remplacés par des noeuds de transformation, et d'autres noeuds ont été renomés (ar exemple, AsciiText est devenu Text).
Un des grands changements par rapport a VRML 1.0 est que VRML 2.0 définit aussi un format de fichier binaire (VRML Binary). Cela permet d'avoir un fichier de description de la scène plus petit par rapport au format ascii, et le téléchargement en est forcement plus rapide, d'où un plus gand confort dans l'utilisation et l'interactivité.
Nouveaux éléments de base :
Pour les spécifications complètes de VRML 2.0, voir sur le site de SGI.
Pour des animations complexes
Pour tout faire faire à des objets
Pour créer des objets complexes (fractales)
-> par un programme un événement en entrée génère un événement en sortie Il est écrit en JavaScript, Java, TCL, etc.
Prototypes, pour définir de nouveaux types de données.
Voici un exemple simple d'une scène composee d'une sphère rouge et d'un cube bleu :
#VRML V2.0 utf8
Transform {
children [
NavigationInfo { headlight FALSE } # We'll add our own light
DirectionalLight { # First child
direction 0 0 -1 # Light illuminating the scene
}
Transform { # Second child - a red sphere
translation 3 0 1
children [
Shape {
geometry Sphere { radius 2.3 }
appearance Appearance {
material Material { diffuseColor 1 0 0 } # Red
}
}
]
}
Transform { # Third child - a blue box
translation -2.4 .2 1
rotation 0 1 1 .9
children [
Shape {
geometry Box {}
appearance Appearance {
material Material { diffuseColor 0 0 1 } # Blue
}
}
]
}
] # end of children for world
}