ShaderLab で Pass (パス) を定義するには、Pass ブロックを使用します。このページには、 Pass ブロックの使用に関する情報が記載されています。シェーダーオブジェクトの仕組みや、シェーダーオブジェクト、サブシェーダー、パスの関係については、シェーダーの基礎概念 を参照してください。
パスは、シェーダーオブジェクトの基本要素です。GPU の状態や、GPU 上で動作するシェーダープログラムを設定するための命令が含まれています。
単純なシェーダーオブジェクトには 1 つのパスしか含まれない場合がありますが、より複雑なシェーダーは複数のパスを含むことができます。別々のパスを使用して、異なる動作を持つシェーダーオブジェクトの部分を定義できます。例えば、レンダー状態の変更を必要とする部分、異なるシェーダープログラム、または異なる LightMode パスタグなどです。
ノート: スクリプタブルレンダーパイプラインを基本にしたレンダーパイプラインでは、RenderStateBlock を使って GPU でレンダー状態を変更することができ、特にパスを必要としません。
| 機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP |
|---|---|---|---|---|
| ShaderLab: Pass ブロック | あり | あり | あり | あり |
ShaderLab で通常の Pass ブロックを定義するには、Pass ブロックを SubShader ブロック内に配置します。
Pass ブロック内では、以下が可能です。
PackageRequirements ブロックを使用してパッケージ要件を指定します。これにより、Unity は必要なパッケージがインストールされている場合にのみ Pass を実行します。ShaderLab: パッケージ要件の指定 を参照してください。また、UsePass や GrabPass コマンドを使って、2 つの特別なタイプのパスを定義することもできます。これらのコマンドの詳細については、ShaderLab コマンド: UsePass またはShaderLab コマンド: GrabPass を参照してください。
| シグネチャ | 機能 |
|---|---|
Pass{<optional: name><optional: tags><optional: commands><optional: shader code>}
|
パスを定義します。 |
このサンプルコードは、1 つの SubShader を含むシェーダーオブジェクトを作成するための構文を示しています。SubShader には 1 つのパスが含まれます。
Shader "Examples/SinglePass"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "ExampleTagKey" = "ExampleTagValue" }
// ShaderLab コマンドをここに記述
// HLSL コードをここに記述
}
}
}