●次世代ではバーテックスシェーダが4ユニット、ピクセルパイプが8本に
グラフィックスチップが変貌しつつある。DirectXの進化とともに革新するグラフィックスチップは、最終的に一種のメディアプロセッサに変化する。つまり、ワイヤードロジックのノンプログラマブルチップから、プログラマブルでフレキシブルなプロセッサへと変わる。真にグラフィックスプロセッシングユニット(GPU)と言っていいハードウェアへと向かう。
その進化の中で強化されるのは、新しいプログラマブルエンジンであるプログラマブルシェーダになる。当面は、GPUの世代ごとに、シェーダハードウェアの数自体が倍増して行くだろう。つまり、DirectX 9世代では、下の推測図のように、バーテックスシェーダは4ユニットが当たり前になり、ピクセルシェーダのピクセルパイプは8本になるだろう。つまり、今のGeForce4 Ti(NV25)やRADEON 8500(R200)の2倍になるわけだ。
これは至極当然の流れだ。それは、1プロセス世代で、チップに搭載できるトランジスタ数が倍増するからだ。強化するのがシェーダ部分に絞られるなら、ユニットは倍のインプリメントへと向かうだろう。また、グラフィックス処理では、CPUと比べてコマンドフローが比較的単純(例え分岐命令がシェーダに入ったとしても)なので、処理を並列化しやすい。
また、ユニットの数が増えるだけでなく、シェーダの命令セットやレジスタがDirectXの世代毎に強化される。シェーダ自身のインプリメンテーションもより洗練されたもの(例えば、スーパーパイプライン化)へ変わる。シェーダへのコマンドストリームをスケジューリングする機能も加わり、どんどんCPUライクになってくると思われる。
その一方、固定機能のT&L(座標変換&ライティング)エンジンや固定機能のテクスチャユニットの機能の強化は止まる。盲腸のような機能ブロックとして残され、最終的にはこれらのユニットはチップ上から消え去るだろう。おそらく、次の世代で早くも固定機能ユニットのマルチテクスチャマッピングは衰退する。つまり、各パイプに対する固定のテクスチャマッピングは削減されて1テクスチャ/パイプになるか、よくて現状維持(2テクスチャ/パイプ)となり、マルチテクスチャリングはピクセルシェーダ側の機能に移って行くだろう。
●シェーダグラフィックス時代のハードウェアを作る
ハードウェア側のこうした変化によって、3Dグラフィックス自体も変わって行く。CGムービーライクな、リアリスティックな画像が、ついにPCやコンシューマ機のゲーム、エンターテイメントアプリケーションに登場するようになる。もちろん、PCやコンシューマ機の3Dグラフィックス機能が、プリレンダリングされたCGムービーのリアリティに届くことはない。このギャップが解消されることはありえないが、それでも今後はかなり近づく。
それは、3Dグラフィックスの量的な違いではなく質的な違いが緩和されるからだ。つまり、単純にポリゴンやテクスチャの量が増えるだけでなく、微細な表現を可能にするシェーダプログラムがGPUで実行できるようになるからだ。例えば、より自然な影、より自然な肌といった、さまざまな微妙な表現がPCやコンシューマ機で、リアルタイムに描画できるようになる。
これは、3Dグラフィックスの自然な流れでもある。3D CGは、単純な「ポリゴン」時代から、テクスチャを貼り付けた「テクスチャ」時代へ、さらにテクスチャをいかに工夫してリアルに見せるかの「マルチテクスチャ」時代へと流れてきた。それが、今度はより柔軟な表現を加えた「シェーダ」時代へと入る。
実際、以前から、3Dグラフィックスツールでは、シェーディング言語によってプログラムされたシェーダによる処理が行なわれていた。この手法は、映画「トイ・ストーリー」で使われて有名になった。しかし、これまでのシェーダ処理は、ノンリアルタイムで、また、ソフトウェア処理だった。今回は、そのノンリアルタイムのシェーダとある程度同じような処理を、ハードウェアでリアルタイムに実現しようという流れだと言える。
これにより、3Dグラフィックス処理のパーティショニングがまたひとつ、グラフィックスハードウェア側にずれる。つまり、グラフィックスハード側は、レンダリングだけだったのが、それまでCPUで実行していたジオメトリが加わり、今度はシェーダが加わる。CPU対グラフィックスハードの綱引きは、また一歩、グラフィックス側に引き寄せられることになる。
その流れの中で、「PixelFlow」( http://www.cs.unc.edu/~pxfl/pxpl-summary.html )のようなシェーダを意識したフルプログラマブルのグラフィックスシステムのプロジェクトが登場する。PixelFlowについては、PlayStation 3の記事へのメールで何人もの方からご指摘いただいた(ありがとうございました)。まったく、新しい概念のグラフィックスシステムを作る試みで、これがシェーダグラフィックス時代のひとつの解なのは間違いがない。また、これは、フルプログラマブルなプロセッサで、マルチメディア処理を一手に担当しようとしたかつてのメディアプロセッサとも、プログラマビリティという方向性では似ている。
●Microsoftもまたプロセッサ化を目指す
MicrosoftのDirectX担当スポークスマン Ted Haseディレクタ |
では、この潮流の中で、DirectXハードウェアはどこへ向かおうとしているのか。
「DirectX 9のジェネラルなフィロソフィは、(メディアプロセッサと)非常に似ている」と語るのは、MicrosoftでDirectXのスポークスマンを務めるTed Hase(テッド・ハセ)ディレクタ(Third-Party Windows Gaming & Entertainment)。
そう、Microsoft自身もまた、DirectX 9(およびそれ以降)は、メディアプロセッサと同じ方向性だと言っているのだ。実際、DirectX 8.xでの、シェーダハードウェアの中身はプロセッサだ。例えば、バーテックスシェーダの実態は、単精度浮動小数点のSIMDプロセッサで、これは、PlayStation 2の心臓部「Emotion Engine」のベクターユニットにある意味でよく似ている。
そして、Microsoftは次のDirectX 9のVertex Shader 2.0とPixel Shader 2.0では、シェーダ言語やレジスタなどの大幅な拡充を図る。例えば、Vertex Shader 2.0ではジャンプ命令とループカウンタが加わる。さらに、ポストDirectX 9ではさらに大幅な拡充も計画している。これを見ていると、Microsoftは完全なプロセッサの命令セットを新たに定義しようとしているように見える。
DirectX 8パイプライン |
こうしたDirectX 9のプログラマブル指向を見ると、“フィロソフィがメディアプロセッサ”というのもよくわかる。つまり、究極的なゴールは、PixelFlowもDirectXハードも、そして、おそらくプログラマビリティを重視するPlayStationファミリも同じだ。それは、リッチなシェーダプログラムのハードウェア実行だと思われる。
ただし、アプローチはもちろん異なる。DirectXは、よくも悪くもMicrosoft的なアーキテクチャだ。それは、互換性と慎重な歩みと言い換えてもいい。
DirectX 8ハードは、DirectX 7までのレガシーを引きずった構造で、プログラマブルシェーダと固定機能ユニットが図のように並列に並んでいる。つまり、バーテックスシェーダと固定機能T&L、ピクセルシェーダと固定機能のテクスチャユニットが並ぶ。これは、DirectX 9ハード(そしておそらくDirectX 10)でも、機能は据え置きか衰退するものの、引き継がれると見られる。慎重な、Microsoftらしい互換性を重視した戦略だ。また、シェーダの命令セットやプログラミング環境も、一気に揃えないで、徐々に整えてゆく。このあたりは、ハードウェアのインプリメントの労力も考えてのことと思われる。
これは、もちろんフルスクラッチでアーキテクチャを作るチップに対して不利になるが、開発者サイドから見ると、徐々に移行できるためハードルは低い。全てをシェーダハードウェアで実行する必要がないからだ。じつにMicrosoftらしいシェーダ時代へのアプローチ、それがDirectX 9アーキテクチャだ。
(2002年4月12日)
[Reported by 後藤 弘茂]