未来の標準は現在のブラウザ実装を制約するか

  • qnighy qnighy DirectXって…標準の意味わかってんのかこいつら 2009/11/19

Internet Explorer 6 以前の DirectX Filter みたいなのと誤解しているのならアレですが,(まだドラフト段階の) 標準と (現在初期実装段階にある製品の) 実装技術が切り離せるかという切り口で見ると結構奥深い話かもしれません.今後たとえば WebGL が標準として意味を持つのであれば,OpenGL をブラウザの実装技術の中核にしておいた方が都合が良いという議論はありえると思います.
WebGL の場合,それが OpenGL コマンドをそのまま流用したような命令形態であることがポイントとなります.仮にブラウザのレンダリングエンジンを Direct3D / Direct2D ベースで行っていた場合,WebGL サポートのためには 1)部分的に OpenGL を使用する 2) Direct3DWebGL の処理をエミュレートする,といった対応が必要となります.いずれの場合も,最初から OpenGL ベースでブラウザを実装するよりは複雑性が増すこととなるでしょう.

WebGLは、3Dグラフィックスを活用したWebアプリの実現を目指し制定された、OpenGL準拠のAPIセット。OpenGL関連であることからうかがえるように、各種グラフィックス技術の標準化を進める団体Khronosグループが仕様の策定を進めている。今回、Safariなど多数のWebブラウザに採用されているHTMLレンダリングエンジン「WebKit」が、WebGL実装を含む開発者向けテスト版の配布を開始したことを受け、どのように表示されるかなどエンドユーザからの目線でテストを実施した。

WebGL最大の特徴は、その3D描画をプラグインなしに実現できることだろう。これまでもWebブラウザ上に3Dグラフィックスを表示する試みは存在し、現在もGoogleが「O3D」の開発を進めるなど動きはあるが、Web標準ではない。プラグインの力を借りず、次世代のWeb標準たるHTML5でサポートされることが、WebGLが注目を集める大きな理由だ。

HTML5 の一部として WebGL がサポートされるかのように海上氏は書かれていますが,果たしてこれが本当かどうかはよく分かりません.少なくとも 『HTML 5 - W3C Working Draft 25 August 2009』にそれらしい記述はみつけられませんでした.とはいえ,今後 HTML5 の延長線上に WebGL が "標準" の地位を手に入れる可能性はあります.このシナリオは Microsoft にとってあまり好ましくないものかもしれません.そして,未来の標準「勧告」に合わせようとすると,現在の技術選定の幅が狭められかねないという構図はちとアレです.
もちろん,WebGLDirect3D/2D が絶対に共存不可能ということはなく,実際現場レベルではこんな話もあります.以下は,WebKit (WebCore) が現在実装中の CSS 3D Transforms Module Level 3 (W3C Working Draft 20 March 2009) (これもまだ Working Draft) を,Windows でどう行うかに関するものです.

現在コミットされているパッチを見る限り,WebKit は,CSS 3D Transforms に Direct3D を使う方向で動いているようです.この流れに対し Brent Fulgham 氏は将来的に WebGL 実装が必要となったときの懸念を示しましたが,Apple の Chris Marrin 氏は「Both OpenGL and Direct3D can handle multiple contexts without any trouble.」と述べ,(WebGL のために必要ならば) OpenGLDirect3D の同時に使用することも念頭に置いているようでした.とまあ外野としては「それが世界の選択か」とつぶやく前にとりあえずソースと関係者の議論を読むってのがいいのかもしれません.
ちなみに,WebKit での DirectWrite サポートも,既にトラック用のバグは登録されています.

同様に Mozilla でも DirectWrite に関する議論は開始されています.流れを見るに Mozilla の方が先に何か出てくるかもしれません.

追記

なんかこんな記事が出ていたのを発見.

追記2

Firefox の関係者この発言も興味深い.WebGL が,Direct3D のような他の Native 3D API でも実装できることを確認したいとのこと.

We still have some ways to go, as there are issues in shader security and portability, not to mention figuring out what to do on platforms where OpenGL is not available. (The latter is an interesting problem; we're trying to ensure that the API can be implementable on top of a non-GL native 3D API, such as Direct3D, so that might be one option.) But progress is being quickly made.