異なるプラットフォームは、シェーダープログラムのコンパイルに異なるシェーダーコンパイラーを使用します。以下はその例です。
定義済みのシェーダーマクロ を使って、Unity が使用しているコンパイラを特定することができます。1つのコンパイラでしかサポートされていないHLSL構文を使用している場合や、コンパイラのバグを回避するために、これを使用するとよいでしょう。
You can configure various shader compiler settings using [SL-Programs](compilation directives).
シェーダーのコンパイルにはいくつかのステップがあります。最初のステップの1つは、シェーダソースのプリプロセスです。デフォルトでは、Unityはプラットフォームコンパイラのプリプロセッサーを使用してこのステップを実行しますが、これをオーバーライドして Unity の Caching Shader Preprocessor (キャッシングシェーダープリプロセッサー) を使用してプリプロセッサーを実行することができます。キャッシングシェーダープリプロセッサーは、プラットフォームのコンパイラーが使用するデフォルトのプリプロセッサーよりも最大 25% 高速です。
キャッシングシェーダープリプロセッサーは、中間的な前処理データをキャッシュし、シェーダーのインポートとコンパイルの時間を短縮します。エディターは、このキャッシュデータを再利用するため、インクルードファイルのコンテンツが変更された際に、インクルードファイルを解析する必要があるだけです。これにより、同じシェーダーの複数のバリアントをより効率的にコンパイルすることができます。キャッシングシェーダープリプロセッサーを有効にする際に最も著しい効果を発揮するのは、プロジェクト内のシェーダーが共通のインクルードファイルを大量に使用している場合です。
なお、キャッシングシェーダープリプロセッサーは実験的なもので、現在も積極的に開発が進められています。この実験的な機能に関するフィードバックは、Unity forum にお寄せください。
Editor settings ウィンドウの Shader Compilation セクションにある Caching Shader Preprocessor (Experimental) チェックボックスを使ってキャッシングシェーダープリプロセッサーを有効または無効にすることができます。また、EditorSettings.cachingShaderPreprocessor API を使用して、C# スクリプトでこの機能を有効または無効にすることもできます。