組み込み向け3DグラフィックスAPIの最新版「OpenGL ES 3.0」が登場 ―― デスクトップ向けグラフィックスを猛追する組み込みグラフィックス
OpenGL ES(OpenGL for Embedded Systems)は,携帯電話や携帯型ゲーム機,タブレット端末などの情報系組み込み機器を中心に普及している3Dコンピュータ・グラフィックス用APIの標準規格である.2012年8月には,最新版の「OpenGL ES 3.0」が発表された.ここでは3DグラフィックスIP(GPU)コア・ベンダの開発技術者であり,Khronos GroupによるOpenGL ESの標準化にもかかわっている著者が,OpenGL ES 3.0の概要について解説する.(Tech Village編集部)
グラフィックス技術およびインタラクション技術に関する世界最大の学会/展示会である「SIGGRAPH 2012」でKhronos Groupから組み込み向け3DグラフィックスAPI規格の最新版「OpenGL ES 3.0」が発表されました(Khronos Groupについては稿末のコラム「グラフィックスAPIを策定しているKhronos Group」を参照).すでにスマートフォンやタブレット端末など,多くの組み込み機器において業界標準の3DグラフィックスAPIとして採用されているOpenGL ESですが,2007年のバージョン2.0の発表以来,5年ぶりのメジャー・アップデートとなります(図1,図2).
OpenGL ES 2.0の発表をきっかけに,3Dグラフィックス・ハードウェア(GPU)を搭載した従来型の携帯電話(フィーチャーフォン)やスマートフォン,タブレット端末が続々と登場しました.同時にGLBenchmarkなどのベンチマーク・プログラムによる激しい機種間の性能競争,そして本格的なゲーム・アプリの移植が進み,グラフィックス機能の重要性は年々高まっています.そのような背景のもと,今回の新バージョンが満を持しての登場となりました(図3).
OpenGL ES 3.0の仕様書はすでに公開されており,Khronos GroupのWebサイトからダウンロード可能となっています.また,認証テスト(Conformance Test)の仕様は,半年後を目標にリリースされる予定とアナウンスされており,現在,OpenGL ESワーキング・グループで策定が進んでいます.
●新たに六つの機能を追加
今回発表になったOpenGL ES 3.0では,主に以下の六つの機能が追加されています.
1) GLSL ES 3.00
OpenGLでは,アセンブリ言語などを使わずに,GPUのユーザがグラフィックス・パイプライン内のシェーダ・プロセッサを直接操作できるように,GLSL(OpenGL Shading Language)という高級言語が策定されています.今回,GLSLのOpenGL ES版である「GLSL ES」がアップデートされました.このアップデートにより,GLSLとGLSL ESの間の互換性が向上しました.また,32ビット精度の整数型と浮動小数点型のサポートが追加されました.
2) トランスフォーム・フィードバック・サポート
頂点の座標変換や頂点色の計算などを行うのが頂点シェーダです.OpenGL ES 3.0では,頂点シェーダで演算した頂点データをバッファに出力する機能が追加されました.この機能を使うことで,頂点シェーダがサポートしている浮動小数点演算器を用いた行列演算機能を,グラフィックス以外の処理,つまり画像フィルタなどのGPGPU(General Purpose Computing on GPU)的な処理にも利用できます.
3) 複数描画ターゲット
描画バッファを複数定義できるようになりました.これにより,パソコン用ゲームや家庭用ゲーム機(コンソール)などで使われているディファード・シェーディングにも対応できます.ディファード・シェーディングとは,複雑な陰影処理などを行う際に処理の負荷を軽減するための描画方式です.まずG-バッファと呼ばれる,法線ベクトルや視点ベクトルなどの光源計算にかかわる情報を最初のパスで生成した後,出力バッファを用いて目に見える(visibleな)ピクセルについてのみ光源シェーディング計算を行います.これにより,むだな計算を省きます.
4) 2のべき乗でないサイズのテクスチャや3Dテクスチャ
これまでのOpenGL ESでは,テクスチャのサイズが2のべき乗に制限されていました.この制限が撤廃されるとともに,3次元配列のテクスチャの扱いが可能となりました.
5) ETC2/EACテクスチャ圧縮フォーマット
これまでのOpenGL ESでは拡張API扱いだった圧縮テクスチャ・フォーマット「ETC(Ericsson Texture Compression)」がコア仕様になりました.また,ETCテクスチャの改善版となる「ETC2」,およびα(透過)テクスチャのテクスチャ・フォーマットである「EAC」が導入されました.
6) デプス(深さ)テクスチャとシャドウ比較
シャドウ・バッファを用いたシャドウ・マッピングのためのテクスチャ・フォーマット,アドレッシング,比較機能が追加されました.
OpenGL ESのワーキング・グループは,本アップデートにより,デスクトップOpenGL 3.3/4.xレベルの機能セットを導入し,またゲームを中心としたベンダからのフィードバックによる機能設定の策定を行いました.さらに,すでに市場で多く採用されているOpenGL ES 2.0との互換性を維持するため,OpenGL ES 3.0対応ハードウェア上でOpenGL ES 2.0アプリケーションを動かせるようにしました.なお,ワーキング・グループには,GPUの会社だけではなく,SoCやOS,電子機器(セット),ミドルウェア,ツール,ゲーム・エンジンなどの関係者が参加して議論を行っています.
以下では,機能追加された部分の詳細について説明します.
●テクスチャ・サイズの制限を緩和
まず,テクスチャのいくつかの制約が緩和されています(図4).
最大テクスチャ数はこれまで8枚とされていましたが,OpenGL ES 3.0では,頂点側が最大16枚,フラグメント側が最大16枚のサポートを必須としています.また,テクスチャ・サイズの2のべき乗制限の撤廃と内部精度の向上を行っています.特に2のべき乗制限は,開発者から撤廃の要求が強かった項目です.従来,17ピクセル×17ピクセルのテクスチャを扱うため,2のべき乗サイズである32ピクセル×32ピクセルのテクスチャに変換する必要がありました.OpenGL ES 3.0からは,17ピクセル×17ピクセルのテクスチャをそのまま扱えるようになりました.
またテクスチャ・フォーマットとして,1次元ルックアップ・テーブル,およびバンプ・マップ向けに使われる「R」,「RG」といった1成分,2成分のみのフォーマットも追加されています.加えて,3次元配列フォーマットによるテクスチャや,テクスチャ・バッファ・アレイ,シャドウマップ向けのデプス・テクスチャも扱えるようになりました.