Shader Variant (シェーダーバリアント)は、ゲームグラフィックスのレンダリングや最適化(テクニカルアート)において極めて重要となる技術用語です。1つのシェーダーファイルから、機能の有効/無効(例:影の有無、フォグの有無)の組み合わせに応じて、GPU向けに自動生成される大量の内部プログラム分岐の解説。
現実世界での例え:多機能な万能ツールナイフの『全アタッチメント(組み合わせ)の実物』をあらかじめ全部製造しておく無駄
シェーダーバリアントは、「『ハサミ、ドライバー、缶切り』が付いた十徳ナイフを、使う可能性のあるすべての組み合わせパターン(ハサミだけ出ているナイフ、ハサミとドライバーが出ているナイフなど)ごとに、あらかじめ別の実物として何千本も製造・陳列しておく無駄な作業」です。GPUはゲームの実行中に臨機応変な「もし影がONならこのコードを通る」という分岐が苦手なため、あらかじめ全分岐パターンの実物プログラム(バリアント)をすべて作ってメモリにロードしておく必要があります。この数が爆発(バリアント爆発)すると、陳列棚(メモリ)がパンクします。
図:Shader Variant (シェーダーバリアント)の基本的な処理フローと仕組みを日本語表記で分かりやすく図解したインフォグラフィック
詳細な仕組みと動作原理
不要なキーワードの分岐(Shader Keyword)を整理し、ビルド時に自動で不要なバリアントを間引く「Shader Stripping」スクリプトを実装して、プログラムの総数を劇的に削減します。