グラフィックスパイプライン
3次元シーンにおける物体の陰影は、物体の座標、物体の反射率、表面の特性、および光源(照明)の位置によって定義される。
(ピクセル パイプライン)
コンピュート シェーダー (CS) - パイプラインに含まれず、他のステージとは独立している。
DirectX 8およびOpenGL 2.0からは、従来は固定実装だった陰影計算のアルゴリズムをユーザープログラマーによって実装することのできる「プログラマブルシェーダー」が標準導入された。
DirectX 8、DirectX 9およびOpenGL 2.xでは、プログラム可能なステージは頂点シェーダーおよびピクセルシェーダーのみだったが、DirectX 10およびOpenGL 3.2以降ではさらにジオメトリシェーダーが追加された。
また、DirectX 10世代以降のGPUでは「汎用シェーダー」と呼ばれるプログラム可能なシェーダーユニットが、頂点シェーダー/ジオメトリシェーダー/ピクセルシェーダーなどを兼ねて演算を行なうようになっている。 DirectX 11では上図で"*"印を付けて示したように、頂点シェーダー、ハルシェーダー、ドメインシェーダー、ジオメトリシェーダー、ピクセルシェーダー、コンピュートシェーダーが、実際のGPM内では汎用シェーダーで実行されていると想定されている。
元々"Shading"(シェーディング)は元画像に対しての光源からの光による陰影効果であり、"Shader"(シェーダー)はその陰影処理を行なう演算プログラムを意味していたが、単純な陰影だけでなくリアルなCG画像を生み出すために多様な修飾(=画面効果、エフェクト)を施す工夫が考案され、それに対応して専用の演算を行なう数種類のシェーダーユニットが生み出された。やがて、必要な演算の種類は異なるが、それぞれに専用の回路を設けるよりも単一の汎用処理回路上でプログラムによって多様な演算をこなす方が得策だとして、「統合型シェーダーアーキテクチャ」が採用されるようになっている。
独立したフラグメント、またはピクセルごとに入力頂点の属性(頂点カラー)やメモリ上のテクスチャから補間した値を基にして色を割り当て、よりリアルな陰影や表面の質感を与える。
リアルタイムグラフィックス処理系においては、レンダリングされたポリゴンの法線方向にのみ照明を計算している。頂点間の照明の値はラスタライズの間に補間される。グラフィックスハードウェアが固定機能のシェーダーのみをサポートしていたDirectX 7 (Direct3D 7) 世代までは、面単位で陰影付けを行なうフラットシェーディングや、頂点単位で陰影を補間する頂点単位シェーディング(グーローシェーディング)/ライティングが主流だったが、グラフィックスハードウェアが性能を向上し、さらにプログラマブルシェーダー機能を備えるようになってからは、より高品位のピクセル単位(Per-pixel, Per-fragment)シェーディング(フォンシェーディング)/ライティングをラスタライズ後に実施することも行なわれるようになってきている。
なおリアルタイムグラフィックス処理系において、DirectX 9 (Direct3D 9) 世代が主流だった2005年頃までは、グラフィックスカードに実装される頂点シェーダーユニットおよびピクセルシェーダーユニットをそれぞれ増設し、順番に処理を行なわせることが描画高速化の主流であったが、ハードウェア利用効率の向上を目的として2006年頃から出現したDirectX 10 (Direct3D 10) 世代(統合型シェーダーアーキテクチャ)のグラフィックスカードでは、汎用シェーダーユニットの流動的な活用による高速化が行なわれている。