GPUは、これまで、約5年毎にステップアップしてきた。ちょうど10年前の今頃のGPUは、GUIを高速化する“2Dグラフィックスアクセラレータ”の急進化時期だった。それが、96年頃からは“3Dグラフィックスアクセラレータ”(実際にはビデオアクセラレータ機能も持つ)へとトレンドが移り始めた。そして、今年からは、次の進化ステップに入る。GPUは、今後「シェーダアクセラレータ」へと進化する。
GPUのこの進化は、ソフトウェアの発達とも密接に絡んでいる。2Dグラフィックスアクセラレータは、WindowsによるGUIの普及を受けて、WindowsのグラフィックスシステムGDI(Graphical Device Interface)をアクセラレートするハードとして進化した。次の、3Dグラフィックスアクセラレータは、3D APIであるDirect3Dの登場を受けて普及ステージに入った。そして、シェーダアクセラレータの上に来るのは、DirectX 9やOpenGL 2.0といったAPIとシェーディング言語だ。
ではどうしてこうしたパラダイムシフトが来るのか? それは、3Dグラフィックスアクセラレータは、もうこれ以上進化させても意味がないからだ。SGIのShawn Underwood氏(Director, Visual Computing Product Management)はその背景を説明する。
「GPUは、最近までのゴールから、本質的なシフトが進みつつある。3Dゲームを見ると、これまではずっとポリゴン数を増やしてディテールを表現できることに業界はフォーカスしてきた。その結果、今のGPUは非常に精細な表現をできるようになったが、絵(画面)はというと、ひどいままだった。つまり、これ以上単純にポリゴン数を増やしても、もう意味がないということが明らかになったわけだ。
そこで、業界は、今度はよりよい絵を得られる方向へとシフトし始めた。各社でフォトリアリズムとか映画品質とか、呼び名は違うが、結局のところやろうとしていることは同じだ。つまり、単純に速くするのではなく、より美しい絵を作れる技術を開発してゆこうという話だ。そして、そのための方法は、プログラマビリティを加えることだ。これは、GPUのアーキテクチャの基本的なシフトだ」
つまり、従来の3Dグラフィックスアクセラレータでは到達できない、もっとリアルで複雑なグラフィックスを実現する方向へのパラダイムシフトが始まったわけだ。
進化によって、GPUの役割や目的も変わる。2Dグラフィックスアクセラレータの目的はGUIを速くすることだった。それが、3Dグラフィックスアクセラレータでは、高速化の焦点は3Dやビデオに変わった。そして、シェーダアクセラレータでは、シェーダプログラムの実行へとポイントが移る。その目的は、オフラインCGとリアルタイムCGの間にある垣根を超えることだ。
●2つのCGの本質的な違い
コンピュータグラフィックスには大きく分けてリアルタイムCGとオフラインCG(いわゆるCGムービー)がある。
リアルタイムCGでは、1フレームにつき数10分の1秒の短時間で、全ての3Dグラフィックス処理を行なわなければならない。つまり、リアルタイムに変化する3Dオブジェクトの膨大な座標を、遅延なく変換し、ライティング計算をしなければならない。また、レンダリングでは、リアルタイムにテクスチャを貼り陰影をつけエフェクトをかける必要がある。そのため、これまでリアルタイムCGでは、高速処理に向いた比較的簡素なアルゴリズムだけを実装してきた。また、高速化のために、柔軟性を犠牲にして、ほとんどの部分を固定ハードウェア回路でインプリメントした。
それに対して、リアルタイム処理をしないオフラインCGでは、時間制限がないため、場合によっては1フレームに何時間もかけることができる。そのため、オフラインCGでは、処理時間の短縮より、精度や柔軟性を追求してきた。レンダリングを何回も繰り返すマルチレンダリングを行ない、複雑な反射や透過を組み合わせたフォトリアルな映像を作り出すために、シェーディングでは複雑なシェーダを使う。
「シェーダ(Shader)」は、3Dグラフィックスの処理過程での様々な効果を実現するプログラムまたはアルゴリズム群だ。シェーディングには、様々な表現のアルゴリズムがある。そうした異なるシェーディングモデルを、3Dソフトウェア上で、3Dオブジェクト毎に切り替えられるようにしたのがシェーダの始まりだ。
さらに、現在ではグラフィックス用に開発されたシェーディング言語によって、ユーザー(プログラマやデザイナ)がさらに複雑なシェーディングをプログラムできるようになっている。シェーディング言語を使うと、サーフェス上の各ピクセルに対して細かくカラーを定義できたため、飛躍的に複雑な表現が可能になる。このシェーディング言語を使う手法は、Steve Jobs氏の3Dグラフィックスソフト会社Pixerが開発したレンダリングソフト「RenderMan」で採用され映画『トイ・ストーリー』などで使われて有名になった。CGを使った映画がここまで興隆したのは、シェーディング言語のおかげだと言われる。
これまでのリアルタイムCGとオフラインCGのこうした違いは、単純な処理量の違いではなく、本質的なものだ。そのため、いくら従来型の3Dグラフィックスアクセラレータが高速になりテクスチャを何枚も貼れるようになっても、決してその差を埋めることはできなかった。だから、SGIのUnderwood氏が指摘するように、いくらGPUが速くなっても、絵はオフラインCGとはほど遠いひどいもののままだったのだ。
●シェーダのためのProgramable Shader
RADEON 9700 |
複雑なシェーダがこれまでオフラインCGだけのものだったのには理由がある。これまでのシェーダはソフトウェアエンジンであり、高度なプログラマブル性とデータ精度を要求するため、CPU上でしか実行できなかったからだ。シェーダは、基本的にGPUでは実行できなかったし、また、処理が重いため原則としてリアルタイムにも処理できなかった。
しかし、今後のGPUは、プログラム性を加えデータ精度を高め、パフォーマンスをシェーディング処理に費やすことで、シェーダをGPU上でリアルタイムに実行できるようにする。こうして見ると、DirectX 8世代以降のGPUに搭載されているプログラマブルな演算ユニット「Programable Shader」が何なのかよく見えてくる。GPU上のShaderが目指しているのはシェーダのハードウェア化、“ハードウェアRenderMan”だ。つまり、CPUの上で実行されているシェーディングエンジンを、GPU上のプロセッサで実行することだ。
「RADEON 9700では、RenderManのコンセプトをハードウェアで実行できる。今、ハードウェアと言ったが、実際にはハードウェアのマイクロコードだ。RADEON 9700では、ピクセルパイプもプログラマブルなハードウェアエンジンになり、もっともっと複雑なシェーダを実行できるようになる」とATI TechnologiesのDavid E. Orton(デビッド・E・オートン)社長兼COOは説明する。
この変化は、GPU自体をグラフィックス専用のプログラマブルなプロセッサに変えると言い換えてもいい。シェーディング言語の実装のためには、高度なプログラム性がGPUに必要になるからだ。そのプロセッサ上に、高等なシェーディング言語でプログラムしやすい環境を載せることで、オフラインCG並みのシェーダを開発したり、既存のシェーダを移植したりできるようにする。それによって、オフラインCGとリアルタイムCGの垣根をミニマムにする。それが、シェーダアクセラレータになるDirectX 9以降の世代のGPUのフィロソフィだ。
(2002年9月3日)
[Reported by 後藤 弘茂]