WebGL, une technologie prometteuse qui doit encore faire ses preuves [WebGL, a promising technology that has yet to prove itself]

Français English
WebGL permet d’afficher des graphismes interactifs en 3D dans les navigateurs sans plug-in. En théorie, l’utilisateur n’a pas à intervenir, il doit simplement avoir un navigateur à jour, il n’a rien d’autre à installer. Vous pouvez tester les démos proposés sur le site du Khronos Group ici. WebGL allows to display interactive 3D graphics in browsers without plug-in. In theory, the user does not intervene, he must simply have an up to date browser, he has nothing else to install. You can test the demos on the website of the Khronos Group here.
Ses intentions sont louables. Du côté des développeurs, il s’agit d’écrire un programme une seule fois et de le déployer sur plusieurs systèmes d’exploitation sans avoir à faire de portage pour chacun d’eux. Du côté des utilisateurs finaux, il s’agit de rendre la 3D sur Internet plus accessible. Its intentions are laudable. As for developers, it is to write a program once and deploy to multiple operating systems without requiring to port it for each of them. As for end users, this is to make 3D more accessible on Internet.
C’est là que ça se gâte. Microsoft a décidé de ne pas supporter cette API dans Internet Explorer. Il voit cela d’un mauvais oeil, lui qui préférerait mettre en avant ses APIs propriétaires pour retenir les gens sur ses systèmes d’exploitation. Si cela se trouve, il finira par supporter WebGL quand il ne représentera plus une menace comme il l’avait fait pour SVG ou bien par fournir “une implémentation qui casse un concept fondamental de la technologie pour décrédibiliser l’ensemble” comme il l’a fait récemment avec DoNotTrack et au début des années 2000 avec Java. This is where it goes wrong. Microsoft has decided not to support this API in Internet Explorer. It looks unfavourably upon this, it would prefer putting forward its own APIs to keep people on its operating systems. If anything, it will eventually support WebGL when it no longer represents a threat as he had done to SVG or by providing « an implementation that breaks a fundamental concept of technology to discredit the whole » as it recently did with DoNotTrack and in early 2000s with Java.
Supposons que vous utilisez Mozilla Firefox comme moi. Il se peut que le pilote de votre carte graphique soit bloquée par défaut comme c’est expliqué ici.
Suppose you use Mozilla Firefox like me. The driver for your graphics card may be blocked by default as explained here.
En pratique, si vous vous trouvez dans ce cas, vous devrez alors forcer l’activation de WebGL en allant dans about:config et en mettant “webgl.force-enabled” à “true”, à vos risques et périls. In practice, if you are in this case, you will have to force the activation of WebGL by going to about:config and setting « webgl.force-enabled » to « true » at your own risk.
Je fais pas mal d’essais avec un ordinateur Dell Precision T3500 doté d’une carte graphique Nvidia Quadro 5000 (capable de traiter jusqu’à 950 millions de triangles à la seconde). Autrement dit, tout devrait bien se passer. I do a lot of testing with a computer Dell Precision T3500 with a graphics card Nvidia Quadro 5000 (capable of processing up to 950 million triangles per second). In other words, everything should go well.
J’obtiens encore un écran noir avec certaines démos, l’une d’elles affiche ce message d’erreur : I get a black screen again with some demos, one of them displays this error message:
(NS_ERROR_FAILURE): Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHTMLCanvasElement.getContext]
QueryInterface: function QueryInterface() {
[native code]
}
result: 2147500037
filename: http://www.gootechnologies.com/demo/shoes/SiteDemo/4E5167B3A7D900C5EF3545A9D6172BCF.cache.html
lineNumber: 1095
columnNumber: 0
inner: null
data: null
initialize: function initialize() {
[native code]
}
J’essaie de faire preuve de patience, je retourne dans about:config et je mets “webgl.prefer-native-gl” à “true”, toujours à mes risques et périls. Cela ne change absolument rien en terme de performances mais j’arrive enfin à lancer toutes les démos. I try to be patient, I go to about:config and I put « webgl.prefer-native-gl » to « true », still at my own risk. This changes nothing in terms of performance but I succeed in running all the demos.
C’est bien là le drame. Même la démo de la théière rame atrocement, celle nommée “Los Angeles” affiche entre 0.5 et 2 images à la seconde, les autres aussi. Celles qui s’en sortent le moins mal utilisent Goo Engine.
Therein lies the drama. Even the demo of the teapot is atrociously slow, one named « Los Angeles » displays between 0.5 and 2 frames per second, the others too. The least slow ones use Goo Engine.
J’essaie d’autres applications. Le visualiseur de modèles Sketchfab marche lentement et a du mal à répondre à mes sollicitations.
I try some other applications. The model viewer Sketchfab runs slowly and is hardly responsive.
Je donne une chance à la très belle démo de Demoscene Passivist portée par Bompo. I give a chance to Demoscene Passivist‘s very beautiful demo ported by Bompo.
Même cette démonstration du portage de Quake 2 en WebGL est légèrement saccadée sur les machines qui supportent ça bien. Even this demonstration of porting Quake 2 to WebGL is slightly jerky on machines that support it well.
Une machine capable d’afficher des centaines de millions de triangles par seconde avec un système d’exploitation, un navigateur et des pilotes à jour peine à afficher une théière et quelques maillages très simples avec WebGL. Ces démos tournent relativement bien sur certaines machines mais en faisant quelques recherches sur Internet, je réalise que je suis loin d’être le seul à me plaindre de ses performances décevantes. Cela se produit sur des configurations très variées, aussi bien sous GNU Linux que sous Mac OS X et Windows, avec des puces graphiques de tous les fondeurs (ATI, Nvidia, Intel, …). J’ai d’ailleurs testé avec 3 autres cartes graphiques (Nvidia Geforce 7600 GT, ATI Radeon 9250 Pro et ATI Radeon X1950 Pro). Pour une technologie censée faciliter la vie des utilisateurs finaux, c’est raté puisque je dois quand même changer les valeurs de deux variables dans la configuration de Mozilla Firefox, un navigateur très répandu à l’heure actuelle. Beaucoup d’utilisateurs finaux auraient simplement jeté l’éponge depuis longtemps bien que cette manipulation me paraisse relativement simple. A machine capable of displaying hundreds of millions of triangles per second with updated operating system, browser and drivers hardly displays a teapot and some very simple meshes with WebGL. These demos run relatively well on some machines but by doing some research online, I realize I am far from alone to complain of its disappointing performance. This occurs on a wide variety of configurations, under GNU Linux, Mac OS X and Windows, with all the manufacturers of graphics chips (ATI, Nvidia, Intel, …). I also tested with 3 other graphics cards (Nvidia Geforce 7600 GT, ATI Radeon 9250 Pro et ATI Radeon X1950 Pro). It’s a failure of a technology supposed to make life easier for end users because I still have to change the values ​​of two variables in the configuration of Mozilla Firefox, a currently widespread web browser. Many end users would have simply given up for a long time although this manipulation seems quite simple for me..
Pour couronner le tout, le support du mode plein écran comporte une grosse limitation (afin d’empêcher son utilisation dans des attaques de phishing), on ne peut pas utiliser toutes les touches du clavier, c’est expliqué ici. And on top of all that, the support of full screen mode has a big limitation (to prevent its use in phishing attacks), we can not use all the keys, it is explained here.
Cela montre bien l’écueil dans laquelle se trouve cette technologie qui ne peut satisfaire les impératifs de sécurité sans devoir renoncer à certaines fonctionnalités pourtant très importantes dans les jeux vidéos. This illustrates the pitfall in which is this technology that can not meet security requirements without having to give up some features yet very important in video games.
Je décide de passer de Mozilla Firefox 12 à Mozilla Firefox 14 bêta 7, c’est moins lent mais pas fluide. Je passe à Opera 12, je dois alors aller dans opera:config et mettre « Enable Hardware Acceleration » et « Enable WebGL » à 1; c’est très saccadé comme avec Mozilla Firefox 10. Enfin, je teste avec Google Chrome 19 et Chromium 18, je n’ai aucun réglage à faire, les démos sont plutôt fluides sauf celles utilisant un éclairage par pixel (même avec une simple théière) et celles utilisant des vertex buffer objects dynamiques. I decide to switch from Mozilla Firefox 12 to Mozilla Firefox 14 beta 7, it is less slow but not fluid. I switch to Opera 12, then I must go to opera:config and set « Enable Hardware Acceleration » and « Enable WebGL » to 1, it is very jerky like with Mozilla Firefox 10. Finally, I test with Google Chrome 19 and Chromium 18, I have no setting to modify, the demos are quite fluid except those using a per-pixel lighting (even with a simple teapot) and those using dynamic vertex buffer objects.
Pour résumer, WebGL permet d’afficher des graphismes interactifs en 3D dans la plupart des navigateurs avec des performances très variables selon les configurations (voire des plantages) sans plug-in ni extension avec quelques limitations pour des raisons de sécurité. Cependant, vous devrez installer IEWebGL ou Google Chrome Frame pour vous en servir avec Microsoft Internet Explorer, vous devrez éventuellement mettre “webgl.force-enabled” et “webgl.prefer-native-gl” à “true” dans about:config pour vous en servir avec Mozilla Firefox et vous devrez éventuellement mettre « Enable Hardware Acceleration » et « Enable WebGL » à 1 dans opera:config pour vous en servir dans Opera. Le développeur peut aussi utiliser un framework Javascript qui bascule automatiquement sur une autre technologie en cas d’absence de support de WebGL, notamment JebGL. To sum up, WebGL allows to display interactive 3D graphics in most web browsers with highly variable performance depending on the configuration (or crashes) without plug-in or extension with some limitations for safety reasons. However, you will have to install IEWebGL or Google Chrome Frame to use it with Microsoft Internet Explorer, you may need to set « webgl.force-enabled » and « webgl.prefer-native-gl » to « true » in about:config to use it with Mozilla Firefox and you may need to set « Enable Hardware Acceleration » and « Enable WebGL » to 1 in opera:config to use it with Opera. The developer can also use a Javascript framework that automatically switches to another technology in the absence of support WebGL, notably JebGL.
Stage 3D (anciennement appelé Molehill, présent dans la version 11 de Flash depuis octobre 2011) a les mêmes objectifs mais fonctionne nettement moins mal (sauf sur les cartes graphiques ne supportant pas les shaders).
Stage 3D (formerly called Molehill, now in version 11 of Flash since October 2011) has the same objectives but works much less badly (except on graphics cards that do not support shaders).
Je pourrais parler de Silverlight mais sa version pour GNU Linux (Moonlight) a été récemment abandonnée. Quant à Google Native Client, il n’est compatible qu’avec Google Chrome et Chromium, cela ne risque pas de changer comme la fondation Mozilla refuse d’implémenter Pepper API dans Mozilla Firefox (Google Native Client ne peut pas fonctionner sans ça), elle préfère supporter Web API. Ils utilisent la sécurité comme excuse pour contrer les technologies qu’ils n’apprécient pas alors qu’elles comportent toutes des failles. I could talk about Silverlight but its version for GNU Linux (Moonlight) has recently been abandoned. As for Google Native Client, it is only compatible with Google Chrome and Chromium, this is unlikely to change as the Mozilla Foundation refuses to implement Pepper API in Mozilla Firefox (Google Native Client cannot work without it), it prefers to support Web API. They use security as an excuse to counter the technologies they do not like whereas they all have their flaws.
Souvenez-vous de la démo appelée “Los Angeles” dont j’ai parlé au début de cet article. Vous pouvez trouver ici la même démo dans sa version basée sur Java et JOGL 2.0 (je fournirai une version alternative utilisant Java Web Start pour les utilisateurs d’OpenJDK dès que possible). Elle fonctionne nettement mieux que la version basée sur WebGL, elle ne nécessite pas le support des shaders, elle est fluide même sur des configurations assez faibles. On peut faire le même constat avec Jake 2, le portage de Quake 2 en Java qui est nettement plus fluide que son équivalent en WebGL. Remember the demo called « Los Angeles » I mentioned at the beginning of this article. You can find here the same demo in its version based on Java and JOGL 2.0 (I will provide an alternative version using Java Web Start for OpenJDK users as soon as possible). It works much better than the version based on WebGL, it does not require support for shaders, it runs smoothly even on fairly low end computers. One can make the same observation with Jake 2, the port of Quake 2 in Java which is much more fluid than its equivalent based on WebGL.
Je n’aime pas beaucoup le principe des applets car cela rajoute une source d’instabilité (le navigateur), je préfère Java Web Start qui permet de lancer une application Java depuis le navigateur mais qui s’exécute en dehors de ce dernier. La 3D sur Internet n’a pas attendu WebGL pour exister. Il est possible de faire de la 3D en Java en rendu logiciel depuis 1995 et en rendu matériellement accéléré depuis 1997 (via Java3D puis directement via des bindings Java d’OpenGL à partir de 2000). D’autres scénographes (supportant au moins un binding Java d’OpenGL, soit JOGL, soit son concurrent) permettent de faire de la 3D avec de meilleures performances que Java3D, en particulier Xith3D, JMonkeyEngine et plus récemment Ardor3D. Quelques jeux très connus reposent sur ces technologies, notamment Runescape (2001), WurmOnline (2003), Jake 2 (2004), Minecraft (2009), Salem (2011) et Wakfu (2012). I do not like the principle of applets because it adds a source of instability (the web browser), I prefer Java Web Start that launches a Java application from the web browser but that runs out of it. The 3D on Internet has not waited for WebGL to exist. It has been possible to do 3D in Java with software rendering since 1995 and with hardware accelerated rendering since 1997 (via Java3D then directly via Java bindings to OpenGL since 2000). Other scenegraphs (supporting at least one Java binding for the OpenGL API, JOGL or its competitor) can do 3D with better performance than Java3D, especially Xith3D, JMonkeyEngine and more recently Ardor3D. Some well-known games rely on these technologies, including Runescape (2001), WurmOnline (2003), Jake 2 (2004), Minecraft (2009), Salem (2011) and Wakfu (2012).
Il a fallu plus d’une décennie à l’écosystème autour de la plateforme Java pour mûrir, WebGL aura encore besoin de quelques années supplémentaires pour en arriver à peu près au même stade tout en sachant qu’il est handicapé par Javascript (dont les implémentations sont beaucoup moins optimisées que celles de Java) et l’absence de système de permissions qui le limite aux opérations pouvant être faites sans demander le consentement explicite de l’utilisateur. ASM.js et les tableaux typés accélèrent beaucoup certaines opérations comme c’est très bien expliqué dans cet article. It took more than a decade in the ecosystem around the Java platform to become mature, WebGL will still need a few more years to arrive at about the same stage while knowing that it is disadvantaged by Javascript (whose implementations are much less optimized than those of Java) and the lack of permissions system that restricts it to the operations that can be made without seeking the explicit consent of the user. ASM.js and the typed arrays accelerate a lot some operations as it is very well explained in this this article.
Finalement, avoir les bons outils aide mais ne suffit pas à faire de bons jeux. Nous sommes en 2012 et les jeux vidéo en 3D multiplateformes tournant dans le navigateur sont encore peu nombreux alors que les technologies nécessaires existent depuis très longtemps. En effet, il est possible d’en créer depuis 1995. Certains personnes sous-estiment les efforts nécessaires pour faire un jeu vidéo en 3D et WebGL n’y change rien. WebGL n’est pas VRML, vous devez être capable d’utiliser un vrai langage de programmation comme c’est une API Javascript, pas un langage à balises (comme HTML), vous devez comprendre les concepts de l’infographie et l’API OpenGL-ES même si vous décidez d’utiliser un moteur 3D existant. Le buzz autour de WebGL est donc très exagéré, il ne changera probablement pas le visage d’Internet tout comme les technologies qui font à peu près la même chose depuis des lustres. Ses avantages étant à l’heure actuelle très discutables et ses inconvénients empêchant toute utilisation en production, j’encourage vivement les développeurs à se tourner vers des solutions logicielles plus viables s’appuyant sur la plateforme Java (y compris sous iOS sans jailbreak grâce à Avian). Il nous manque encore de bons éditeurs WYSIWYG. Finally, having the right tools helps but it is not enough to make good games. We are in 2012 and 3D crossplatform video games running in the web browser are still few, while the necessary technologies have been around very long. Indeed, it has been possible to create such games since 1995. Some people underestimate the efforts required to make a 3D video game and WebGL really changes nothing about that. WebGL is not VRML, you have to be able to use a real programming language as it is a Javascript API, not a markup language (like HTML), you have to understand the concepts of computer graphics and the OpenGL-ES API even though you decide to use an existing 3D engine. Therefore, the buzz around WebGL is very exaggerated, it is unlikely to change the face of the Internet and the technologies that do almost the same thing for ages. Its advantages are now highly questionable and its disadvantages prevent any use in production, that’s why I strongly encourage developers to choose more viable software solutions based on the Java platform (under iOS too without jailbreak thanks to Avian). We still lack some good WYSIWYG editors.
Les problèmes de performances sont généralement à imputer à WebGL et non aux applications que j’ai testées. J’aurais préféré fournir des valeurs comparatives précises mais presque toutes ces applications n’affichaient pas leur frame rate. J’ai écrit cet article pour rétablir les faits après avoir lu des avis ultra-complaisants au sujet de cette technologie. Chromium n’arrive plus à lancer la moindre application WebGL depuis que j’ai installé une carte graphique ATI Radeon X1950 Pro pour de bon cette fois-ci. Performance problems are usually attributed to WebGL and not to applications I tested. I would have preferred to provide accurate comparative values ​​but almost all these applications did not display their frame rate. I wrote this article to reestablish the facts after having read ultra-indulgent reviews about this technology. Chromium can no longer launch any WebGL application since I installed an ATI Radeon X1950 Pro for real this time.
WebGL rend systématiquement la scène dans une texture en rendu hors écran avec des FBOs car c’est plus souple pour la composition dans les navigateurs (d’après Kenneth Bradley Russell qui travaille pour Google sur WebGL) mais c’est aussi beaucoup moins fiable et souvent plus lent que le rendu à l’écran sans FBO, c’est pourquoi WebGL ne peut pas être aussi fiable et rapide que d’autres API qui n’ont pas cette contrainte (dont JOGL). WebGL systematically renders the scene to a texture with off-screen rendering and with FBOs because it is more flexible for compositing in web browsers (according to Kenneth Bradley Russell who works for Google on WebGL) but it’s less reliable and often slower than on-screen rendering without FBO, that’s why WebGL cannot be as fast and as reliable as other APIs that don’t have this constraint (including JOGL).
Licence Creative Commons
Cet article est mis à disposition selon les termes de la Licence Creative Commons Attribution – Pas d'Utilisation Commerciale – Partage à l'Identique 3.0 non transposé
Creative Commons License
This article is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
Auteur : Julien Gouesse Author: Julien Gouesse

À propos de gouessej

Ingénieur en informatique, militant politique d'extrême-gauche, développeur de logiciels libres multi-plateformes. Engineer in computer science, far left-wing political activist, developer of free open source cross-platform softwares.
Ce contenu a été publié dans Jeux vidéo, avec comme mot(s)-clef(s) , , , . Vous pouvez le mettre en favoris avec ce permalien.

Une réponse à WebGL, une technologie prometteuse qui doit encore faire ses preuves [WebGL, a promising technology that has yet to prove itself]

  1. Ping : The future of browser game graphics « No Time To Play

Les commentaires sont fermés.