WebGL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
WebGL
作者 WebGL Working Group
初版 2011年3月3日(5年前) (2011-03-03
最新版 1.0.2 / 2013年3月1日(3年前) (2013-03-01
種別 API
公式サイト www.khronos.org/webgl/
テンプレートを表示

WebGL[1]ウェブジーエル)は、ウェブブラウザ3次元コンピュータグラフィックスを表示させるための標準仕様。OpenGL 2.0(後述のとおり事実上OpenGL 3.2)もしくはOpenGL ES 2.0をサポートするプラットフォーム上で、特別なブラウザのプラグインなしで、ハードウェアでアクセラレートされた三次元グラフィックスを表示可能にする。技術的には、JavaScriptとネイティブのOpenGL ES 2.0のバインディングである。WebGLは非営利団体のKhronos Groupで管理されている。

WebGLはHTMLcanvas要素を使う。

対応ブラウザ[編集]

対応ウェブブラウザは以下の通り[2]。主要なブラウザは最新版では全てのブラウザが対応している。ただし、ビデオカードが OpenGL 2.0 をサポートしている必要がある。また、後述のセキュリティ上の問題から GL_ARB_robustness (OpenGL 3.2) もしくは GL_EXT_robustness (OpenGL ES 2.0) の対応が必要である。そのため、例えば Intel HD Graphics では 「WindowsではOpenGL 3.1 までの対応だがMacOS XやLinuxでは OpenGL 3.3 まで対応している Sandy Bridge」 以降(Sandy BridgeではOpenGL 3.3のMacOS XがGL_ARB_robustnessに対応しそれと同様にOpenGL 3.3のLinuxがGL_ARB_robustnessに対応しOpenGL 3.1のWindowsはGL_ARB_robustnessに非対応のはず(拡張機能としてGL_ARB_robustnessをサポートしている?)[独自研究?]だが後述のANGLEを経由することなどで内部的にDirect3Dを使用してWebGLを実現する場合もある)の世代が原則として必要であり、例外として設定不要で内部的にDirect3Dを使用してWebGLを実現する場合や設定不要でソフトウェアレンダリングによるWebGLを実現する場合などを除きOpenGL 2.x 世代やOpenGL 3.0やOpenGL 3.1はウェブブラウザ側で強制的に利用する設定(Mesa Off-screen rendering extension(例libosmesa6)の使用なども含む)をしないと WebGL を利用できない場合がある。しかし、前述の例外としての設定不要なソフトウェアレンダリングとは別の方法として、ユーザーによる利用の設定が必要になってしまうが前述のMesa Off-screen rendering extension(例libosmesa6)などの使用などによりソフトウェアレンダリングによるWebGLの実行も実現可能である。また、たとえばIntel 945GMチップセットとMesa 11.2.0 ドライバとの組み合わせではOpenGL3.2をサポートしないがOpenGL2.1をサポートし、かつ、拡張機能としてGL_ARB_robustnessをサポートするためLinux版Firefoxで描画速度こそ遅いもののハードウェアアクセラレーションが有効なWebGLを実行可能である。どのようなOS・ブラウザでWebGLを実行するにしても各ブラウザごとに別に定められたGPUブロックリスト(各ブラウザごとにOS別・ビデオチップ別・ビデオドライバのバージョン別・各ブラウザのバージョン別のGPUブロックリスト情報がある)は確認しておくべきである。GPUブロックリストに載っている環境ではユーザーによる自己責任においてWebGLを強制的に有効にする設定をしなければWebGLは動作しない。GPUブロックリストに載っている環境でWebGLを強制的に有効にする設定はセキュリティ上の危険を伴う場合があるのでGPUブロックリストに載っている環境ではユーザーによる自己責任においてWebGLを強制的に有効にする設定を行う。

  • PC
  • モバイル
    • Android ブラウザ - Android 5.0 以降。サムソンやHTCなどの一部の端末では 4.x から対応している。またAndroid 4.x の環境で「メニューボタン」の「設定」から「Labs」から「WebGL」のチェックボックスを「オン」にすることでWebGLを有効化できる場合があるがLabsであり実験機能である。
    • BlackBerry 10
    • Edge
    • Firefox for Mobile (Maemoは1.0から, Androidは4から)
    • Google Chrome for Android 25 (25は要設定、30から標準で有効。しかしスマートフォンやタブレットなどの端末の製造メーカー・端末の機種・端末の種類・GPUの製造メーカー・GPUの機種・GPUの種類・ビデオドライバの開発メーカー・ビデオドライバの種類・ビデオドライバのバージョンなどの原因によりGPUがGoogle Chrome for AndroidのGPUブラックリストに含まれているためWebGLが動作しない場合がある。この場合はユーザーの自己責任となるがGoogle Chrome for Androidの検索・URLアドレスバーから「chrome://flags」と入力してアクセスして「試験運用機能」の「警告」をよく読みユーザーの自己責任を理解と同意をした上で「ソフトウェア レンダリング リストをオーバーライド」を「有効にする」さらに「WebGL を無効にする」を「無効にする」そして「今すぐ再起動」することでコンテキスト「webgl」または「experimental-webgl」でWebGLを動作させることが一応は可能となるがユーザーの自己責任となるのでこの設定ページの「試験運用機能」の「すべてデフォルトに戻す」も活用するべきでありこの設定ページの「試験運用機能」の機能のいずれかの有効化やその他の設定変更ないしその他の「試験運用機能」の使用はセキュリティやプライバシーやデータの削除やデータの消失も含めユーザーの自己責任である)
    • Internet Explorer Mobile 11
    • Opera Mobile 12 (Android のみ)
    • Safari 8 - iOS 8 以降。5〜7 は iAd の広告のみ対応。
    • Tizen 1.0

また、関連して、WebGL が使えるブラウザでは JavaScript で型付き配列が使える[4]。なお、Internet Explorer 10, Android ブラウザ, Google Chrome for Android, iOS 5 は WebGL に対応・有効にしていないが、型付き配列が使える。

なおWindows版のChromeおよびFirefoxはハードウェアベンダーが提供しているWindows用のOpenGLドライバーを用いるのではなく、ANGLE[5]を経由することで、内部的にDirect3Dを使ってWebGLを実現している[6]

歴史[編集]

WebGLはMozillaのCanvas 3Dの実験から始まった。Mozillaは2006年に最初のCanvas 3Dのプロトタイプのデモンストレーションをした。2007年末に、Mozilla[7]とOpera[8]がそれぞれ別々の独自の実装をした。2009年初頭に、MozillaとKhronosがWebGLワーキンググループを始めた。WebGLワーキンググループはApple, Google, Mozilla, Operaを含んでいる。

セキュリティの懸念[編集]

2011年5月9日、WebGLに深刻なセキュリティホールが指摘された[9]。問題点は以下の2点。現在は解決済み。

  • サービス拒否(DoS)攻撃 - WebGLではプログラマブルシェーダーが使えるが、ビデオカード自体にバグなどがあると、OS全体を落としたり、無限ループなどでOSを停止させることが出来るビデオカードがある。
  • クロスドメイン画像盗取 - Cross-Origin Resource Sharing に未対応で、他のドメインで使われている画像を取得できた

規格そのものに脆弱性が存在するため、米国のセキュリティ機関US-CERTはブラウザでWebGLを無効にするよう勧告していた[10]

Firefox 4 と Chrome 12 は標準状態でWebGLが有効になっており、セキュリティ問題を防ぐには手動でWebGLを無効にする必要があった。その後、Chrome 13 ではクロスドメイン問題が修正され、Firefox 5 ではクロスドメインは無効になったが、Firefox 8 から Cross-Origin Resource Sharing が利用可能になった。

DoS攻撃の方は、GL_ARB_robustness[11](OpenGL 3.2) または GL_EXT_robustness[12](OpenGL ES 2.0) を利用できるウェブブラウザに制限することで解決した[13][14]

なお、Adobe Flash 11.0 のプログラマブルシェーダーはforループなどが使えないので、DoS攻撃の問題が発生しない。

ライブラリ[編集]

C3DLやWebGLUなど、WebGLを使ったライブラリが開発されている。

関連項目[編集]

参照[編集]

外部リンク[編集]