グラフィックスパイプライン
モデルの頂点座標データなどはシェーダーユニットなどによって幾度も多様な変換処理を受けて最終的にフレームバッファに結果が格納される。以下にDirectX (Direct3D) およびOpenGLそれぞれの3DグラフィックスAPIにおける処理の流れを示す。不要な処理ステージはスキップされる。「ラスタライザー」を挟んで前半が頂点データを扱う「頂点パイプライン」であり、ジオメトリシェーダーから始まる後半がピクセルデータを扱う「ピクセルパイプライン」である。これらはプログラム上の仮想的な処理順であって、実際の回路構成とは異なっている。カッコ内は演算フローの外部に位置する演算ユニットである。
DirectX 11の各ステージ
インプット アセンブラー
頂点シェーダー (VS) (*)
3種のテッセレーション ユニット ハル シェーダー (HS) (*) テッセレータ ドメイン シェーダー (DS) (*)
ジオメトリ シェーダー (GS) (*)
ラスタライザー
ピクセル シェーダー (PS) (*)
(テクスチャ フィルタリング)
アウトプット マージャー
コンピュート シェーダー (CS) (*) - パイプラインに含まれず、他のステージとは独立している。
OpenGL 4.3の各ステージ
バーテックス プラー
バーテックス シェーダー (VS)
3種のテッセレーション ユニット テッセレーション コントロール シェーダー (TCS) テッセレーション プリミティブ ジェネレーター テッセレーション エバリュエーション シェーダー (TES)
ジオメトリ シェーダー (GS)
トランスフォーム フィードバック
フラグメント シェーダー (FS)
(テクスチャリング)
3次元モデルのポリゴンメッシュを形成する1つ1つの三角形は、それぞれが3つの頂点から成るが、表面または裏面の向きを持っている。座標変換後にカメラに対して裏面を向けている三角形を描画する必要がない場合、パイプラインから除外される。この工程を裏面カリング(背面カリング)と呼ぶ。どちらが表面でどちらが裏面になるかは、入力頂点の順序および右手座標系/左手座標系のどちらを採用するかによって変化する。
GPUでも上記で示した基本的なグラフィックスパイプライン処理の流れに沿ってレンダリングが実行されているが、単にパイプライン処理するだけでなく、画像の処理単位を幾つも分解して、半ばハードワイヤード化された多数の専用回路や、(ソフトウェアプログラムによるカスタマイズが可能な)多数の汎用的な演算回路を同時並列的に用いることで、実時間処理に必要な演算性能を得ている。演算回路の並列度の増加がそのまま処理性能の向上に比例する傾向が強いため、半導体の集積度向上に応じて年ごとに演算回路の数が増加している。2015年現在では、プログラム処理が可能な汎用回路の数が最大では数千基を越える規模になっている。
GPUによるグラフィックスパイプラインでのステージは、CPUによる命令パイプラインのステージとは論理的/物理的に異なるだけでなく、グラフィックスパイプラインの方が処理の粒度がより大きく、基本的には演算結果は逐次、ローカルメモリに書き出される。CPUの命令パイプラインでは基本的にステージ間は高速のラッチ回路で結ばれている。
なおDirectX 7世代までの古典的なGPUでは固定機能ハードウェアで実装されていた3D-2D変換機能だが、DirectX 8世代以降、プログラマビリティを獲得した高性能GPUでは順次廃止されている(固定機能はプログラマブルシェーダーでエミュレートされる)。さらに、グラフィックスAPI側でも、DirectX 10やOpenGL 3.1以降は、基本的な変換処理から高度なエフェクトまで、すべての動作指示をシェーダープログラムで記述しなければ図形を描くことすらできなくなっている。
3次元座標を入力して3次元ワールド空間として知られている座標のデータを得る。これには拡大縮小と回転のようなローカルなオブジェクト空間上での基本的な座標変換も含む。
グラフィックスパイプラインの基本的な処理段階の各々は、一般に「ステージ」と表現される。(カッコつきのステージはパイプラインの前後段階である。)
OpenGL 4.0のバーテックスシェーダーはラスタライジングまで機能に含まれている。
頂点シェーダーは、モデルのポリゴンに対して、頂点単位で座標変換・陰影処理を行なう。また、テッセレーションの前段、または後段で視点変換しクリッピング処理を行ない、深度情報によって視点から完全に見えなくなるポリゴンはカリング (Culling) 処理によって除去される。この過程でモデルの座標情報は視点から見える3次元空間内でのワールド座標系へと変換される。
テッセレーションを実行するユニットは頂点を新たに付加することができる(新たに頂点を生成する機能は、バーテックスシェーダーでも備えている)。この機能によって、距離適応型テッセレーションやディスプレースメントマップのような効果が付けられる。
ジオメトリシェーダーはプリミティブの増減やプリミティブの種類変更が可能である。 OpenGLではプリミティブシェーダーとも呼ばれる。
ラスタライザーによってポリゴンが2次元配列のピクセルに対応付けされる。一般にテクスチャデータを用いることも可能である。テクスチャデータは一般的に2次元画像であるが、立方体の各面を用いて6方向からの投影・参照を行なうキューブマップや、3次元のボリュームデータを格納するボリュームテクスチャという概念も存在する。テクスチャを構成する画素は「テクセル (texel)」と呼ばれる。
なおピクセルへの色の書き込みを行なう際に、併せて視点からの距離すなわち深度値を書き込むことも可能である。Direct3D/OpenGLでは、カラーバッファとは別にZバッファ(深度バッファ)を用意し、レンダーターゲットとして設定する。