Unityでは、通常、シェーダープログラムは HLSL で書きます。HLSL コードを シェーダーアセット に加えるには、シェーダコードブロック の中にコードを入れます。
このページには、シェーダーコードブロックの使用に関する情報が含まれています。HLSL 自体の書き方については、Unity での HLSL を参照してください。
ノート: Unity は他の言語でシェーダープログラムを書くこともサポートしていますが、これは一般的には必要ありませんし、推奨されていません。詳細については、シェーダーの作成 を参照してください。
機能 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムスクリプタブルレンダーパイプライン |
---|---|---|---|---|
HLSLPROGRAM | はい | はい | はい | はい |
HLSLINCLUDE | はい | はい | はい | はい |
CGPROGRAM | はい | なし | なし | 可 SRP Core パッケージを使用するカスタムレンダーパイプラインとの互換性はありません。 |
CGINCLUDE | はい | なし | なし | 可 SRP Core パッケージを使用するカスタムレンダーパイプラインとの互換性はありません。 |
HLSL コードを追加するには、以下のタイプのシェーダーコードブロックを使用できます。
どれをいつ使用するかを理解するには、プレフィックス (HLSL
または CG
) とサフィックス (PROGRAM
または INCLUDE
) の両方を理解する必要があります。
HLSL
または CG
で始まるブロックの違いは以下の通りです。
CG
are older. They include several of Unity’s built-in shader include files by default, which can be convenient if you need this functionality. The built-in includes are only compatible with the Built-in Render Pipeline.HLSL
のプレフィックスがついたシェーダーコードブロックは新しいものです。これらはデフォルトでは Unity のビルトインシェーダーのインクルードファイルを含んでいません。そのため、使用したいライブラリコードは手動で加える必要があります。これらは、あらゆるレンダーパイプラインでの使用に適しています。For information on Unity’s built-in shader include files, see Built-in shader include files.
PROGRAM
または INCLUDE
で終わるブロックの違いは以下の通りです。
PROGRAM
で終わるシェーダーコードブロックは シェーダープログラムブロック と呼ばれます。シェーダープログラムを書くためにこれを使います。HLSL シェーダーコードをこれらのブロックの中に書き、ShaderLab コードの Pass ブロックの中に配置します。INCLUDE
で終わるシェーダーコードブロックは シェーダーインクルードブロック と呼ばれます。これらを使用して、同じソースファイル内のシェーダープログラムのブロック間で共通のコードを共有します。HLSL シェーダーコードをこれらのブロックの中に書き、ShaderLab コードの Pass、 SubShader、Shader のいずれかのブロックの中に配置します。シグネチャ | 機能 |
---|---|
HLSLPROGRAM [HLSL で書かれたシェーダープログラムのソースコード] ENDHLSL
|
このシェーダープログラムブロックを含む Pass に HLSL シェーダープログラムを追加します。Unity のビルトインシェーダーのインクルードファイルは含まれません。 |
CGPROGRAM [HLSL で書かれたシェーダープログラムのソースコード] ENDHLSL
|
Adds the HLSL shader program to the Pass that includes this shader program block. Includes several of Unity’s built-in shader include files by default, enabling you to use built-in variables and functions. |
Shader "Examples/ExampleShader"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "LightMode" = "ExampleLightModeTagValue" }
// レンダー状態を設定する ShaderLab コマンドをここに記述
HLSLPROGRAM
// HLSL シェーダーコードをここに記述
ENDHLSL
}
}
}
シグネチャ | 機能 |
---|---|
HLSLINCLUDE [共有したい HLSL コード] ENDHLSL
|
Unity は、このソースファイル内の任意の場所の HLSLPROGRAM ブロックで定義されるすべてのシェーダープログラムにこのコードを加えます。 |
CGINCLUDE [共有したい HLSL コード] ENDCG
|
Unity は、このソースファイル内の任意の場所の CGPROGRAM ブロックで定義されるすべてのシェーダープログラムにこのコードを加えます。 |
Shader "Examples/ExampleShader"
{
SubShader
{
HLSLINCLUDE
// HLSL code that you want to share goes here
ENDHLSL
Pass
{
Name "ExampleFirstPassName"
Tags { "LightMode" = "ExampleLightModeTagValue" }
// レンダー状態を設定する ShaderLab コマンドをここに記述
HLSLPROGRAM
// この HLSL シェーダープログラムには、上記の HLSLINCLUDE ブロックの内容が自動的に含まれます
// HLSL シェーダーコードをここに記述
ENDHLSL
}
Pass
{
Name "ExampleSecondPassName"
Tags { "LightMode" = "ExampleLightModeTagValue" }
// レンダー状態を設定する ShaderLab コマンドをここに記述
HLSLPROGRAM
// この HLSL シェーダープログラムには、上記の HLSLINCLUDE ブロックの内容が自動的に含まれます
// HLSL シェーダーコードをここに記述
ENDHLSL
}
}
}
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.