Version: Unity 6.0 (6000.0)
言語 : 日本語
非同期シェーダーコンパイルの概要
非同期シェーダーコンパイルの検出

シェーダーの非同期コンパイルを有効化/無効化

シェーダーの非同期コンパイルは、デフォルトで有効になっています。

シェーダーの非同期コンパイルを有効または無効にするには、以下を行います。

  1. Edit > Project Settings > Editor の順に移動します。
  2. エディター設定の下の方の Shader Compilation で、Asynchronous Shader Compilation チェックボックスのオン/オフを切り替えます。

注意この方法で非同期シェーダーコンパイルの有効/無効を切り替えると、デフォルトでは Scene ビューと Game ビューにのみ影響します。エディターの他の部分で使用したい場合は、カスタムエディターツールと非同期シェーダーコンパイルを参照してください。

特定のレンダリング呼び出しのための非同期シェーダーコンパイルを有効化/無効化

C# スクリプトで特定のレンダリングコマンドの非同期シェーダーコンパイルを有効または無効にすることができます。

以下の手順は、immediate (即時) スコープと CommandBuffer スコープで機能の有効/無効を切り替える方法を示しています。

即時スコープ

immediate (即時) スコープでは、ShaderUtil.allowAsyncCompilation を使用することができます。

手順は以下のとおりです。

  1. ShaderUtil.allowAsyncCompilation の現在のステートを変数に格納します。
  2. レンダリングコマンドを呼び出す前に ShaderUtil.allowAsyncCompilationfalse に設定します。
  3. レンダリングコマンドを呼び出します。
  4. レンダリングコマンドを呼び出した後、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 スコープ

CommandBuffer スコープでは、ShaderUtil.SetAsyncCompilationShaderUtil.RestoreAsyncCompilation を使用できます。

  1. レンダリングコマンドを呼び出す直前に ShaderUtil.SetAsyncCompilation を呼び出し、false に設定します。CommandBuffer の後続のコマンドでは、非同期コンパイルはできません。
  2. レンダリングコマンドを CommandBuffer に追加します。
  3. レンダリングコマンドの後で 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# を使用して有効にすることができます。

有効にするには、特定のレンダリング呼び出しで非同期シェーダーコンパイルを有効化します。

非同期シェーダーコンパイルの概要
非同期シェーダーコンパイルの検出
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961