WebGLについて1分で話せませんでした
目次
Web Developer Conference 2024 の「1分 de Web 標準」で WebGL について1分で話そうとして話せませんでした。どういった内容を話したのか、話せなかった内容も込みで書きます。
WebGL とは
GPU による計算と CPU による制御を行い、Canvas 要素の Context に結果を出力するための仕組みです。
計算は GLSL というシェーダー言語で、制御は JS で WebGL API を介して行います。
仕様
The Khronos Group の WebGL Working Group が管理しています。Web 標準だから W3C が仕様策定しているに違いないと思っていましたが、調べたら全然違いました(The Khronos Group は W3C と協力関係にはあるようです)。
オリジナルの仕様は Mozilla が策定しており、現在の Working Group に対しても Mozilla のメンバーが関わっています。
WebGL と OpenGL
WebGL は OpenGL ES( OpenGL Embedded Systems ) に基づいています。
OpenGL ES とは、拡張し様々な環境向きに拡張された OpenGL の規格です。適合試験さえ通ればどういった実装でも OpenGL ES 準拠を謳えたため、あらゆるデバイスやプラットフォーム向けの開発 が進みました。
WebGL 1.0 は OpenGL ES 2.0 に、WebGL 2.0 は OpenGL ES 3.0 に基づいています。API が完全に OpenGL ES と同一ではない理由の1つとして、ブラウザ特有のセキュリティ対策を行うための拡張を行っていることが挙げられます。
例えば、WebGL でテクスチャを扱う際、異なるオリジンの画像の読み込みは CORS によって制限をかけるようになっています。また、初期の WebGL 1.0 では GPU の不具合を利用した Dos 攻撃が可能であったため、対策向けの API も追加されています。
なぜ WebGL が使われるようになったのか
ブラウザから OS の API をコールしないように
WebGL が登場する以前から、ブラウザでハードウェアアクセラレーションは可能でした。しかし、OS によってハードウェアアクセラレーション向けの API は異なります。
どの環境でも問題なく動作させるために、OpenGL のような統一の規格を取り入れようという動きがあり、仕様策定に至りました。
ちなみに、WebGL 2.0 から OpenGL だけでなく DirectX のサポート も行っています。
Flash の衰退
Adobe Flash Player が多くの脆弱性を抱えていながら、自動更新をなかなかサポートしなかったことや、Apple のデバイスでは Flash を一切サポートしなかったことから、徐々に衰退し 2021 年には廃止に追い込まれました。
その一方で、ECMAScript 準拠の ActionScript と同じようなインターフェースで WebGL を扱えるライブラリの台頭によって、WebGL は開発者に受け入れられていきました。
用途
Flash がカバーしていた範囲とほとんど同じです。また、ブラウザで GPU を扱えることから、機械学習に用いるケースもあります。
おわりに
WebGL を使ってなにかやってみた系の記事や資料は多いですが、こういった仕様をまとめたものはあまりなかったので、資料を作っている側としても新鮮で楽しかったです。