GPUを支える技術を読んで学んだ内容をメモしてます。
www.amazon.co.jp/dp/4297119544

パイプラインの変遷

固定機能パイプライン (~2000年)

3Dグラフィックスでは、T&L(Transpose and Lighting)処理が必要になります。 固定機能パイプラインでは、固定回路で座標変換とライティング処理が行われ、ライスタライザを経て、貼り付けやブレンド処理も全て固定で行われていました。 プログラム的に干渉する余地はなく、GPUに用意された処理の組み合わせを用いるしかありませんでした。

プログラマブルシェーダー

頂点シェーダー登場(2001年、DirectX 8 / GeForce 3)

T&Lが「頂点シェーダー」としてプログラム可能になりました。 開発者が自分でコードを書いて頂点の変換方法をカスタマイズできるようになりました。 この時点では、ラスタライズ後のピクセル処理は固定機能で、カスタマイズできません。

頂点・ピクセルに両対応(2002〜2004年、DirectX 9)

ピクセル側も専用の回路としてプログラム可能になりました。 これによって頂点シェーダーとピクセルシェーダーの両方が使えるようになりましたが、両者は物理的に別々の回路として実装されていました。

状況によって頂点シェーダーやピクセルシェーダーに処理が偏った場合、もう一方は遊んでしまう状態になるため、非効率になることがあります。

ユニファイドシェーダー(2005〜2007年、Xenos / G80)

頂点用とピクセル用に分かれていた回路が、一つの汎用シェーダーコア群にまとめられました。 スケジュールがその時時に応じて、同じコアを頂点処理やピクセル処理に割り当てます。 これにより、負荷の偏りによる無駄が解消され、GPU全体の稼働率が上がりました。

ラスタライザの変遷

書籍には書いてませんが、ラスタライザの変遷についても軽くまとめます。

CPUによるソフトウェアラスタライザ (専用3Dアクセラレータ登場以前、〜90年代前半)

三角形をピクセルに変換する処理をすべてCPU側でソフトウェア計算していました。

Zバッファはメモリ帯域的に重かったため、QuakeではBSPツリーを持ちいてポリゴンを奥から手前に並び替えていました。 また、解像度は320×200程度、色数も256色パレットに抑えるなど、あらゆる面でCPU負荷を削る設計になっていました

専用ハードウェアラスタライザ(1996年〜現在)

ラスタライズ処理(三角形のセットアップ、走査変換、Zテスト)を専用の固定回路に任せるようになりました。

主に以下の作業を担当しています

  • 三角形セットアップ: 頂点座標からエッジの方程式(傾き)を計算
  • 走査変換: どのピクセルが三角形の内側にあるかを判定
  • 属性補間: 色・UV・深度などを重心座標で補間
  • Z/ステンシルテスト

GPU上でのソフトウェアラスタライザ (UE5 Nanite、2020〜2022年)

ユニファイドシェーダーコアが汎用計算(GPGPU)をこなせるようになったことで、コンピュートシェーダーとしてラスタライズ処理を自前で実装する手法が出てきました。特に微小な三角形が大量にある場合、専用ハードウェアラスタライザより効率が良いケースがあるためです。

ソフトウェアラスタライザについても別の機会にまとめたいと思います。