西川善司の3Dゲームファンのための「2009&2010」グラフィックス講座
2009年を振り返り、2010年のグラフィックストレンドを予想する







【著者近影】
 2009年9月から東京工芸大学で特別講師として、「CGプログラム論」という授業を受け持つようになった。きっかけは今年9月にインプレスジャパンより出版された「ゲーム制作者になるための3Dグラフィックス技術」。これを教科書に使って授業をしてもらえないか、と依頼を受けたのだ。毎回、出席票変わりに提出してもらっている生徒さん達からの質問が鋭い。今や最初に作るのが3Dゲームという彼らの頭の中には3Dを意識できる下地ができあがっているようだ。日本のゲーム開発の未来に期待大。2010年は次世代機の話題がポツポツと出てくるかも。皆さんよいお年を。個人ブログはこちら

 2009年は、「次世代機」ともてはやされたPS3、Xbox 360といった据え置き機が「現行機」としての認知が進み、成熟を迎えた年と言える。ハードウェアのポテンシャルを十二分に活かした3Dゲームグラフィックスが数多く登場して我々の目を楽しませてくれた。

 「なんでもできそう」という夢溢れる期待感は消え去ったが、「こうすればいい」という現実的なソリューションが明確に見え始めた。2009年は、3Dゲームグラフィックスにとってそんな年だったのではないかと思う。

 2009年最後となる本連載では、そうした今年の3Dゲームグラフィックスの技術動向を振り返り、2010年の姿までを占ってみることにしたい。


■ グローバルイルミネーション技術の台頭~2010年はさらに進化形GIが登場!?

1997年にリリースされた「MAX PAYNE」(Remedy Entertainment)より。動的キャラクタへのライティングは直接光のみだが、静的な背景には事前計算したGIをテクスチャにライトマップとして出力していた
「ソニックワールドアドベンチャー」でGIテクスチャのみを表示したショット。よく見るとポツポツという斑点のようなものが見えるが、これがGIテクスチャの計算単位に相当する

 今年の3Dゲームグラフィックスの傾向を挙げるとすれば、1つ、グローバルイルミネーション(GI:Global Illumination)技術に目が向けられた年だったと言える。

 グローバルイルミネーション(以下、GI)とは、日本語訳では「大局照明」となり、簡単に言えば「ライティングを簡略化しないで現実世界に即したちゃんとものにしよう」というアプローチだ。

 現在の標準的な3Dゲームグラフィックスのレンダリングパイプラインでは、ある3Dオブジェクトのライティングは、静的ないしは動的に設置された光源からの直接光のみでライティングされてレンダリングされる。しかし、現実世界では光は空気中で散乱して広がるし、直接光の当たったオブジェクト自身がその光を反射させて他者を照らす新たな二次光源となったりする。現実世界では、こうした複雑な反射と拡散が同時多発的に巻き起こっている。

 これをコンピューターグラフィックスでまともにやろうとするのが「ラジオシティ」(Radiosity)や「レイトレーシング」(Ray Tracing)などの考え方だ。ラジオシティやレイトレーシングを今世代機のリアルタイム3Dゲームグラフィックスにまじめに実装するにはGPUの性能がまだ足りない。従って、これらを擬似的に実現する方法を考案し、さらにリアルタイムに実装することまでを考えなければならない。

 もっともシンプルなソリューションが、それこそ20世紀時代からあった静的な環境光(Ambient Light)を与える手法と、ライトマップと呼ばれるテクスチャを適用する手法だ。静的な環境光は、ライティング結果に一定量の光量を上乗せするだけのものでGIとしてはまったく正しくない。「この部屋は白い蛍光灯の部屋だからライティング結果に、一様に白を足しましょう」というような考えだ。

 ライトマップの手法はもうちょっと手が込んでいて、そのシーンの静的な光源に対しての相互反射などをまじめにオフラインで事前計算してその結果をテクスチャに出力してしまうというもの。動的キャラクタには普通の直接光ライティングしかなされないのでやや浮いた感じになるが、静止画のビジュアルとしてはそれなりに説得力の高いものになる。

 こうしたシンプルソリューションから一歩踏み出した、動的なGI表現に取り組みだしたタイトルが2009年は目に見えて増加したのだ。「誰が1番乗り」というような厳密な登場順序までわからないが、日本国内では、その象徴的なタイトルとなったのがセガの「ソニックワールドアドベンチャー」だった。

 「ソニックワールドアドベンチャー」では、静的オブジェクトのGIを、事前にオフラインで計算して、その計算結果をテクスチャへ書き出す(焼き込む)という前出のライトマップ的手法に加え(チーム内ではGIテクスチャと命名)、空間に見えない観測点を設置し、そこに間接光や環境光がどういうふうにやってくるのかを事前計算する手法を採用していた。

 「ソニックワールドアドベンチャー」の実装では各環境光の観測点において放射状に8方向の光を発する仕様としていた。感覚的にいうとそのステージ空間に対し、適当な間隔で8方向に発光する光源を配置したイメージとなる。この手法を開発チームでは「ライトフィールド」と呼んでいた。なお、ランタイム時には、事前計算で得ている各観測点における環境光で動的キャラクターをライティングする。


ライトフィールドなしライトフィールドのみを適用した結果上2つを合成した完成画面

ライトフィールドの概念図と実機でのライトフィールドを可視化したショット

「バイオハザード5」で設定されたキューブマップの一例

 「バイオハザード5」(カプコン)も、GIに配慮した仕組みが導入されていたタイトルの1つだ。プレーヤーが確実に立ち寄り、しかも印象的なビジュアルをプレーヤーに見せたい箇所に、アーティストが環境光をキューブマップ構造で手動設定していた。設定の際には、ステージ中の要所要所に影響範囲を設定し、その影響範囲を支配する環境光が設定される。そして、この影響範囲に入った3Dオブジェクトに対して全方位6方向からの環境光を与える。環境光キューブ自体は、そのシーンに与えられた全ての静的な光源を設定して相互反射にまで配慮した大局照明計算を行なって事前生成している。

 なお、環境光を与えるキューブマップは無数になるので、これを実態のキューブマップのままオンメモリ管理するのは現実的でない。そこで「バイオハザード5」では、キューブマップ環境光を9個の(係数を与えた)球面調和関数(SH)で近似表現して実装していた。実際のリアルタイムライティング時では、キューブマップ状態には戻さず、SHのまま直接ライティングを行なう手法「SHライティング」を採用している。なお、「バイオハザード」では、原理的にはスタンフォード大学のRavi Ramamoorthi准教授らの「An Efficient Representation for Irradiance Environment Maps」の手法が採用されている。


キューブマップの影響範囲を可視化した画面完成画面
球面調和関数による環境光なし球面調和関数による環境光あり

Ravi Ramamoorthi准教授らの『An Efficient Representation for Irradiance Environment Maps』のスライドより抜粋

 Guerrilla Gamesの「KILLZONE 2」でも9個のSH係数を用いたSHライティングを疑似GI手法として採用していた。この作品のGIの考え方は基本的な考え方は「ソニックワールドアドベンチャー」の手法とよく似ている。

 シーンの各地点において全方位から光がどう入ってくるかを採取するLight Probeを設置し、そのシーンに配置された静的な光源について、複雑な相互反射にまで考慮した大局照明計算をオフラインで時間を掛けて計算する。実際のリアルタイムレンダリング時には、近接している4つのLight Probeを読みだして球面調和関数からそのLight Probeの全方位光量をデコードし、これを元に8×8テクセルの球面状テクスチャ(球面座標系の全方位テクスチャ)を作成している。「KILLZONE 2」はPS3専用ソフトである点を活かし、この処理をGPUとは並列にSPUで行なっている。

「KILLZONE 2」より。Light Probeを可視化した画面「アンチャーテッド」シリーズのGIも「KILLZONE 2」と同じ方式

 EPIC GAMESのゲームエンジン、ミドルウェア「Unreal Engine3(UE3)」でも、事前計算Light Probeベースの疑似GI手法が追加された。この技術をEPIC GAMESでは「Lightmass」と命名している。

 UE3における動的キャラクターへの一体感のある疑似GIライティング手法は、「ソニックワールドアドベンチャー」、「バイオハザード5」、「KILLZONE 2」などと基本的な考え方は同じで、GIテクスチャの事前計算時に、設置しておいた各Light Probeにおける全方位からの入射光情報を取得する方法を採用している。なお、UE3におけるLightProbeの設置はセミ・オートメーション仕様となっており、主要キャラクターが移動可能な範囲、あるいはプレーヤーが到達できる範囲において間隔を狭くLight Probeを設置し、そうでないところは広く設置するというアルゴリズムが採用されている。なお、実際のライティング時には対象キャラクタの周囲3つのLight Probeをサンプリングして環境光のライティングを行なう実装となっているとのこと。

LightmassによるGIテクスチャによる疑似GI表現の一例事前計算前において、ポリゴン上に適用したテクスチャの任意の発光材質情報を取得して、それらをちゃんと光源として処理してGI計算する

Ravi Ramamoorthi准教授らの『An Efficient Representation for Irradiance Environment Maps』のスライドより抜粋新版UE3における動的キャラクタへのGIライティング

 このような、事前計算したデータを元にしたリアルタイム疑似GI手法の導入は、今後もさらに加速化することだろう。

 ただ、これは完璧なものではなく、重大な制約がまだ1つ残っている。それは事前計算する疑似GIの元となる光源が全て静的な光源に限定されているという点。光源が動いたり、あるいは点いたり消えたりするような光源に対してのGIについては事前計算のしようがないので、これについては今後の課題として残されたままなのだ。

 この課題への解答の模索は既に始まっており、「イメージ・スペース・フォトン・マッピング」(Image Space Photon Mapping)や「スクリーン・スペース・グローバルイルミネーション」(SSGI:Screen Space Global Illumination)などの本格実用化が予見されている。ちなみに、SSGIについてはカプコンのMTフレームワーク2.0が実装を完了したことを表明しているため、「ロストプラネット2」への実装が期待されるところだ。

SSGIを適用しない通常のゲーム画面(「ロストプラネット2」)SSGIを適用した結果。壁が二次光源となりハシゴを間接照明していることがわかるだろうか



■ プレイステーション 3でもてはやされるDeferred Shading

「KILLZONE 2」のDeferred Shadingの4MRTの内訳。Deferred Shadingにおける、この複数の中間値格納バッファのことは「G-Buffer」と呼称される
「バイオニックコマンドー」(カプコン、2009)もDeferred Shadingを採用した作品だった

 2009年はDeferred Shading(Deferred Rendering、Deferred Lightingとも言う)の採用が目立った年でもあった。これはどういったものなのか。これは本連載「KILLZONE 2」編に詳しいが、ここで改めて解説しておこう。

 現行の3Dグラフィックスレンダリングパイプラインでは、「頂点単位の陰影処理」→「ピクセル単位の陰影処理」という流れでレンダリングが行なわれる。このアプローチを説明の都合上、仮に「前方(順方向)レンダリング(Forward Rendering)」と呼ぶと、この前方レンダリングにおいて、レンダリング対象とするキャラクタやオブジェクトごとにシェーダーを切り換える描画エンジンでは、ピクセルシェーダーを動かして得た結果が深度テストで描き出されずに捨てられてしまうことも多い。これは無駄な演算ということになる。また、マルチパスレンダリングでは何度も同じジオメトリで構成されたシーンをレンダリングするようなケースも出てくる。これもまたジオメトリ処理の無意味な重複となる。

 つまり、前方レンダリングでは、画面に表示するフレーム内の総ピクセル数よりも多くGPUを動かした上に、その結果を捨てたり、あるいは反復的に同じ計算を無駄に行なってしまうようなことがしばしばあるのだ。

 また、ひとつのシーンのレンダリングに高度なピクセルシェーダープログラムを複数動作させる場合、それぞれのピクセルシェーダープログラムが同じ計算中間値を使用することがしばしばある。それが複雑な計算やテクスチャ参照を伴うものだった場合、その中間値を求めるだけでGPUに負荷がかかってしまう。

 そこで、複雑な陰影処理を行なうシェーダーが多用される3Dグラフィックスのレンダリングにおいて効果的な手法の研究が重ねられた結果、その実践的な一手法として台頭してきたのが「Deferred Shading」(ディファードシェーディング:遅延シェーディング)になる。

 Deferred Shadingを採用したゲームタイトルとしては「KILLZONE 2」(SCEE、2009)、「バイオニックコマンドー」(カプコン、2009)、「S.T.A.L.K.E.R. ClearSky」(GSC Game World、2008)などがあり、ちょっと前の作品としては「Tabula Rasa」(NC soft、2007)もDeferred Shadingベースだった。直近では特に「KILLZONE 2」が、そのトータルビジュアルの美しさが高く評価されたことから、Deferred Shadingベースの3Dゲームグラフィックスの株を上げることに貢献した。

 このDeferred Shadingの仕組みだが、基本的な流れとして、まず、シーン内のポリゴンベース(ジオメトリベース)のレンダリングを、ピクセルシェーダーは動かさずに先に行なってしまい、複数のピクセルシェーダプログラムで必要となるような計算中間値を複数のバッファに先に同時出力してしまうことから始める。その際に有効となるのがDirectX 9以降で高効率的に活用できるようになったMRT(Multi-Render-Target)だ。1度のレンダリングパスで複数バッファに異なる値を同時出力する機能であるMRTは、DirectX 9では4枚、DirectX 10では8枚の同時出力が可能となっている。

 このMRTを使って複数のバッファ(テクスチャ)に対して出力する内容は、描画エンジンごとに異なるが、深度(Z)値、ポリゴンを構成するピクセル単位の法線ベクトル情報、スペキュラー値、アルベド(テクスチャを適用した結果)などがある。MRTを使えば、これらのデータを1度に複数のバッファに書き込むことができる。そして、最終的なピクセル単位のライティングは、その先出ししたその中間値を使って画面座標系でポストプロセス的に行なう。

 「Deferred(遅らせた)Shading」という名前は「ピクセル単位の陰影処理をあとから行なう」という原理からきているのだ。なお、この発想の起源は意外に古く、もともとの考案者であるMichael Deering氏は、このアルゴリズムを20年以上前の「SIGGRAPH 1988」にて発表している。

深度値(Depth)カメラ座標系の法線ベクトル情報(NORMAL X,Y)
鏡面反射強度(Spec-Intensity)ハイライト強度(Spec-Power)
動きベクトル(Motion Vectors XY)テクスチャカラー(Diffuse Albedo)
Deferred Shading完了後ポストプロセス適用後の完成画面

 原理だけに着目するとDeferred Shadingは、なんとも回りくどいレンダリング技法に思えるが、動的キャラクタ数やシーン複雑性に左右されない、動的光源にスケーラブルなライティングが行なえることが最大の利点となる。

 一方、前方レンダリングでは、動的光源の数が変わっただけでシェーダー内で参照する変数仕様が変わってしまうため、同じ傾向のライティングをするシェーダーでも、別のシェーダーに切り換えなければならない。Deferred Shadingでは、この煩わしい制約に影響されないという美点も兼ね備える。

 ただ、このDeferred Shadingにも弱点がないわけでもない。まず、Xbox 360と相性が悪い。Xbox 360はGPUには帯域不足をカバーする目的で10MBのEDRAMが搭載されているが、解像度の高いフレーム、あるいはMRTでEDRAM容量の10MBを超える大量出力を伴うレンダリタングを行なう場合には、1回のレンダリングが10MBのEDRAMに収まらないため、分割レンダリングする必要が出てきてしまうのだ。

 もうひとつの弱点は半透明オブジェクトを効率よく処理する術がないという点。Deferred Shadingでは、半透明オブジェクトについては通常の前方レンダリングで描くというのが最もシンプルな解決方法となるが、これでは半透明描画が多いシーンでDeferred Shadingのメリットを活かせなくなる。その意味で、Deferred ShadingはPS3、あるいはPC向けのレンダリング・メソッドといえるかもしれない。

最新のゲームエンジンではCRYTEKの「CRY ENGINE3.0」(2009)がDeferred Shadingへの対応を発表している。CRY ENGINE3.0はPS3、Xbox360、PCの3プラットフォームに対応したCRYTEKの次世代ゲームエンジンだ



■ Windows7の登場、DirectX 11時代の幕開け

DirectX 11のレンダリングパイプライン
テッセレーションステージの詳細。テッセレーションステージは「ハルシェーダ」(Hull Shader)、「テッセレータ」(Tessellator)、「ドメインシェーダ」(Domain Shader)の3つのシェーダー・ステージから成る
「Alien vs Predator」より。テッセレーションステージは、視点からの距離に応じて微細凹凸表現の詳細度を動的に変化させるLODシステムの一環として活用できる

 2009年10月22日、マイクロソフトの新OS「Windows 7」が発売され、これと時を同じくしてDirectX 11の提供が開始された。なお、DirectX 11はWindows Vistaにも提供されるが、Windows XPについては未サポートとなる。Windows Vistaの発売から約2年半でのWindows7の登場。思えば、Windows Vistaと共に始まったDirectX 10.x時代は短かった。

 DirectX 11は、DirectX 9対応GPU、DirectX 10対応GPU、DirectX 10.x対応GPUのすべてに対応する。ただ、使用できるAPIやハードウェアクセラレーションされる機能は、各GPU世代のベース仕様に依存する。つまり、DirectX 11のフル仕様を実践できるのはDirectX 11対応GPUのみだが、すべての仕様/機能ではないもののDirectX 9/10.x対応GPUでもDirectX 11は利用できる。要するに下位互換性が保証されるいうことだ。DirectX 10がDirectX 9対応GPUの下位互換性を切ったのとはちょっと様相が違うのが面白い。

 DirectX 11では、プログラマブルシェーダーはShader Model5.0(SM5.0)へとバージョンアップし、新たに4つのシェーダーステージが追加される。そのうち3つがプログラマブルシェーダーで、1つが固定機能シェーダーとなる。新しいプログラマブルシェーダーは「ハル・シェーダー」(Hull Shader)と「ドメイン・シェーダー」(Domain Shader)、「演算シェーダー」(Compute Shader)で、固定機能シェーダーは「テッセレータ」(Tessellator)だ。

 これら新シェーダーステージのうち、ハル・シェーダー、テッセレータ、ドメイン・シェーダーの3つはテッセレーションを司る新たなシェーダー・ステージとなる。DirectX 11/SM5.0世代になって新たに追加されたテッセレーションのシェーダーステージ。なぜ、このようなステージが新設されたのか?

 現在のリアルタイム3Dグラフィックスは高解像度での表示が当たり前となり、これに伴って多ポリゴンでオブジェクトが表現されることがもはや要求仕様となってきている。DirectX 10世代以前は、アーティストが3Dモデルをデザインするときは多ポリゴンで構築し、これをゲームエンジン(ランタイム)で利用するために、いくつかのレベルでポリゴン量を削減させた低ポリゴンモデルも同時に用意する。視点から近い大写しとなる状況用には多ポリゴンモデルを利用し、視点から遠くなるにつれて少ないポリゴン数の低ポリゴンモデルに順次切り替えていくのが、近代ゲームエンジンの典型であり、この仕組みを特にLOD(Level of Detail)システムと呼ぶ。

 あえて言いきってしまうと、DirectX 11のテッセレーションステージは、これまでゲームエンジン側でソフトウェア的に自前で実装していたLODシステムをDirectX 11の標準レンダリングパイプラインで面倒を見ていこうというものだ。

 DirectX 11世代ではゲームエンジン側では一貫して低ポリゴンな基本形状モデルでアニメーション制御を行なえばよく、これまでのように、視点からの距離によってLODレベルごとの3Dモデルを切り換えてからアニメーションを適用しなくてよくなるのだ。

 そしてその3Dモデルに適用する微細な凹凸表現やディテール形状は、あらかじめ用意しておいた凹凸量を数値化したテクスチャ(ディスプレースメントマップ、あるいは変移マップと呼ばれる)を元にして、低ポリゴンの基本形状モデルに対して凹凸を適用する(≒変形させる)流れになる。このような、3Dモデルを凹凸の変位量(Displacement:ディスプレースメント)で変形させる処理系を「ディスプレースメントマッピング」(Displacement Mapping:変位マッピング)という。

 DirectX 11では、このLODやディスプレースメントマッピングを実現するために新しい「テッセレーション・ステージ」が新設されることとなったのだ。このテッセレーション・ステージの実行部隊のうち、ハルシェーダとドメインシェーダの2つがプログラマブルシェーダであり、テッセレータが固定機能ユニット(固定機能シェーダ)となる。それぞれの役割をイメージとして図化したのが右図になる。

 いずれにせよ、DirectX 11におけるテッセレーションの標準サポートは、これまで亜流や独自実装ばかりだった「サブディビジョン・サーフェース」、「テッセレーション」の仕組みをマイクロソフトがイニシアチブを取ってその実現パイプラインの標準化を行なったという点で、非常に大きな意味を持つ。

 Direct3D 11はまだリリースされたばかりなので、実際の3Dゲームでの採用例は少ないが、まったくないわけでもない。Direct3D 11の目玉機能ともいえる前出のテッセレーションステージを活用したタイトルとしては「Alien vs Predator」(2010年発売予定、発売SEGA、開発REBELLION)、「COLIN MCRAE DiRT2」(発売中、Codemasters)、「Battle Forge」(発売中、発売Electronic Arts、開発EA Phenomic)などがある。

 こうしたタイトルでは、ランタイム上の3Dモデルを適当な少ない数の頂点数のローポリゴンで構築しておき、これに対してアニメーションやモーションの適用、あるいは物理シミュレーションの適用を行ない、最終的なレンダリング段階で、視点からの距離に応じたディテール表現の追加処理としてテッセレーションステージを利用している。今後も、テッセレーションステージは、このような「GPU側にLOD(Level of Detail)を面倒見てもらう」的な使い方からゲームエンジンへの実装が進むことだろう。

 ただし、2009年11月現在入手可能なDirect3D 11世代のGPUはAMDのRADEON HD5x00シリーズのみ。競合のNVIDIAはDirect3D 11世代のGPUコア「Fermi」を予告したのみで、今回もGPU2大メーカーの足並みは揃わなかった。今後のDirectX 11世代GPUの普及そして3Dゲーム、3DアプリケーションのDirectX 11対応にどのような影響を及ぼすのか、注目していく必要がある。

「Alien vs Predator」より。左がテッセレーション前、右がテッセレーション後の多ポリゴンモデル

「COLIN MCRAE DiRT2」より。ポリゴン数の少ない3Dモデルに対して物理シミュレーションを適用し、その表示の際にはテッセレーションを適用して多ポリゴン化して表示する。これにより物理シミュレーション負荷を抑えつつ、高品位な表示を両立できる

「COLIN MCRAE DiRT2」より。DirectX 11世代のGPUでは、車両が立てた波をテクスチャ上でシミュレーションし、これをテッセレーションステージを活用して頂点レベルの波へと変位させているDirectX 10.x世代以前のGPUだと法線マップベースのさざ波が立つのみ


■ GPGPUの本格活用が始まる。ゲームへの本格採用は2010年以降か

「Red Faction: Guerrilla」より。ノンリニア破壊をゲーム性に効果的に盛り込んだ意欲作。ただし、今作では物理シミュレーションはCPUベース

 GPGPUとはGeneral Purpose GPUの略で、GPU(Graphics Processing Unit)を3Dグラフィックス生成処理以外の汎用目的(General Purpose)に活用する発想のことだ。

 GPUはいうまでもなく3Dグラフィックスを処理するためのプロセッサのこと。GPUは1990年代までは、内蔵された3Dグラフィックスロジックを活用して3Dグラフィックスを(CPUでやるよりも)高速に描画する専用ハードウェア、いわば「アクセラレータ」的存在だったが、2001年、マイクロソフトのWindows環境下のマルチメディアコンポーネントAPI「DirectX 8」で「プログラマブルシェーダ」の概念がGPUに導入されてから大きな転機を迎える。

 もともと3Dグラフィックス処理は、実行される計算内容だけに着目すればベクトル計算や行列計算がメインだ。ただし、これが同時多発的に大量に発生する。この仕事を高速にこなすためには大量のベクトル演算器が必要になる。GPUは、その高速化のために、ベクトル演算器の数を爆発的に増やしていった。

 この結果、GPUはCPUには数基しか実装されないベクトル演算器を数十基、ハイエンドに至っては数百基を実装するようになり、また、シェーダプログラムに使える命令群の汎用性も高まってCPU並に高度なソフトウェアロジックも実装できるようになってしまった。最新のGPUはトランジスタ数は十数億。もはや単一プロセッサとしては、CPUを遙かに超え、世界最大規模のものとなった。

 技術競争、性能競争の末とはいえ、GPUは短期間に、コンピューティングシステムとしてみても、とてつもなくリッチなものとなってしまったのである。そんなGPUを「パソコン向けの3Dシューティングゲームの画を描くためだけに活用するのはもったいない」という発想が生まれるのもいわば自然な流れだ。これがGPGPUが台頭してきた歴史的背景と言うことになる。

 2009年は、このGPGPUプラットフォームが出揃った年であった。もともとGPGPUは、この分野の研究者達の手によってゲリラ的、草の根的に発生したものであったため、様々な多様なアプローチが生まれてしまう。そこで求められたのが業界標準的なGPGPUプラットフォームの確立だ。

 ここに早くから力を入れてきたのがGPGPUを新しいGPU市場として開拓していきたいNVIDIAであった。2006年よりNVIDIAは、自社GPUのGeForce、あるいはGPGPUベースのHPCシステム「TESLA」向けの自社GPGPUプラットフォーム「CUDA」(Compute Unified Device Architecture)をリリースしている。

 マイクロソフトは、このGPGPUのムーブメントに対し、前述したDirectX 11にDirectComputeを新設。このDirectComputeを実行するのがDirectX演算シェーダ(DirectX Compute Shader)となる。DirectComputeは、NVIDIA CUDAのようなGPGPU専用のコンポーネントではなく、DirectXに統合されているので、Direct3D管理下のすべてのリソースが透過的にアクセスできる。ある意味、3Dグラフィックスとの親和性が高いと言うことができる。

 この他、「OpenGL」を統括するKhronosグループは、2008年、オープンなGPGPUプラットフォームとして「OpenCL」(Open Computing Language)を発表し、2009年後期には、ついにAMDやNVIDIAといった主要GPUメーカーから対応ドライバがリリースされるに至っている。OpenCLは、GPUだけではなくマルチコアCPUやプログラマブルDSPにも対応するため、プログラムの実行のさせ方も特徴的で、「どのOpenCLプログラムをどのプロセッサで実行させるか」を割り当てられるようになっている。また、OpenCLも、3DグラフィックスAPIのOpenGLと協調動作できる仕組みも与えられる。

 さて、ここで気になってくるのは「GPGPUでなにができるのか」という部分だろう。元々、注目されていたのは、HPC(High Performance Computing)への応用だ。いわゆるスーパーコンピュータのダウンサイジング手段としてGPGPUが着目されたのだ。 浮動小数点演算能力だけで比較すると、CPUだと、例えばクワッドコアCPUが16基(=64コア)のHPCシステムでやっと数百ギガFLOPS程度だが、GPUだと1基でテラFLOPSに達することができる。

 これまでHPCといえば数百万円~1千万円級の価格帯の製品群が主流だったが、GPGPUでHPCシステムを実現すると100万円以下でテラFLOPSのシステムが実現できるわけで、これはいわばスーパーコンピュータの価格破壊に相当する。天候シミュレーション、薬学シミュレーション、地質学シミュレーションなどの科学技術計算が、いわば卓上サイズのHPCシステムで実現できるのは確かに革命的だ。

 このことからHPCは今、GPGPUのもっとも重きを置かれた応用先であり、GPU専門メーカーであるNVIDIAは、2006年以降、GPGPUブランド「TESLA」を展開するなど、特にこの種の製品投入に積極的だ。これは、近い将来に確実に来ると言われている「CPU・GPU統合時代」において、CPUメーカーでないNVIDIAが生き残りをかけ、自社GPU技術の新しい応用先を先行開拓しているのだとも言われている。

 話が少々脱線したが、もちろん、ゲームを構成する様々な要素のGPGPU実装化も各方面で実用化が進められている。代表的な活用例としては物理シミュレーション、群集AI、アニメーション生成などが挙げられる。特に、本連載で何回か取り扱ったことのある「ノンリニア破壊」などは今後GPGPU向けの格好なテーマとなることだろう。



■ 2010年以降の3Dゲームグラフィックスはハイブリッドレンダリングになっていく?

 本連載は3Dゲームグラフィックスに傾倒したコンセプトを掲げているので、DirectX 11のDirectComputeを3Dグラフィックスに活用する未来像をいくつか紹介するとしよう。

 「ミラーズエッジ」、「バトルフィールド」シリーズを手がけるEA DICEはDirectComputeを使ったDeferred ShadingをSIGGRAPH 2009にて提案している。ジオメトリ処理や中間値バッファを生成するところまでは通常の「KILLZONE 2」で紹介した通常のDeferred Shadingと同じ手法だが、実際にライティングを行なうフェーズでは、レンダリングターゲットフレームをタイル状に分割し、各タイル単位のCopmuteShaderスレッドを走らせてDeferred Shading特有のフェーズである「光源のレンダリング」を行なう。通常のピクセルシェーダーとの違いは、取り扱える光源数に制限がないという点と、光源リストをCopmuteShader特有の共有メモリ(ローカルデータストア)に明示的に読み込んでおくことで効率の良いキャッシングができ、パフォーマンス的に優位になることなどが、アドバンテージとして挙げられる。

 一部で次世代PSP「PSP2」に搭載されると噂されているGPU「POWERVR SGX543」は、標準レンダリングメソッドとしてTile Based Deferred Renderingを採用しているが、考え方はこの手法とよく似ている。

DirectCopmuteベースのDeferred Shadingは、DICEのゲームエンジンFrostbite2に実装が予定されている。つまりFrostbite2はDirectX 11世代のゲームエンジンとなる

 この他、前出の「COLIN MCRAE DiRT2」でも、DirectX 11世代GPUを搭載した場合に限り、DirectComputeを活用した専用の3Dグラフィックス処理が盛り込まれる。なにがCopmuteShaderベースで描画されるかというと、本連載では何度か取り上げてきたAmbient Occlusionだ。

 Ambient Occlusionとは、各ピクセルがその周囲のピクセルにどれだけ遮蔽されているかを、レンダリング後の深度バッファ(Zバッファ)の情報を調査しつつ陰影を付けていく画面座標系のポストプロセスの一種。

 この表現は、あるピクセルに着目したときに、周りピクセルが遮蔽していればいるほど、着目しているピクセルに黒みを付けていく処理で実現される。完全に疑似的ではあるが、あたかもグローバルイルミネーションのような“陰”表現ができるのが特長だ。

 「DiRT2」では、このAmbient Occlusionの処理系をピクセルシェーダーではなくDirectComputeの演算シェーダー(Compute Shader)を用いた実装にしたことから、DirectX 11世代以上のGPUが搭載されたシステムでないと利用できなくなっている。

 Ambient Occlusionの処理は、アルゴリズムの関係上、深度バッファに対して反復的な参照を行なう。これは非常に高負荷な処理であり、グラフィックスパイプラインとして処理する場合は、GPU内部のキャッシュ機構に頼ることでしか負荷低減の手立てがない。そこで、DirectComputeを用い、その深度バッファ調査の範囲内の局所的な深度値群を共有メモリに先に格納しつつ処理させることで、大幅な負荷低減を実現させたというのだ。

上段がAMBIENT OCCLUSION=LOW設定。下段がAMBIENT OCCLUSION=HIGH設定

 こうした通常の3DグラフィックスパイプラインとGPGPU的な手法のレンダリング支援を組み合わせたレンダリングテクニックを最近では「ハイブリッドレンダリング」(Hybrid Rendering)と呼ぶようになってきている。先日、12月16日から横浜で開催されたばかりのSIGGRAPH ASIA 2009の基調講演においてNVIDIA FellowのDavid Kirk博士も、このハイブリッドレンダリングの将来性について言及している。GI技術のところで少しだけ触れた「イメージ・スペース・フォトン・マッピング」について、Kirk氏はその基調講演の中でハイブリッドレンダリングを活用するにあたっておあつらえ向きのテーマだと主張した。

 この手法では最初の直接光ライティングのレンダリングについては通常の3Dグラフィックスパイプラインを用いて行ない、そこからの二次光源の影響についてはGPGPUベースで局所的なレイトレーシングを大ざっぱに行なう。光源が動いても、シーンにあるキャラクタ達が動いても、毎フレーム、局所的な二次反射光の影響についてのレイトレーシングを行なうので、リアルタイムに適応した説得力のあるGIが実現できるため、効果が高い。

 今年、インテルのCPU/GPUハイブリッドプロセッサとして注目されてきたLarrabeeのキャンセルが12月上旬に大きく報じられたため、本稿でも取り上げてきた「ソフトウェアレンダリングへの回帰説」は短期的にはなくなったと見て良さそうだが、逆にこれが2010年以降、「GPU×GPGPU=ハイブリッドレンダリング」への流れへと追い風を吹かせたような気もする。

 もしかすると、DirectX 11時代においてはテッセレーションステージの活用以上に、ハイブリッドレンダリングの動きが活発化するかもしれない。

NVIDIA FellowのDavid Kirk博士Kirk氏は「普通の3DグラフィックスレンダリングとGPGPUとが融合したハイブリッドレンダリングが台頭する」と予言
「フォトンマッピングをGPGPUでアクセラレーションさせるハイブリッドレンダリングはいかが?」とKirk氏

直接光のみのライティング。現状の標準的な3Dグラフィックス・パイプラインでのリアルタイムレンダリングはこれだけだGIを考慮せず、一様にライティング結果を持ち上げるだけの定数的環境光を付加するとこのようになる。ある意味、これが見慣れた「普通の3Dゲームグラフィックス」間接光についての影響をGPGPUによるレイトレーシングでフォトンマッピングする
このフォトンマッピングにより正確な間接光照明を算出算出した間接光照明結果と前出の直接光のみのライティング結果とを合成すればご覧の通り。キャラクターや光源が動いてもOKというのがこの手法の利点

【ハイブリッドレンダリングのデモ】
このフォトンマッピングをGPGPUアクセラレーションしたハイブリッドレンダリングのデモがこちら。直接光だけでなく、間接光の影響が的確に現れている点に着目。光源が白でも、その光を赤い壁に当てれば赤い間接光が発生し、そのシーンに赤みを及ぼす


(2009年 12月 28日)

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