このページには、シェーダーコードブロックの使用に関する情報が含まれています。HLSL 自体の書き方については、Unity の HLSL を参照してください。
| 機能 | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムスクリプタブルレンダーパイプライン | ビルトインレンダーパイプライン |
|---|---|---|---|---|
| HLSLPROGRAM | はい | はい | はい | はい |
| CGPROGRAM | いいえ | いいえ | はい SRP Core パッケージを使用するカスタムレンダーパイプラインとは互換性がありません。 |
はい |
| シグネチャ | 機能 |
|---|---|
HLSLPROGRAM[source code for shader programs, written in HLSL]ENDHLSL
|
このシェーダープログラムブロックを含む Pass に HLSL シェーダープログラムを追加します。Unity のビルトインシェーダーのインクルードファイルは含まれません。 |
CGPROGRAM[source code for shader programs, written in HLSL]ENDCG
|
このシェーダープログラムブロックを含む Pass に HLSL シェーダープログラムを追加します。Unity の ビルトインシェーダーのインクルードファイル のいくつかはデフォルトで含まれ、ビルトイン変数と関数を使用することができます。 |
| 機能 | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムスクリプタブルレンダーパイプライン | ビルトインレンダーパイプライン |
|---|---|---|---|---|
| HLSLINCLUDE | はい | はい | はい | はい |
| CGINCLUDE | いいえ | いいえ | はい SRP Core パッケージを使用するカスタムレンダーパイプラインとは互換性がありません。 |
はい |
| シグネチャ | 機能 |
|---|---|
HLSLINCLUDE[HLSL code that you want to share]ENDHLSL
|
Unity は、このソースファイル内の任意の場所の HLSLPROGRAM ブロックで定義されるすべてのシェーダープログラムにこのコードを加えます。 |
CGINCLUDE[HLSL code that you want to share]ENDCG
|
Unity は、このソースファイル内の任意の場所の CGPROGRAM ブロックで定義されるすべてのシェーダープログラムにこのコードを加えます。 |
HLSL または CG で始まるブロックの違いは以下の通りです。
CG のプレフィックスがついたシェーダーコードブロックは古いものです。これらは Unity の ビルトインシェーダーのインクルードファイル のいくつかをデフォルトで含んでおり、この機能が必要な場合には便利です。ビルトインのインクルードはビルトインレンダーパイプラインとのみ互換性があります。HLSL のプレフィックスがついたシェーダーコードブロックは新しいほうです。デフォルトでは Unity のビルトインシェーダーのインクルードファイルは含まれていないため、使用したいライブラリコードを手動で加える必要があります。すべてのレンダーパイプラインでの使用に適しています。Unity のビルトインシェーダーのインクルードファイルについては、ビルトインシェーダーのインクルードファイル を参照してください。
PROGRAM または INCLUDE で終わるブロックの違いは以下の通りです。
PROGRAM で終わるシェーダーコードブロックは シェーダープログラムブロック と呼ばれます。シェーダープログラムを書くためにこれを使います。HLSL シェーダーコードをこれらのブロックの中に書き、ShaderLab コードの Pass ブロックの中に配置します。INCLUDE で終わるシェーダーコードブロックは シェーダーインクルードブロック と呼ばれます。同じソースファイル内のシェーダープログラムブロック間で共通コードを共有するためにこれを使います。共有する HLSL シェーダーコードをこれらのブロックの中に書き、ShaderLab コードの Pass、SubShader、Shader ブロックの中に配置します。これは、HLSL コードで include を使用するのと同じように機能します。