西川善司の3Dゲームファンのためのグラフィックス講座【GDC特別編】
NGPに採用されたGPUの開発元に聞くPowerVR SGX543MP4+の全て
NGPよりも世代の新しいGPUを早くも発表!?
2月28日~3月4日開催(現地時間) 会場:サンフランシスコ Moscone Center |
iPhoneのようなスマートフォンや、iPadのようなタブレット端末に採用され、先頃はソニー・コンピュータエンタテインメントのNGP(Next Generation Portable)にも採用されたGPUといえばPowerVRシリーズだ。意外に知らない人も多いのだがインテルのATOMベースのGMA500/GMA600はPowerVRベースだ。つまり、スマートフォンやタブレットだけでなく、VAIO PやVAIO XのようなWindowsベースのネットブックPCにもPowerVRは採用されているわけで、現在、意外にPowerVR採用ハードウェアを手にしている人は多いのだ。
古参のゲームファンにとっては「PowerVR=ドリームキャストのGPU」という認識の人も少なくないと思うが、昨今では「消費電力対パフォーマンス」重視のハードウェアではすっかりメインストリームのGPUなのである。
今年のGDCの展示会場でも、PowerVR開発元のImagination Technologiesがブースを出展しており、技術面に非常に詳しいPowerVR Graphics,Business DevelopmentのKristof Beets氏とDirector of PRのDavid Harold氏へのインタビューを行なう機会を得たので、そのレポートをお届けする。
Imagination Technologiesブース |
■ 「TILE BASED DEFERRED RENDERING」とはなにか?
PowerVR SGX5シリーズのブロックダイアグラム |
NGPに採用されたPowerVR SGX543MP4+に限らず、PowerVR系GPUで共通して利用されているテクノロジーが「TILE BASED DEFERRED RENDERING(TBDR)」だ。
詳細は「西川善司の3Dゲームファンのための次世代PSP-GPU講座」の方を参照して欲しいが、一般的なGPUと違ってZバッファ(深度バッファ)を用いずにレンダリングする点を特徴としている。
一般的な3Dグラフィックスレンダリングでは、3Dオブジェクトを2D空間(画面座標系)に射影し、その2D形状となったものを描画することになるが、その際、既に描画済みの画面に対して重ね描きをすることになる。2D形状に落とし込んでも、描きたいのは3D世界なので、2D形状に落ち込んだ三角形(ポリゴン)の前後判定をする必要がある。この判定に用いられるのがピクセル単位の奥行き値を格納したZバッファの内容になる。
PowerVRシリーズによるレンダリング例 |
つまり、一般的な3Dグラフィックスレンダリングでは描画する3Dオブジェクトが増えてくると重ね描きの機会が多くなり、Zバッファへのアクセスが増加する。たとえ、前後判定の結果で、描画が破棄されることになってもZバッファのアクセスは起こるのでメモリ帯域を消費する。メモリ帯域を消費することは消費電力の増加に繋がる。
そこでTBDRでは、描画対象となる画面を適当なブロックにわけて(TILE BASED)、各ブロックごとにこの前後関係の判定を先に行なってしまう。その後、最終的なライティングやシェーディングを後回しで行なう(DEFERRED RENDERING)のだが、この処理は前段のブロックごとに並列処理としてGPUコア内で処理される。
NGPに採用されたSGX543の例で言えば、各コアには4基のシェーダーユニットが実装されており、これが4コアあるので、各タイルのレンダリングは4ユニット×4コア=16基のシェーダーユニットで並列処理されることになる。
前出の過去の連載記事では各ブロックは16×16ピクセルと記したが、これについてBeets氏はこう述べている。
「近年のPowerVR系コアでは32×32ピクセルをデフォルトのブロックサイズとしている。一応、組み合わされるビデオメモリ容量などやレンダリング解像度に応じてブロックサイズは変更可能ではあるが、基本は32×32ピクセルだと理解してもらっていい」(Beets氏)
■ PowerVRアーキテクチャにまつわる疑問
Kristof Beets氏(PowerVR Graphics,Business Development) |
NGPで採用されたSGX543は、“MP4”仕様であり4コアだが、最大ではMP16の16コアまでのコンフィギュレーションが可能となっている。各コアの動作制御はどのようになっているのだろうか。
例えば、いくつかのコアを頂点処理に割り当てて、いくつかのコアをピクセル処理に割り当てるといったことや、NVIDIAのSLIのようにレンダリングするフレームをコアごとに割り付けるようなことは可能なのだろうか。
「マルチコア仕様となった場合には、完全に1つの統合されたハードウェアのように動作される。つまり、各シェーダーユニットは、種類の異なるタスク(例えば、頂点処理のタスクとピクセル処理のタスクの組み合わせなど)を同時に受け持つ場合がある。各タスクでメモリアクセスストールが発生したら、これを隠蔽するためにタスク切り替えが起こる。各シェーダユニットをフル活用するためにも、負荷バランス調整は自動的かつ総括的に行なう必要があるので、各コアを用途別に振り分けるのはできないし、やるべきではない」(Beets氏)
SGX5シリーズはGPGPUにも対応する。例えばメディア処理や物理シミュレーション処理のような処理のように、明らかに種類の異なるGPGPUタスクが混在した場合はどうか。
「同じ事だ。シェーダユニットをフル活用するためには多くの種類のタスクを実行させた方がいい。実際のところ、PowerVRのタスクスケジューラはコンフィギュラブルなので技術的にはできなくはない。ただし、1つのコアに1種類の処理を専任させるとメモリアクセスなどが特定の場所に集中する傾向がある。異なる種類のタスクを織り交ぜてタスクスイッチングをさせた方がメモリアクセスのインターリーブ効果も生まれて効率がいいのだ」(Beets氏)
なお、マルチコアのコンフィギュレーションでは、ブロック図にはない上階層のスケジューラーが実装されることとなり、ここで各コアに向けての自動的なタスク振り分けが行なわれるという。
NVIDIAのSLIやAMDのCrossFireのような単体動作するGPUのPCI-Expressバスにぶら下がったマルチ駆動とは違い、PowerVR系のマルチコアの場合は1チップ内でのマルチ駆動となるので、はじめからマルチ駆動を前提とした論理設計となるのだ。いうなれば、“在り方”としては、マルチコアGPUというよりはシングル(1)コアGPUに近いといえる。
例えば、軽いタスクを実行しているときは1コア、3Dグラフィックスレンダリングを行なっているときは4コア……というようにコアの有効化と無効化をコア単位に制御することは可能なのだろうか?
「技術的には可能だし、SoCとしてPowerVRを組み込んだ際に、そういう制御を入れることも可能だろう。ただし、もともとPowerVRアーキテクチャは省電力性能に優れたアーキテクチャになっている。例えば1コアに丁度いい負荷のタスクがあったとして、4コア中の1コアだけでやらせてあとの3コアをオフにしておくのと、4コア全体であっという間にそれを終わらせて4コアをすぐに眠らせてしまうのとでは、消費電力に大きな違いはない」(Beets氏)
■ NGPに採用されたPowerVR SGX543MP4+における“+”の意味とは?
David Harold氏(Director of PR) |
NGPのGPUがらみでよく上がる話題に「SGX543MP4+の“+”ってどういう意味?」というものがある。
David Harold氏はこの疑問に対して、こう答えている。
「ソニー・コンピュータエンタテインメントは我々からPowerVR SGX543MP4のIPを購入したわけで、実際のチップ、SoCを構成するのは彼ら自身だ。彼らが我々のIPをどう改良するかは我々の知るところではない。ソニーはこれまでゲーム業界に長くいたわけだし、グラフィックスプロセッサに関するノウハウもかなり持っているのでゲーム向けの独自改良を行なうということなのだろう」(Harold氏)
ちなみに、筆者の取材によれば、この“+”の部分に、それほど大きな意味合いはないという手応えだ。恐らく、具体的には、OpenGL ES 2.0仕様にはない独自の機能が提供されていたり、フォーマットなどがサポートされていたりする程度だと思われる。
例えば、HDRレンダリングにおいては最新のPC向けGPUでは、各チャネル16ビット浮動小数点(FP16)の64ビットバッファが標準的に使われるが、バス幅64ビットのSGX543系ではこれは実用に適しない。そこで、NGP向けのSGX543MP4“+”には、32ビットでそれなりの高いダイナミックレンジを発揮する9995バッファなるものがサポートされているらしい。各RGBが9ビット、5ビットには各RGBに対する共通指数項が格納され、このフォーマットをテクスチャだけでなく、レンダーターゲットとして利用できるようだ。
■ TILE BASED DEFERRED RENDERINGにまつわる疑問
TBDRにまつわる疑問で非常に多いのが半透明オブジェクトのレンダリングにまつわるもので、その中でも筆頭に挙がるのが「TBDRでは半透明(および透明オブジェクト)オブジェクトのレンダリングが遅くなるのはどうしてか」という点だ。
「これは受け取り方の問題だと思っている(笑)。TBDRでは不透明なオブジェクト(ピクセル)については、どんなにオブジェクト同士が重なってもTBDRの恩恵で各ピクセルは1回しか描画されないため、ピクセル陰影処理(ピクセルシェーディング)は1度だけで済む。つまりパフォーマンスは高速で安定する。一方で、複数の半透明オブジェクトが絡んだ描画では、TBDRでは、そこに絡む全てのピクセル陰影処理が積み上げられて、シェーダーユニット側としてはそれらを1つずつ処理をしていかなければならなくなる。つまり、TBDRの恩恵が得られないということだ」(Beets氏)
PowerVRのデモ映像より |
つまり、「TBDRでは不透明オブジェクト描画においてはハイパフォーマンス過ぎる」のだが、「不透明オブジェクトはTBDRの恩恵が得られない」ので、その落差があり、これが「遅くなる」という印象を与えてしまっている……と言いたいようだ。
昨年の「西川善司の3Dゲームファンのための次世代PSP-GPU講座」の終わりの方で「(3) 描画順序を気にせずとも正しい半透明描画が行なわれる」と言う記述に対して、「違うのではないか?」という質問が寄せられたので、これについての質問も投げかけてみた。
「半透明オブジェクトが絡んでもTBDRはきちんと行なわれ、“描画は一般的なレンダリングパイプラインと同様に”行なえるというだけだ。半透明オブジェクトの場合は、奥行きの前後に関わらず排除できないし、見えると言うことなのだから、物理的に正しい半透明描画を行ないたいのであれば後ろから前へあらかじめソーティングをしておかなければならない」(Beets氏)
実際問題として、半透明オブジェクトが絡んだシーンではどのような描画が適しているのだろうか。
「TBDRでは、半透明オブジェクトの描画は不透明オブジェクトの描画と同時に行なうよりも、明示的に分けて行なった方が効率がよい。具体的には先に不透明オブジェクトをレンダリングしてその後に半透明オブジェクトのレンダリングを行ない、あとで両者を合成するような手法だ。半透明オブジェクトの描画では後ろ向きポリゴンのカリングは必要ないし、奥行き情報の前後関係に基づくカリングも意味をなさないし不要だからだ」(Beets氏)
もうひとつ多い質問が、「Zバッファを用いないTBDRで、シーンの深度情報をサンプルして行なうSSAO(Screen Space Ambient Occlusion)のようなポストエフェクトが行なえるのか」というものだ。
「レンダリングオプションで深度値を出力するように設定すれば、Zバッファを得られるので問題はない。アルゴリズムによっては、例えばだが、MMRT(マルチ・レンダー・ターゲット)を用いて特定のバッファに対してリニアな深度値を得るというソリューションもあるだろう」(Beets氏)
■ NGPのSGX543MP4+よりも世代の新しいPowerVR 6シリーズを発表したImagination Technologies
NGPに採用されたPowerVR SGX543MP4+は、ハイエンドのPower VR SGX5XTシリーズに分類されるのだが、実は、早くも、このハイエンドシリーズに後継が登場することが明らかとなった。
PS3にNVIDIAのGeForce 7800 GTX相当のコアが採用されることが発表された後に、NVIDIA自身がプログラマブルシェーダー世代を1世代新しくしたGeForce 8800 GTX相当が発表されたことを思い出させるが、進化の早い半導体ビジネスでは避けられない事態でもある。
この新PowerVRはコードネームが「Rogue」といい、PowerVR 6シリーズになることがアナウンスされた。
このPowerVR 6シリーズはどういったものになるのだろうか。
ブース内には多種多様なPowerVR採用製品が展示されていた |
「実は詳しいことは広報戦略上、しばらくの間、隠すことにした(笑)。我々の顧客の1つであるST ERICSSONがアナウンスしたことが現状で話せる全てだと思って欲しい。進化が著しいこの分野において、競合他社を刺激することはできるだけ避けたい(笑)。ただ、既に何社ものメーカーが6シリーズに対して契約を結んでくれたし、問い合わせも多いのは事実だ」(Harold氏)
ST ERICSSONのニュースリリースはこちらで読むことができる。
これによれば先代PowerVR 5シリーズに対して20倍のレンダリングパフォーマンスを発揮することができ、そのレンダリング性能は3億5,000万ポリゴン、130億ピクセル毎秒のフィルレートがあるという。
NGPに採用されたSGX543MP4(+)は毎秒1億3,300万ポリゴン、毎秒40億ピクセルということを考えるとかなりの性能の高さがうかがえる。
また、PowerVR 6シリーズの演算性能は210GFLOPSであることも明言されている。210GFLOPSというと、モバイルPC向けのGPUならばGeForce GT 430やRADEON 6450などと同程度の性能ということになる。
これはなかなか侮れないパフォーマンスだ。
「RogueはOpenGL ES 2.0の次世代版、コードネーム「Halti」をサポートすることは確実だ。それとDirectX 11のサポートも行なう。これ以上の詳しいことは言えない」(Harold氏)
DirectX11のサポート……これは、つまり、Rogueでは、テッセレーションステージの搭載を示唆していることになる。
万が一、NGPがPowerVR 6シリーズを採用していたとしたら、DirectX 9世代のシェーダーアーキテクチャを採用するPS3よりも先進的なグラフィックスアーキテクチャを採用することになったはずだが、それは叶わなかった。
なお、この“出し惜しみ”されているPowerVR 6シリーズだが、実際には2011年内の提供が予定されている。PowerVRを有するImagination Technologiesの躍進は、2011年もとどまることを知らない。
□Game Developers Conference(GDC)のホームページ(英語)
http://www.gdconf.com/
(2011年 3月 4日)