Compute Shader (コンピューティングシェーダー)は、ゲームグラフィックスのレンダリングや最適化(テクニカルアート)において極めて重要となる技術用語です。グラフィックスの描画パスとは完全に独立し、GPUが持つ数千個の超並列コアを利用して、物理演算、大量のパーティクルの位置計算、群衆シミュレーションなどの膨大な数学的計算を爆速で処理するプログラムの解説。
現実世界での例え:数万件の算数の宿題を、1人の超天才数学者(CPU)が不眠不休で解くのをやめ、小学校の体育館に『1万人の普通の生徒(GPUの数千コア)』を集めて、一斉に1問ずつ同時に分担して解かせる超並列スピード解決
コンピューティングシェーダーは、「描画(画面に色を塗る)を目的とせず、単に『超巨大な数学の計算(物理演算や位置シミュレーション)』を解くためだけに、GPUの巨大な数千の頭脳(並列コア)を贅沢に独占して超特急で計算させるシステム」です。計算結果はGPUのメモリから出ることなく、そのまま次の描画ステージへ直接流し込まれるため、CPUとGPUの間の遅いデータ通信(PCIeボトルネック)も一切発生せず、通常の1万倍以上の数万個のオブジェクトを同時に生き生きと動かすことができます。これがVFX Graphの「数百万パーティクル」の裏側で動いている圧倒的な心臓部です。
図:Compute Shader (コンピューティングシェーダー)の基本的な処理フローと仕組みを日本語表記で分かりやすく図解したインフォグラフィック
詳細な仕組みと動作原理
計算処理をC#から「Compute Shader(計算専用GPUコード)」に完全に移植し、数千個の並列コアを持つGPUに直接投げ込んで一瞬で並列計算させ、その結果をメッシュ描画に直接適用します。