Version: 2020.1
言語: 日本語
詳細な ShaderLab トピック
Asynchronous shader compilation in the Unity Editor

シェーダーのコンパイル

異なるプラットフォームは、シェーダープログラムのコンパイルに異なるシェーダーコンパイラーを使用します。以下はその例です。

  • DirectX を使用するプラットフォームは、Microsoft の FXC HLSL コンパイラーを使用します。
  • OpenGL (Core & ES) を使用するプラットフォームは、Microsoft の FXC HLSL コンパイラーを使用し、その後、HLSLcc を使用して、バイトコードを GLSL への変換を行います。
  • Metal を使用するプラットフォームは、Microsoft の FXC HLSL コンパイラーを使用し、その後、HLSLcc を使用して、バイトコードを Metal に変換しています。
  • Vulkan を使用するプラットフォームは、Microsoft の FXC HLSL コンパイラーを使用し、その後、HLSLcc を使用して、バイトコードを SPIR-V に変換します。
  • コンソールプラットフォームなどその他のプラットフォームでは、それぞれのコンパイラーを使用します。
  • サーフェスシェーダーステップ は、コード生成解析ステップのために HLSL と MojoShader を使用します。

定義済みのシェーダーマクロ を使って、Unity が使用しているコンパイラを特定することができます。1つのコンパイラでしかサポートされていないHLSL構文を使用している場合や、コンパイラのバグを回避するために、これを使用するとよいでしょう。

You can configure various shader compiler settings using [SL-Programs](compilation directives).

Caching Shader Preprocessor (Experimental)

シェーダーのコンパイルにはいくつかのステップがあります。最初のステップの1つは、シェーダソースのプリプロセスです。デフォルトでは、Unityはプラットフォームコンパイラのプリプロセッサーを使用してこのステップを実行しますが、これをオーバーライドして Unity の Caching Shader Preprocessor (キャッシングシェーダープリプロセッサー) を使用してプリプロセッサーを実行することができます。キャッシングシェーダープリプロセッサーは、プラットフォームのコンパイラーが使用するデフォルトのプリプロセッサーよりも最大 25% 高速です。

キャッシングシェーダープリプロセッサーは、中間的な前処理データをキャッシュし、シェーダーのインポートとコンパイルの時間を短縮します。エディターは、このキャッシュデータを再利用するため、インクルードファイルのコンテンツが変更された際に、インクルードファイルを解析する必要があるだけです。これにより、同じシェーダーの複数のバリアントをより効率的にコンパイルすることができます。キャッシングシェーダープリプロセッサーを有効にする際に最も著しい効果を発揮するのは、プロジェクト内のシェーダーが共通のインクルードファイルを大量に使用している場合です。

なお、キャッシングシェーダープリプロセッサーは実験的なもので、現在も積極的に開発が進められています。この実験的な機能に関するフィードバックは、Unity forum にお寄せください。

Editor settings ウィンドウの Shader Compilation セクションにある Caching Shader Preprocessor (Experimental) チェックボックスを使ってキャッシングシェーダープリプロセッサーを有効または無効にすることができます。また、EditorSettings.cachingShaderPreprocessor API を使用して、C# スクリプトでこの機能を有効または無効にすることもできます。

詳細な ShaderLab トピック
Asynchronous shader compilation in the Unity Editor