Unity は、対象のディレクティブが通常のインクルードファイルに指定されていれば、標準の HLSL に含まれるすべての #pragma ディレクティブをサポートします。これらのディレクティブの詳細については、HLSL のドキュメント: pragma ディレクティブ を参照してください。
サーフェスシェーダー を書く場合は、このディレクティブを使って サーフェス関数 として使用する関数をコンパイラーに指示し、その関数にデータを渡します。
| ステートメント | 機能 |
|---|---|
#pragma surface <surface function> <lighting model> <optional parameters> |
指定された名前の関数をサーフェスシェーダーとしてコンパイルし、与えられたライティングモデルで動作させます。詳細については、サーフェスシェーダー を参照してください。 |
通常のグラフィックスシェーダーを書いている場合は、これらのディレクティブを使って、シェーダーの各ステージで使用する関数をコンパイラーに伝えます。#pragma vertex および #pragma fragment ディレクティブは必須ですが、その他のステージは任意です。
| ステートメント | 機能 |
|---|---|
#pragma vertex <name> |
指定された名前の関数を頂点シェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このディレクティブは、通常のグラフィックスシェーダーでは必須です。 |
#pragma fragment <name> |
指定された名前の関数をフラグメントシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このディレクティブは、通常のグラフィックスシェーダーでは必須です。 |
#pragma geometry <name> |
指定された名前の関数をジオメトリシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このオプションは自動的に #pragma require geometry をオンにします。詳細については、HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。ノート: Metal はジオメトリシェーダをサポートしません。 |
#pragma hull <name> |
指定された名前の関数を DirectX 11 ハルシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。これにより、自動的に #pragma require tessellation が追加されます。詳細については、HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。 |
#pragma domain <name> |
指定された名前の関数を DirectX 11 ドメインシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このオプションは自動的に #pragma require tessellation をオンにします。詳細については、HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。 |
これらのディレクティブを使って、シェーダーコンパイラーに シェーダーバリアントとキーワード の扱い方を伝えます。詳細は、HLSL のシェーダーキーワードの宣言と使用 を参照してください。
| ディレクティブ | 説明 |
|---|---|
#pragma multi_compile <keywords> |
キーワードのコレクションを宣言します。コンパイラーは、ビルドにすべてのキーワードを含めます。_local などのサフィックスを使用して、追加オプションを設定できます。詳細とサポートされるサフィックスのリストは、HLSL のシェーダーキーワードの宣言と使用 を参照してください。 |
#pragma shader_feature <keywords> |
キーワードのコレクションを宣言します。コンパイラーは、使用されていないキーワードをビルドから除外します。_local などのサフィックスを使用して、追加オプションを設定できます。詳細とサポートされるサフィックスのリストは、HLSL のシェーダーキーワードの宣言と使用 を参照してください。 |
#pragma hardware_tier_variants <values> |
ビルトインレンダーパイプラインのみ。指定のグラフィックス API 用にコンパイルする際に、グラフィックス階層 のキーワードを追加します。詳細は、グラフィックス階層 を参照してください。 |
#pragma skip_variants <list of keywords> |
指定したキーワードを削除します。 |
以下のディレクティブを使用して、シェーダーが特定の GPU 機能を必要とすることをコンパイラーに伝えます。
| ステートメント | 機能 |
|---|---|
#pragma target <value> |
このシェーダープログラムと互換性のある最小のシェーダーモデル。<value> を有効な値に置き換えてください。有効な値のリストについては、シェーダーのコンパイル:HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。 |
#pragma require <value> |
このシェーダーと互換性のある最小の GPU 機能。<value> を有効な値、または、スペースで区切った複数の有効な値に置き換えてください。有効な値のリストについては、シェーダーのコンパイル:HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。 |
以下のディレクティブを使用して、特定のグラフィックス API 用のコードを含む、または除外するように指示します。
| ステートメント | 機能 |
|---|---|
#pragma only_renderers <value> |
指定されたグラフィックス API に対してのみ、このシェーダープログラムをコンパイルします。<values> をスペースで区切られた有効な値のリストに置き換えてください。詳細と有効な値のリストについては、HLSLで特定のグラフィックス API とプラットフォームを対象にする方法 を参照してください。 例えば、 #pragma only_renderers glcore はデスクトップ OpenGL に対してのみコンパイルします。ES 3 ターゲットのように、これもすべてのデスクトップ OpenGL バージョンを含むように設定されています。基本シェーダーは OpenGL 2.x に対応しますが、シェーダーモデル 5.0 の機能を要するシェーダーには OpenGL 4.2+ が必要です。 |
#pragma exclude_renderers <value> |
指定されたグラフィックス API に対して、このシェーダープログラムをコンパイルしません。<value> をスペースで区切られた有効な値のリストに置き換えてください。詳細と有効な値のリストについては、HLSLで特定のグラフィックス API とプラットフォームを対象にする方法 を参照してください。 |
| ステートメント | 機能 |
|---|---|
#pragma instancing_options <options> |
指定されたオプションを使って、このシェーダーで GPU インスタンシングを有効にします。詳細については、GPU インスタンシング を参照してください。 |
#pragma once |
ファイルにこのディレクティブを記述して、コンパイラーがこのファイルをシェーダープログラムに 1 回だけ含めるようにします。 注意Unity は、このディレクティブを、キャッシングシェーダープリプロセッサー が有効な場合にのみサポートします。 |
#pragma enable_d3d11_debug_symbols |
サポートされているグラフィックス API のシェーダーデバッグシンボルを生成し、すべてのグラフィックス API の最適化を無効にします。外部ツールでシェーダーコードをデバッグするために使用します。 Unity は、Vulkan、DirectX 11 および 12、サポートされるコンソールプラットフォーム向けのデバッグシンボルを生成します。 注意:これを使用すると、ファイルサイズが大きくなり、シェーダーのパフォーマンスが低下します。シェーダーのデバッグを終了し、アプリケーションの最終ビルドを作成する準備ができたら、シェーダーソースコードからこの行を削除し、シェーダーを再コンパイルしてください。 |
#pragma skip_optimizations <value> |
指定されたグラフィックス API に対して、強制的に最適化をオフにします。<values> をスペースで区切られた有効な値のリストに置き換えてください。有効な値のリストについては、HLSLで特定のグラフィックス API とプラットフォームを対象にする方法 を参照してください。 |
#pragma hlslcc_bytecode_disassembly |
逆アセンブルされた HLSLcc バイトコードを変換したシェーダーに埋め込みます。 |
#pragma disable_fastmath |
NaN 処理を含む正確な IEEE 754 規則を有効にします。現在、これは Metal プラットフォームにのみ影響します。 |
#pragma editor_sync_compilation |
同期コンパイルを強制します。これは Unity エディターにのみ影響します。詳細については、非同期シェーダーコンパイル を参照してください。 |
#pragma enable_cbuffer |
現在のプラットフォームが定数バッファをサポートしていない場合でも、HLSLSupport から CBUFFER_START(name) と CBUFFER_END マクロを使用する場合に cbuffer(name) を放出します。 |