Version: 2020.3
言語: 日本語
シェーダーキーワード
マテリアルインスペクターでのシェーダーキーワードの使用

C# スクリプトによるシェーダーキーワードの使用

ランタイムにシェーダーキーワードを有効または無効にすることができます。シェーダーキーワードを有効または無効にすると、Unity はレンダリングに適切なシェーダーバリアントを使用します。

ランタイムにシェーダーバリアントを変更すると、パフォーマンスに影響を与えることがあります。キーワードの変更により、そのバリアントを初めて使用する必要がある場合、グラフィックスドライバーがシェーダープログラムを準備する間に不具合が発生する可能性があります。これは、大規模または複雑なシェーダーの場合や、グローバルなキーワードの状態変更が複数のシェーダーに影響する場合に、特に問題となります。これを避けるためには、シェーダーのロードと事前準備の方法でキーワードバリアントを考慮するようにしてください。詳細については、シェーダーのロード を参照してください。

ローカルシェーダーキーワードとグローバルシェーダーキーワード

Unity では、 ローカルシェーダーキーワードグローバルシェーダーのキーワード があります。

  • ローカルシェーダーキーワードは、個々のシェーダーまたはコンピュートシェーダーに影響を与えます。
  • グローバルシェーダーキーワードは、同時に複数のシェーダーやコンピュートシェーダーに影響を与えます。

シェーダーキーワードを宣言する際に、そのスコープを設定します。詳しくは、シェーダーキーワード: グローバルスコープとローカルスコープ を参照してください。

グローバルシェーダーキーワードの有効化、無効化、状態の確認

グローバルシェーダーキーワードを有効または無効にするには、Shader.EnableKeyword またはShader.DisableKeyword を使用します。

コマンドバッファでグローバルキーワードを有効または無効にするには、CommandBuffer.EnableKeyword 、または CommandBuffer.DisableKeyword を使用します。

状態を確認するには、[Shader.IsKeywordEnabled] を使用します。

ローカルシェーダーキーワードの有効化、無効化、状態の確認

グラフィックスシェーダーのローカルシェーダーキーワードを有効または無効にするには、Material.EnableKeyword または Material.DisableKeyword を使用します。状態を確認するには、Material.IsKeywordEnabled を使用します。

コンピュートシェーダーのローカルシェーダーキーワードを有効または無効にするには、ComputeShader.EnableKeyword または ComputeShader.DisableKeyword を使用します。状態を確認するには、ComputeShader.IsKeywordEnabled を使用します。

ランタイムにキーワードのセットを管理する

シェーダーをオーサリングする際には、キーワードをセットで宣言します。セットには、互いに排他的なキーワードが含まれます。

ランタイムでは、Unity はこれらのセットの概念を持ちません。Unity では、任意のキーワードを個別に有効または無効にすることができ、あるキーワードを有効または無効にしても、他のキーワードの状態には影響しません。つまり、同じセットから複数のキーワードを有効にしたり、セット内のすべてのキーワードを無効にしたりすることが可能です。

セット内の複数のキーワードが有効になっている場合や、セット内のキーワードが 1 つも有効になっていない場合、Unity は “十分に適合する” と考えられる (1 つの) バリアントを選択します。正確に何が起こるかについては保証されておらず、意図しない結果になる可能性があります。キーワードの状態を慎重に管理して、このような状況を避けることが最善の策です。

シェーダーキーワード
マテリアルインスペクターでのシェーダーキーワードの使用