Game Developers Conference(GDC) 2010現地レポート

西川善司の3Dゲームファンのための「OpenGL4.0+WebGL」講座
OpenGL4.0とWebGLが発表。Windows XP環境、MacOS、LinuxでDirectX 11世代テクノロジーを使う方法
HTMLでシェーダーグラフィックスを書く方法


3月9~13日開催(現地時間)

会場:サンフランシスコMoscone Center


発表会セッションの様子

 PC向けの最も有名な3DグラフィックスAPIといえば、やはりマイクロソフトのDirect3D(DirectX)ということになるだろうが、「クロスプラットフォームの」という修飾子が付くと全く状況が変わってくる。そう、クロスプラットフォーム向け3DグラフィックスAPIとしてもっとも有名なのは「OpenGL」だ。

 北米現地時間の3月12日、様々なオープンプラットフォームを統括する業界団体KHRONOS GROUP(クロノス・グループ)は、OpenGLのメジャーバージョンアップ版である「OpenGL4.0」を発表した。




■ KHRONOSグループが統括するオープンプラットフォーム

OpenGL4.0のアナウンスを行なった、OpenGL ARB WG Chair Barthold Lichtenbelt氏。彼はNVIDIAの人間である

 まずは簡単に、KHRONOSが統括するオープンプラットフォームについて紹介しておこう。

 OpenGLは前述したように3DグラフィックスAPIであり、最新GPUデバイスをプログラミングするための基本APIを取りそろえるものであり、Windowsプラットフォームで喩えればDirect3Dに相当するものということができる。

 OpenGL/ESは、OpenGLのシェイプアップ版であり、必要最低限の3DグラフィックスAPIをまとめあげたモノとなる。主に携帯機器をはじめとした組み込み機器をターゲットにした3DグラフィックスAPIであり、OpenGL/ESのESは組み込み機器を表すEmbedded Systemの略だ。

 OpenCLは、GPUやマルチコアプロセッサを同列の演算資産と見なしてデータパラレルコンピューティングを実現するためのローレベルAPIだ。CLはComputing Languageの略で、実質的にはGPUを汎用演算目的に利用するGPGPUのオープンプラットフォームとして認識されている。OpenCLの発案者はAppleであり、KHRONOSに移管されて標準化が推し進められた。コンセプトは大部違うが、同種APIのDirectCopmute(マイクロソフト)、CUDA(NVIDIA)と比較されることが多い。


KHORNOSが統括するオープンプラットフォームAPI群

 OpenMAXはストリーミングデータや各種信号処理向けのAPIであり、OpenMAX/ILのILはIntegration Layerの略で、主に信号処理やコーデックライブラリなどで構成される。OpenMAXにはこの他、定番の算術関数などをライブラリ化したOpenMAX/DL(Development Layer)と、メディア処理プログラムやプレーヤーソフトなどをアプリケーション側からリモート制御するためのAPIとしてOpenMAX/AL(Application Layer)が存在する。

 EGLはレンダリング作業の同期調停や、レンダリング結果の結合など、さまざまなリソース管理を行なうためのライブラリになる。

 WebGLは、KHRONOSが取り扱うAPIの中では最も新しいもので、JavaScriptでOpenGL/ESを駆動することができ、実質的にWebブラウザでリアルタイム・プログラマブルシェーダー・グラフィックスを取り扱うことを可能にするものだ。

 今回、GDC会期中に新発表となったのはOpenGL4.0だが、この発表が行なわれたKHRONOSのセッションの中では、まだ誕生して間もないWebGLの紹介も行なわれた。




■ DirectX 11と同等機能をオープンに提供するOpenGL4.0

OpenGL4.0とは?

 OpenGL4.0は何が新しくなったのだろうか。

 これは、結論から言ってしまうと、WindowsプラットフォームのDirectX 11(Direct3D 11)の新機能相当をOpenGLに搭載してしまったもの……ということができる。

 もっとも目玉と言えるのが、DirectX 11に新搭載されたテッセレーションステージをOpenGLからも使えるようにしたことだ。

 「テッセレーションを使いたいのであれば、DirectX 11を使えばいいじゃないか」という声も聞こえてきそうだが、なかなかそうも言い切れない。ハードウェアとしてDirect11対応GPUは登場してしばらく立つが、DirectX 11を通してテッセレーションステージが利用できるのはDirectX 11が提供されているWindows VistaとWindows 7のユーザーだけだ。OpenGLはMacOSやLinuxでは標準3DグラフィックスAPIなので、OpenGL4.0が登場して初めて、DirectX 11世代GPUのテッセレーションステージが利用できるようになるのだ。

 また、WindowsユーザーにおいてもOpenGL4.0は存在意義がある。

 マイクロソフトはWindows XPにはDirectX 10以降を提供しないマニフェストを掲げているため、Windows XPユーザーにとっては、OpenGL4.0がDirectX 11世代GPUのテッセレーションステージを使うための唯一の手段となるのだ。これまでWindows XPベースのPCでは、DirectX 11世代プログラマブルシェーダー5.0(SM5.0)対応GPUを搭載しても、機能として利用できるのはDirectX 9世代SM3.0までであったが、OpenGL4.0を利用すればDirectX 11世代SM5.0対応GPUをフルフィーチャーで利用できるようになるのである。

 また、OpenGL4.0はWindows 7とWindows Vistaでも利用できるので、OpenGL4.0を活用すれば、Windows XP/Vista/7の3世代Windowsに渡ってDirectX 11世代SM5.0対応GPUのフル機能を活用したアプリケーションを動作させることができる。つまり、MacOSやLinuxユーザーだけでなく、WindowsユーザーからみてもOpenGL4.0の存在意義は大きいと言える。

OpenGL4.0はWindows XP/Vista/7、Linux、MacOSの全てで利用可非Windows系パソコン/ワークステーションにとって、OpenGLは大事なゲーミングプラットフォームといえる


 今回、業界関係者を沸かせたのは、KHRONOSグループの動きがとても速かったことだ。

 これまではDirectXが登場して1~2年後に、同等世代のOpenGLが登場する……という流れだったが、今回は違う。2009年10月にWindows 7が発売されて、DirectX 11の提供が始まってから、わずか5カ月程度でそれと同等のOpenGL4.0の提供となった。アプリケーション開発者としては、これはかなり喜ばしいスピード対応として迎えられるはずだ。

これまでのDirectXとOpenGLとのリリースタイミング比較。DirectX 10.0相当機能のOpenGL3.0の登場などは遅かった。それと比べれば今回の対応はかなり早い各OpenGLバージョンと、そのバージョンで新搭載された目玉機能の対応を示した図




■ OpenGL4.0でも使えるようになったテッセレーションステージ
~Windows XPでもDirectX 11世代GPUをフルスペック活用できる!

OpenGL4.0のレンダリングパイプライン

 右図はOpenGL4.0の新しいレンダリングパイプラインになる。緑の部分が新ステージだ。

 「Tessellation」はDirectX 11でお馴染みのポリゴン分割フェーズといえるテッセレーションステージだ。

 「Transform Feedback」はDirectX 10で搭載された「Stream Output」に相当する機能で、基本機能はOpenGL3にも搭載されていたが、OpenGL4.0ではさらに柔軟なストリーム操作が可能となっている。


 OpenGL4.0でもテッセレーションステージは2つのプログラマブルシェーダーと1つの固定機能シェーダによって実現される。

 また、DirectX 11と同様にテッセレーションに食わせられるプリミティブは専用のモノが必要になり、これは「パッチ」(Patch)と呼ばれる。Patchは複数の頂点群から構成されるもので、単一のポリゴンから、複数のポリゴン、あるいは複数頂点の線分など、様々な形態が想定される。

 OpenGLのポリシーとして、「たとえDirectXと同等の機能であっても同名にはしたくない」という文化的背景があることから、テッセレーションステージを構成する各シェーダー名はDirectX 11とは異なる名前となっている。

 まず、DirectX 11で「ハルシェーダー」と呼ばれたポリゴン分割を計画するプログラマブルシェーダーは「テッセレーション・コントロール・シェーダー」(Tessellation Control Shader)という名前になっている。

 この実際のポリゴン分割を実行するDirectX 11では「テッセレータ」と呼ばれていた固定機能シェーダは、OpenGL4.0では「テッセレーション・プリミティブ・ジェネレーター」というかなり仰々しい名前となった。

 分割後のポリゴンに3D的な意味づけ(変移や座標変換)を行なう、DirectX 11では「ドメインシェーダー」と呼ばれたプログラマブルシェーダーは、OpenGL4.0では「テッセレーション・エバリュエーション・シェーダー」(Tessellation Evaluation Shader)という名前になっている。もともとDirectX 11のテッセレーションはATI RADEON HD2000/3000/4000シリーズのテッセレーションアーキテクチャが原型になっており、RADEON HD2000/30000/4000シリーズにおけるテッセレーション後のポリゴン群への3D的な意味づけ処理は頂点シェーダーで行なわれたが、この特別な頂点シェーダープログラムをEvaluation Shaderと命名していた。この名前の一致は偶然ではあるまい。

OpenGL4.0のテッセレーションステージの詳細Transform FeedbackはDirectX 10でいうところのStream Output機能。各ストリームは個別のタイミング/ペースで出力できる


 この他、細かく機能を掘り下げていくと、結局DirectX 11と同じであることがわかっていくだけなのだが、発表会においてトピックとして取り上げられた「その他のOpenGL4.0の新機能」を以下に、いくつか抜粋して紹介しておく。

OpenGL4.0、その他の新機能。演算精度がIEEE754に準拠したこと、積和算実行に関してFMAがサポートされたこと、浮動小数点、整数、テクスチャ参照の方式に多様な手法がサポートされたことなどがホットトピックとして挙げられているARB_blend_func_extendedはRGBで個別のα値を設定できる拡張仕様ARB_timer_queryはGLパイプラインの負荷に依存せず正確なタイミング情報を提供する
ARB_draw_indirectは、DirectX 10にも搭載されていた機能でCPUに戻さずにGPU側だけで描画起動制御を行なうものARB_shader_subroutineはDirectX 11にも搭載された、シェーダープログラムにおいてサブルーチン実行を許容する仕組み。光源の個数や光源の違いだけで別バリエーションシェーダーになってしまう事態を防げるARB_explicit_attrib_locationは属性情報の定義の自由度を上げるもの




■ プレイステーション 3、Xbox 360相当の3DゲームをWebアプリで実現するWebGL

 OpenGL4.0についての一通りの発表が終わったあとは、WebGLに関しての基本的な説明とデモが行なわれた。

WebGLとはなにか?WebGLのアナウンスを行なったMozillaのVladimir Vukicevic氏


WebGL協賛メーカー。ここにロゴはないがアップルも協賛している

 冒頭でも触れたが、WebGLはプログラマブルシェーダーベースの3DグラフィックスをOpenGL/ESを通して実現するものであり、高度なリアルタイム3DグラフィックスをWebブラウザ上で表示できることがウリとなる。ただ静止画として表示するだけでなくJavaScriptベースでリアルタイム制御、インタラクションまでが可能であり、突き詰めて言えばWebブラウザ上で、かなり高度な3Dグラフィックスを用いた3Dゲームまでが実現できてしまうことになる。

 WebGLは、2012年より正式勧告予定のHTML5での使用を想定したものであり、JavaScriptを用いてグラフィックスを描くための新HTMLタグ<CANVAS>を介して利用されることになる。

 このWebGLプロジェクトに協賛しているKHRONOSメンバーはApple,Google、Mozilla、Operaなどで、WebGLへの対応が予定されているWebブラウザは、前出の企業順に列挙するならばSafari、Chromium、Firefox、Operaの4つ。


 これまで高度なインタラクショングラフィックスをWebページで提供するためにはAdobeのFlashやマイクロソフトのSilverLightのようなプラグインシステムが必要であったが、WebGLではプラグインが必要なく、Webブラウザの基本機能だけで多様な3Dグラフィックス表現ができるようになる。ずばり言ってしまえばFlashやSilverLightに取って代わるものを標準仕様として業界団体として規格策定したモノがWebGLというこになり、その性格上、AdobeやマイクロソフトはこのWebGLプロジェクトにはそれほど積極的でない。

 ただ、プラットフォームやOSに依存しないリアルタイム3DグラフィックスをWebページに表示させることへのニーズは高まってきており、昨今の携帯機器の3Dグラフィックス機能の強化、インターネットアクセス機能の統合などの経緯を考えると、WebGLの存在意義は今後高まっていくことが予想される。

 携帯機器向けのゲームベンダーは特に大きな関心を抱いているようで、「新しいゲームプラットフォームの誕生」という見方をしているところもあるほどだ。

Webブラウザだけで3Dグラフィックスを表示できるWebGLWebGLでゲームミドルウェアを提供することも可能だとされる


WebGLベースの3Dグラフィックスエンジン「GLGE」

 Vukicevic氏は、開発途上のWebGLで動作しているWebブラウザ上の3Dグラフィックスアプリケーションデモをいくつか紹介した。

 WebGLはOpenGL/ES2.0相当の3Dグラフィックスが出せるわけで、OpenGL/ES2.0はDirectX世代のプログラマブルシェーダーアーキテクチャでいうとDirectX9世代SM3.0に相当する。つまり、言い換えればWebブラウザ上で、PS3やXbox 360と同世代の3Dグラフィックスが出せるということになる。しかし、そこまでに高度な3Dグラフィックスをゼロから表示させることはWEBプログラマにはとうてい困難である。そこで、試験的なプロジェクトとしてWebGLベースの3Dグラフィックスエンジンの開発が各方面でスタートしている。

 その1つがPaul Brunt氏が開発中の「GLGE」だ。GLGEでは基本的なライティングの他にリアルタイム影生成に対応し、シェーダーエフェクトとしては視差マッピングにも対応している。最近では、アニメーションのインポートのためにCOLLADAへの対応がなされたとのこと。


 Ambieraも、開発中の自社WebGLベースの3Dグラフィックスエンジン「CopperLicht」を開発中で、こちらは仮想空間のワールドマップを作成するためのエディタまでが開発されている。

Ambieraの「CopperLicht」エンジンで「QUAKE3」のステージの表示を行なったデモ


「Forsaken」をWebGLベースに移植しようとしているProjectX

 クラシック3Dゲーム「Forsaken」をWebGLベースに移植しようとしている有志もおり、これは「ProjectX」として現在進行中だ。こちらはレンダリングオプションやレンダリングステータスをWeb画面上で設定したり確認したりできる本格的な開発システムを構築しており、一見すると開発フレームワークのようにも見えてしまうほど高度なモノとなっている。


 もちろん、ゲームだけでなく、ごく一般的な3Dグラフィックス表示のアプローチとしてWebGLは有用だ。

 Webページにおける、ありふれた映像としてリアルタイムシェーダー3Dグラフィックスを取り扱うためのライブラリ集としては、CATGamesの研究チームが開発した「Canvas 3d JS Library」、Fraunhofer IGDの「x3dom」などが業界の注目を集めている。

 この他、iChemLabsは化学の分子構造を立体的な3Dモデルとして構築できるソフト「ChemDoodle」を発表しているが、作成した化学3DモデルをWeb表示する際のメソッドとしてWebGLを用いる取り組みを開始したとのこと。

Fraunhofer IGDの「x3dom」
CATGamesの「Canvas 3d JS Library」iChemLabsの「ChemDoodle」


 ところで、気になるWebGLの提供時期だが、まだ具体的なスケジュールは確定していないという。

 その理由として「いくつかの解決すべき問題が残されているからだ」とVukicevic氏はいう。

 1つは、既存のOpenGL/ES2.0アプリケーション向けのプログラマブルシェーダーをどのようにしてWebGLへ持っていくかの移植性、互換性の問題だ。

 2つ目は安全性の問題。具体的には、意図的に動作しないプログラマブルシェーダーなどを走らせた場合のシステムクラッシュにどう対処するか、シェーダープログラム形態のウィルスにどう対処するか、といったことなど。

 WebGLは、まだ始まったプロジェクトだけに、「進化の伸びしろ」と「積み上げられた解決すべき問題」の双方が山とあり、今後の動向には注意を払いつつ見守っていく必要がある。

(2010年 3月 12日)

[Reported by トライゼット西川善司]