Version: 2020.3
言語: 日本語
HLSL でシェーダーモデルと GPU 機能を特定する
HLSL のシェーダーキーワードの宣言と使用

HLSLで特定のグラフィックス API とプラットフォームを対象にする方法

#pragma ディレクティブ の中には、特定のグラフィックス API やプラットフォームを対象とするためのパラメーターをとるものがあります。このページでは、これらのディレクティブの使用に関する情報と、有効なパラメーター値のリストを提供します。

グラフィックス API を含むかどうか

デフォルトでは、Unity は現在のビルドターゲットに対して、リストにある各グラフィックス API 用のすべてのシェーダープログラムをコンパイルします。しかし、使用する機能が一部のプラットフォームでのみサポートされている場合など、特定のグラフィックス API に対してのみ特定のシェーダープログラムをコンパイルしたい場合があります。

指定する API に対してのみシェーダプログラムをコンパイルするには、#pragma only_renderers ディレクティブを使います。スペースで区切って複数の値を渡すことができます。

この例では、Metal および Vulkan 専用のシェーダーをコンパイルする方法を示します。

# pragma only_renderers metal vulkan

シェーダコードを特定のコンパイラーによるコンパイルから除外するには、#pragma exclude_renderers ディレクティブを使用します。スペースで区切って複数の値を渡すことができます。

この例では、Metal および Vulkan 用のコンパイルからシェーダーを除外する方法を示します。

# pragma exclude_renderers metal vulkan

指定するグラフィックス API に対応するグラフィックスティアのシェーダーバリアントの生成

ビルトインレンダーパイプラインでは、特定の条件の下で、グラフィックスティアに対応する シェーダーバリアント を自動的に生成することができます。また、必要な場合にこれらのバリアントを生成するように Unity に強制することができます。

これを行うには、#pragma hardware_tier_variants プリプロセッサーディレクティブを使用し、ティアシェーダーバリアントを生成したいグラフィックス API を指定します。

例えば、以下は Unity に対して、Metal 用のティアシェーダバリアントをコンパイルするように指示しています。

# pragma hardware_tier_variants metal

有効なパラメーター値のリスト

サポートされている値は以下の通りです。

  説明
d3d11 DirectX 11 機能レベル 10 以上、DirectX 12
gles OpenGL ES 2.0、WebGL 1.0
gles3 OpenGL ES 3.x、WebGL 2.0
ps4 PlayStation 4
xboxone Xbox One と GameCore、DirectX 11 と DirectX 12
metal iOS/Mac Metal
glcore OpenGL 3.x、OpenGL 4.x
vulkan Vulkan
switch Nintendo Switch
ps5 PlayStation 5
HLSL でシェーダーモデルと GPU 機能を特定する
HLSL のシェーダーキーワードの宣言と使用