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"
}
異なるレンダーパイプラインに対応するカスタムシェーダーの例については、カスタムシェーダーの例 を参照してください。