ニュース
[SIGGRAPH]Khronos,OpenGL 4.1を発表。カンファレンスからその詳細を確認する
本格活用が始まっているOpenGL 4.0
これまで,DirectXの進化に比べてやや遅れる傾向にあったOpenGLだったが,今世代はフットワークが軽く,MicrosoftがDirectX 11の提供を始めてからわずか半年で追いついた格好だ。
Barthold Lichtenbelt氏。氏は普段NVIDIAに勤務する人物だが,発表会では彼がメインでOpenGL 4.1の解説を行った |
Heaven BenchmarkがOpenGL 4.0をサポート |
氏が最も強調したのは,DirectX 11に対応したグラフィックスパイプラインのベンチマークテストとして知られるUnigine製の「Heaven Benchmark」がOpenGL 4.0に対応したという点。最新バージョンではレンダリングAPIに「OpenGL」が選択可能で,「Tessellation」オプションを有効化して実行できるようになっている。
こうした高度なアプリケーションでOpenGL 4.0への対応が行われたことで,今後も広くOpenGL 4.0の活用が進むことをKhronos Groupは期待している,とはLichtenbelt氏の弁。DirectX 11が提供されているWindows 7&Vistaのユーザーはそれほど高い関心を持っていないかもしれないが,Windows XPやMacOS,Linuxのユーザーにとっては,最新世代のGPUを活用したアプリケーションが増えることはプラットフォームの活性につながるわけで,非常に喜ばしい,というわけだ。
OpenGL 4.1とは何か?
OpenGL 4.1がLichtenbelt氏の口からアナウンスされたのは,以上の説明に続いてだった。
OpenGLユーザーや非Windows系業界関連者で埋め尽くされていた会場は,この宣言で拍手と歓喜の悲鳴に包まれる。このあたりのノリは,非Windows系のユーザーが多いカンファレンスでしばしば見られる光景だ。
さて,バージョン番号からも推測できると思うが,OpenGL 4.1は,OpenGL 4.0のマイナーチェンジ版にあたる。「基本的なレンダリングパイプラインに大きな変更はなく,細かい部分での機能改善が行われる」というイメージだ。
機能強化点のうち,興味深い点をいくつかピックアップして紹介しよう。
●Get Program Binary
OpenGLで,シェーダはランタイム時にその都度コンパイルすることをよしとしていた。だが,「アプリケーション起動時に無駄な処理が多くなる」という指摘を受けて,オフラインでコンパイルしたシェーダープログラムのバイナリを読み込めるようになった。
●Separate Shader Objects
OpenGL 4.xのシェーダは,
- 頂点シェーダ
- テッセレーション制御シェーダ(ハルシェーダ)
- テッセレーション評価シェーダ(ドメインシェーダ)
- ジオメトリシェーダ
- フラグメントシェーダ(ピクセルシェーダ)
の5つがあるが,各シェーダステージのシェーダプログラムを「部品」としてバラバラに管理し,「任意のシェーダステージのプログラム部品」を実行したいシェーディングに合わせて構成できるようになった。
※上で示したシェーダ名称のうち,( )内はDirectXにおける呼称。OpenGLではDirectXとはシェーダー名を意図的に変えて呼ぶ慣例がある。以下同。余談ながら続けると,DirectXでいうところのジオメトリシェーダを,OpenGLでは一時期「プリミティブシェーダ」と呼んでいたのだが,最終的には同じ名前になっている。
●ES2 Compatibility
ある意味,OpenGL 4.1で最も大きな強化点といえるのが,この「OpenGL ES 2.0との互換性確保」という強化点だ。
OpenGL ES 2.0は,組み込み機器や携帯機器に向けたOpenGL 2.0のサブセットとして登場したもの。最近のスマートフォンブームなどにも後押しされ,OpenGL ES 2.0の活用はハードウェア,ソフトウェアとも盛んだ。そこで,OpenGL ES 2.0ベースのアプリケーションをPCやワークステーション上のOpenGLで動作させられるようにと,半ば“出戻り”のような感じで,OpenGL 4.1にOpenGL ES 2.0の仕様が取り込まれたのである。
OpenGL ES 2.0用のアプリケーションをOpenGL 4.1のエミュレーション環境で開発するのにも役に立ちそうだ。
●Shader Precision
プラットフォームとしての信頼性を向上させる目的で,一部超越関数の演算誤差などを厳密に規定化した。
●Vertex Attribute 64bit
OpenGL 4.0で規定化された64bit浮動小数点の取り扱いだが,これを頂点データとして取り扱えるようになった。
●Viewport Array
あるサーフェスのレンダリングを複数のビューポートに描けるようになった。これにより,ジオメトリシェーダがプリミティブを複数のビューポートにリダイレクトできるようになる。
キューブマップのシングルパスレンダリングに役立てられるかもしれない。
●Robustness
強健性の強化。不当なリソースへのアクセスや,GPUのリセットが行われた場合の対処が可能になった。
●Debug output
実行中のプログラムで何が起きているのかをレポートする,デバッグ向けのコールバック機能が追加された。
●Shader Stencil Export
フラグメントシェーダからステンシルバッファへの読み書きが可能になった。これまでROP(Rendering Output Pipeline)フェーズでしか利用できなかったステンシルバッファを,フラグメントシェーダから利用できるようになったので,よりCPU的な論理処理を実装する目的で活用が進むと思われる。
●CL event
グラフィックスパイプラインの初期化などをせずとも,OpenGLとOpenCLとでバッファの共有を透過的に行えるようになった。合わせてOpenGLのイベントとOpenCLのイベントとの間で同期を取るメカニズムも搭載されている。例えば「OpenCLイベントが終了したとき,OpenGLイベントがこれを受け,実行を開始する」といったことが可能になる。
DirectXでも,3Dグラフィックス用途のDirect3DとGPGPU用途のDirectCopmuteとの内部コラボレーションを可能にするメカニズムが搭載されているが,CL eventは,まさにこうしたDirectXの仕組みに対抗するものといっていいかもしれない。
OpenGL 4.1はDirectX 11のスーパーセットである
複数の企業で構成される業界団体によって規格化が進められてきたOpenGLは,オープンスタンダードであるがゆえにフットワークが重く,常に「DirectXに追いつけ」という位置づけだった。
しかし今回は違う。Khronos Groupは「DirectXを抜いた」と自負しているようだ。実際,Lichtenbelt氏も「OpenGL 4.1はDirectX 11のスーパーセットだ」と,その先進性をアピールしている。
- 関連タイトル:
OpenGL
- この記事のURL: