Radeon HD 2000シリーズでは、GeForce 8000シリーズと同様に「統合型シェーダアーキテクチャ」(Unified Shader Architecture)を採用している。

この統合型シェーダアーキテクチャだが、DirectX 10世代/プログラマブルシェーダ4.0仕様対応(SM4.0:Shader Model4.0)のGPUではキーテクノロジーとなっている。それでは、これは一体どういう技術なのか。以前のGeForce 8000シリーズの技術解説記事の折りにも触れているが、前回の記事から、既に半年も経過しているので、本稿でも改めて解説することにしよう。

通常、1枚のポリゴンは複数のピクセルで表示することになる。これは容易に想像が出来るはずだ。このため、DirectX 8時代の最初期のプログラマブルシェーダアーキテクチャのGPUはもちろん、続くDirectX 9時代においても、GPUは、頂点シェーダよりもピクセルシェーダを多く実装することを標準的な設計方針としていた。

しかし、1フレームをレンダリングするのに十数パス以上のマルチパスレンダリングが珍しくなくってきている近代リアルタイム3Dグラフィックスにおいては、局面によっては瞬間的に「頂点シェーダ>ピクセルシェーダ」という逆転負荷がかかる場合も珍しくなくなってきている。

最終的なフレームを作り上げるのに、必要な素材自体をレンダリングパイプラインを何度も回して作り上げる…といったテクニックが一般化してきているので、頂点シェーダ、ピクセルシェーダの一方だけを極端に酷使したりする状況も多くなってきているのだ。

例えば、DOOM3、EverQuest2などで採用された影生成技法の「ステンシルシャドウボリューム技法」では、光源から見て輪郭となる、そのシーンに存在する全ての頂点を、光線方向に引き伸ばし、影領域(シャドウボリューム)を生成する。このレンダリングパスでは、強烈な負荷が頂点シェーダにかかることになる。

また、あるいは、そのシーンに水面が存在する場合、そのさざ波の動的アニメーションは、テクスチャをワークエリアに用いてピクセルシェーダを駆使した波動シミュレーションを実行し、動的なハイトマップを生成することで実現することがある。こうしたパスではピクセルシェーダの方にだけ高負荷がかかる。

このように局面によっては瞬間的に「頂点シェーダ>ピクセルシェーダ」となったり「頂点シェーダ<ピクセルシェーダ」となったりするというのだ。

マイクロソフトDirectX SDKより。ステンシルシャドウボリューム技法の影生成では、光源から光線にそって輪郭頂点を引き伸ばして影領域を生成することから始める。図はその影領域を可視化した画面。この工程は頂点シェーダに高負荷がかかる

「FARCRY」(CRYTEK)より。こうした動的な水面のさざ波表現は、ピクセルシェーダを駆使して波の伝搬の様子について波動シミュレーションを行って生成したハイトマップテクスチャを利用して行うことが多い

そして、DirectX 10/SM4.0となってさらに事態は複雑化する様相を呈してきた。そう、第三のプログラマブルシェーダである「ジオメトリシェーダ」が新設されてレンダリングパイプラインはさらに複雑化したのだ。頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダの3つのプログラマブルシェーダが実際にどういう頻度で活用されるのかというのは、もはや設計段階で予測のしようがなくなってきたのである。

しかし、着眼を変えると解決の糸口も見えてくる。

頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ、それぞれ役割や仕事の意味は異なるが、実行される演算の種類にそう大差はない。

そこで、頂点、ジオメトリ、ピクセル、いずれの"部署"にも属さないいわば"フリーランス"のプログラマブルシェーダを大量に用意しておき、これを必要に応じて頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダとして起用して使い分けていってはどうか。これが「統合型シェーダアーキテクチャ」の根幹となる考え方なのだ。

従来のシェーダ固定割り当て式アーキテクチャのGPU

統合型シェーダアーキテクチャのGPU