Version: Unity 6.0 (6000.0)
言語 : 日本語
ShaderLab のパスタグに関するリファレンス
ShaderLab の GPU レンダーステートコマンドのリファレンス

ShaderLab のシェーダーコードブロックのリファレンス

このページには、シェーダーコードブロックの使用に関する情報が含まれています。HLSL 自体の書き方については、Unity の HLSL を参照してください。

HLSLPROGRAM と CGPROGRAM

レンダーパイプラインの互換性

機能 ユニバーサルレンダーパイプライン (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 の ビルトインシェーダーのインクルードファイル のいくつかはデフォルトで含まれ、ビルトイン変数と関数を使用することができます。

HLSLINCLUDE と CGINCLUDE

機能 ユニバーサルレンダーパイプライン (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 のプレフィックス

HLSL または CG で始まるブロックの違いは以下の通りです。

  • CG のプレフィックスがついたシェーダーコードブロックは古いものです。これらは Unity の ビルトインシェーダーのインクルードファイル のいくつかをデフォルトで含んでおり、この機能が必要な場合には便利です。ビルトインのインクルードはビルトインレンダーパイプラインとのみ互換性があります。
  • HLSL のプレフィックスがついたシェーダーコードブロックは新しいほうです。デフォルトでは Unity のビルトインシェーダーのインクルードファイルは含まれていないため、使用したいライブラリコードを手動で加える必要があります。すべてのレンダーパイプラインでの使用に適しています。

Unity のビルトインシェーダーのインクルードファイルについては、ビルトインシェーダーのインクルードファイル を参照してください。

PROGRAM と INCLUDE のサフィックス

PROGRAM または INCLUDE で終わるブロックの違いは以下の通りです。

  • PROGRAM で終わるシェーダーコードブロックは シェーダープログラムブロック と呼ばれます。シェーダープログラムを書くためにこれを使います。HLSL シェーダーコードをこれらのブロックの中に書き、ShaderLab コードの Pass ブロックの中に配置します。
  • INCLUDE で終わるシェーダーコードブロックは シェーダーインクルードブロック と呼ばれます。同じソースファイル内のシェーダープログラムブロック間で共通コードを共有するためにこれを使います。共有する HLSL シェーダーコードをこれらのブロックの中に書き、ShaderLab コードの Pass、SubShader、Shader ブロックの中に配置します。これは、HLSL コードで include を使用するのと同じように機能します。

追加リソース

ShaderLab のパスタグに関するリファレンス
ShaderLab の GPU レンダーステートコマンドのリファレンス