シェーダーの非同期コンパイルは、デフォルトで有効になっています。
シェーダーの非同期コンパイルを有効または無効にするには、以下を行います。
注意この方法で非同期シェーダーコンパイルの有効/無効を切り替えると、デフォルトでは Scene ビューと Game ビューにのみ影響します。エディターの他の部分で使用したい場合は、カスタムエディターツールと非同期シェーダーコンパイルを参照してください。
C# スクリプトで特定のレンダリングコマンドの非同期シェーダーコンパイルを有効または無効にすることができます。
以下の手順は、immediate (即時) スコープと CommandBuffer スコープで機能の有効/無効を切り替える方法を示しています。
immediate (即時) スコープでは、ShaderUtil.allowAsyncCompilation を使用することができます。
手順は以下のとおりです。
ShaderUtil.allowAsyncCompilation の現在のステートを変数に格納します。ShaderUtil.allowAsyncCompilation を false に設定します。ShaderUtil.allowAsyncCompilation を前のステートに戻します。以下は擬似コードの例です。
// Store the current state
bool oldState = ShaderUtil.allowAsyncCompilation;
// Disable async compilation
ShaderUtil.allowAsyncCompilation = false;
// Enter your rendering code that should never use the placeholder shader, for example UI elements or characters.
Graphics.RenderMesh(...);
// Restore the old state
ShaderUtil.allowAsyncCompilation = oldState;
CommandBuffer スコープでは、ShaderUtil.SetAsyncCompilation と ShaderUtil.RestoreAsyncCompilation を使用できます。
ShaderUtil.SetAsyncCompilation を呼び出し、false に設定します。CommandBuffer の後続のコマンドでは、非同期コンパイルはできません。Shader.Util.RestoreAsyncCompilation を呼び出し、非同期シェーダーコンパイルのステートを元に戻します。以下はその例です。
// Create the CommandBuffer
CommandBuffer cmd = new CommandBuffer();
// Disable async compilation for subsequent commands
ShaderUtil.SetAsyncCompilation(cmd, false);
/// Enter your rendering commands that should never use the placeholder shader, for example UI elements or characters.
cmd.DrawMesh(...);
// Restore the old state
ShaderUtil.RestoreAsyncCompilation(cmd);
特定のシェーダーオブジェクトの非同期シェーダーコンパイルを無効にするには、エディターで常に同期的にコンパイルを行うようにします。これは、レンダリングの開始時に常に存在するデータ生成シェーダーオブジェクトに適したオプションで、比較的短時間でコンパイルできます。高度なレンダリングを行う場合には、このオプションが必要になる可能性が高いでしょう。
シェーダーオブジェクトを強制的に同期コンパイルするには、シェーダーのソースコードに #pragma editor_sync_compilation ディレクティブを追加します。
注意: レンダリング中に新しいシェーダーバリアントが現れる複雑なシェーダーオブジェクトに対して、同期コンパイルを強制するべきではありません。エディターでのレンダリングが停止する可能性があります。
デフォルトでは、 非同期シェーダーコンパイルは Game ビューと Scene ビューで動作します。カスタムエディターツールで非同期シェーダーコンパイルを使用したい場合は、カスタムツールの C# を使用して有効にすることができます。
有効にするには、特定のレンダリング呼び出しで非同期シェーダーコンパイルを有効化します。