Shader Compilation (シェーダーコンパイル)は、ゲームグラフィックスのレンダリングや最適化(テクニカルアート)において極めて重要となる技術用語です。人間が書いたソースコード(HLSLやShader Graphノード)を、対象のグラフィックボード(GPU)が直接理解して実行できるバイナリ命令セット(マシン語)に翻訳・ビルドするプロセスの解説。
現実世界での例え:日本語で書かれた台本(シェーダーコード)を、英語やフランス語しか話せない劇団員(GPU)に向けて、超特急で『各国語の翻訳本』に書き直す通訳作業
シェーダーコンパイルは、「日本語で書かれた演出プラン(Shader Graph)を、英語(DirectX)や中国語(Metal)、ドイツ語(Vulkan)といった、対象となる特定の舞台(GPUハードウェア)の劇団員が読める専門のマシン語台本に、一字一句間違えずに翻訳する通訳作業」です。この翻訳作業は非常に緻密で時間がかかるため、特に数千パターンの組み合わせ(バリアント)を一度に翻訳しようとすると、通訳チームがパンクしてゲーム全体の動きが停止(コンパイルスタール)してしまいます。事前翻訳や非同期翻訳などの工夫で、この待ち時間をゼロにするアプローチが重要です。
図:Shader Compilation (シェーダーコンパイル)の基本的な処理フローと仕組みを日本語表記で分かりやすく図解したインフォグラフィック
詳細な仕組みと動作原理
Unityの設定(Shader Compilation)で非同期コンパイル(Asynchronous Shader Compilation)を有効にし、コンパイル中もエディタをフリーズさせずにダミーシェーダーで仮描画させて作業を継続させます。