WebGL est une implémentation d'OpenGL ES 2.0 utilisant JavaScript et Canvas. Les navigateurs peuvent ainsi afficher des contenus en 3D en profitant directement des mécanismes d'accélération matérielle des cartes vidéos. WebGL est une spécification en cours de création au sein du groupe Khronos.

Le groupe Khronos est un consortium réunissant de nombreuses entreprises dans le but de créer des standards ouverts dans le domaine du graphisme et du multimédia. Ces standards sont conçus en commun par les membres du groupe qui peuvent les implémenter sans devoir payer de licence. Le groupe compte aujourd'hui plus d'une centaine de membres, fabriquant de composants, de terminaux ou de logiciels. Il gère de nombreux standards comme OpenGL, OpenCL, et le récent WebGL.

OpenGL est une spécification définissant une API pour dessiner en 2D et 3D. C'est probablement la spécification la plus utilisée dans ce domaine. Elle est concurrencée par DirectX, technologie propriétaire développée par Microsoft. Le projet MESA fournit une implémentation libre d'OpenGL, qui peut fonctionner même si aucune accélération matérielle n'est disponible.

OpenGL ES est une déclinaison simplifiée d'OpenGL pour les systèmes embarqués (ES = embedded systems) comme les téléphones portables.

WebGL a été lancé en Mars 2009 par le groupe Khronos à l'initiative de Mozilla, afin de définir un standard pour utiliser de la 3D dans un navigateur. Cette initiative est probablement destinée à contrer le risque de voir chaque éditeur développer sa propre norme (par exemple Google propose O3D, Adobe a développé de nombreuses fonctions facilitant l'usage de la 3D dans Flash 10, etc). Un deuxième communiqué en Août précisait la direction prise : exposer les fonctions de l'API OpenGL ES 2.0 à JavaScript et utiliser la balise Canvas pour l'affichage. Une première version de la spécification devrait être disponible début 2010. Les membres du groupe de travail ont commencé à implémenter les brouillons afin d'aider à la finalisation. WebGL fonctionnera sur toutes les plate-forme disposant de pilotes supportant OpenGL et OpenGL ES. L'utilisation native de l'accélération matérielle des cartes graphiques combinée aux rapides progrès des performances des moteurs JavaScript devrait permettre d'obtenir dans les navigateurs un affichage proche des applications clientes classiques.

Canvas est une balise standardisée dans HTML 5. C'est une zone rectangulaire dans laquelle on peut dessiner au moyen de fonctions JavaScript. La balise a été initialement créée par Apple, mais est aujourd'hui disponible dans la plupart des navigateurs, soit nativement, soit en utilisant des bibliothèques qui l'émulent pour les navigateurs archaïques comme ceux de Microsoft[1]. J'avoue regretter que Canvas soit en train de prendre le pas sur SVG pour dessiner à l'intérieur du navigateur. Certes SVG est une norme particulièrement complexe, mais elle me paraissait plus prometteuse que Canvas (SVG est un dialecte XML, donc on peut facilement le parcourir, lui appliquer des modifications, etc. Pour ce qui est de Canvas, il est difficile de savoir ce qui est dessiné à l'intérieur).

Les utilisateurs de compilations nocturnes de Webkit pourront trouver quelques exemples d'utilisation de WebGL ici. Vous pouvez essayer de les faire fonctionner dans Firefox en remplaçant dans le code canvas.getContext("webkit-3d") par canvas.getContext("moz-webgl"). Pour connaître les fonctions disponibles, le mieux pour l'instant est de consulter la documentation ultime, le code source. La spécification étant encore à l'état de brouillon, des divergences entre les différentes implémentations existent qui devraient être corriger dans les prochains mois. Pour suivre l'avancée du chantier dans Firefox, je vous conseille les blogs de Vladimir Vukićević, qui expérimente depuis plusieurs années l'utilisation de 3D avec Canvas, et de Mark Steele qui travaille sur WebGL.

Les domaines d'application sont très nombreux : les jeux en ligne et les univers virtuels, bien sûr (on pourra bientôt avoir des "Second Life" qui s'exécuteront directement dans le navigateur, sans nécessiter l'installation de logiciels spécifiques), mais aussi sans doute les applications de réalité augmentée (car WebGL va apporter la 3D dans les terminaux mobiles).

Au final, voilà une belle avancée a qui un arrière goût de sur-place. Sur-place parce que je faisais déjà tourner des cubes en 3D sur mon premier micro-ordinateur il y a plus de 25 ans, et en 1996 BeOS projetait déjà des films sur des théière en 3D. WebGL n'est donc qu'une n+1ième implémentation de technologies depuis longtemps éprouvées. La réelle avancée est que cela se passe à présent à l'intérieur du navigateur, qui gagne de plus en plus ses galons de système d'exploitation à part entière. Et le tout en JavaScript, donc facilement bidouillable.

Ajout du 22 : Vlad vient de mettre en ligne une première démonstration.

Notes

[1] on pourra trouver un état complet de l'implémentation de Canvas sur ce site