ウーバーシェーダー
エフェクトごとにシェーダーを用意する代わりに、マテリアルの全機能をプリプロセッサスイッチや分岐、静的な順列の裏に抱え込んだ、1本の大きなシェーダー。
小さなシェーダーを何十本も手作りする代わりに、法線マッピング、ディテールレイヤー、エミッシブ、フォグなどすべての経路を含む「ウーバー」シェーダーを1本書き、#ifdefとユニフォームのフラグで切り替える。ビルド時にツールチェーンが必要な静的順列(シェーダーバリアント)を生成し、実行時には動的分岐でGPU上の経路を選べる。
利点は保守性で、情報源が1つなので、マテリアル間でライティングが一貫する。代償は組み合わせ爆発だ。独立した機能がN個あれば最大2^N個のバリアントになり、コンパイル時間とメモリが膨れ上がる(Unityのシェーダーバリアントストリッピングは、まさにこれを抑えるためにある)。近年のハードウェアは動的分岐が十分安価になったため、実行時に分岐させるエンジンもある。