ShaderLab でシェーダーオブジェクトを定義するには、Shader ブロックを使用します。このページでは、Shader ブロックの使用に関する情報を掲載しています。
シェーダーオブジェクトの仕組みや、シェーダーオブジェクト、サブシェーダー、パスの関係については、シェーダーオブジェクトの基礎 を参照してください。
シェーダーオブジェクトは Unity 固有の概念で、シェーダープログラムやその他の情報のラッパーです。同一ファイル内に複数のシェーダープログラムを定義し、それらをどのように使用するかを Unity に伝えることができます。
シェーダーオブジェクトはネスト構造になっており、サブシェーダーやパスと呼ばれる構造に情報を整理します。
| 機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP |
|---|---|---|---|---|
| ShaderLab: シェーダーブロック | あり | あり | あり | あり |
Shader ブロック内で、以下を行うことができます。
Properties ブロックを使って、マテリアルのプロパティを定義します。ShaderLab: マテリアルプロパティの定義 を参照してください。SubShader ブロックを使用して、1 つまたは複数のサブシェーダーを定義します。ShaderLab: SubShader の定義 を参照してください。Fallback ブロックを使用して、フォールバックのシェーダーオブジェクトを割り当てます。ShaderLab: フォールバックの割り当て を参照してください。| 署名 | 機能 |
|---|---|
Shader "<name>"{<optional: Material properties><One or more SubShader definitions><optional: custom editor><optional: fallback>}
|
指定された名前のシェーダーオブジェクトを定義します。 |
Unity 5.0 以前では、シェーダーの機能の一部はそのパスと名前によって決定されました。今でも Unity の古いシェーダー はそのように動作します。これらのシェーダーの名前を変更すると、その機能に影響を与える可能性があります。
このサンプルコードは、シェーダーオブジェクトの基本的な構文と構造を示しています。この例のシェーダーオブジェクトは、1 つのパスを含む 1 つの SubShader を持っています。そのシェーダーオブジェクトは、Material プロパティ、CustomEditor、Fallbackを定義します。
Shader "Examples/ShaderSyntax"
{
CustomEditor = "ExampleCustomEditor"
Properties
{
// Material プロパティの宣言はここに記述
}
SubShader
{
// 残りの SubShader の定義はここに記述
Pass
{
// Pass 定義のコードはここに記述
}
}
Fallback "ExampleFallbackShader"
}
異なるレンダーパイプラインに対応するカスタムシェーダーの例については、カスタムシェーダーの例 を参照してください。