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 コードをここに記述
}
}
}