Version: 2021.3
言語: 日本語
ShaderLab: LOD 値を SubShader に割り当てる
ShaderLab: 名前をパスに割り当てる

ShaderLab: パスの定義

ShaderLab で Pass (パス) を定義するには、Pass ブロックを使用します。このページには、 Pass ブロックの使用に関する情報が記載されています。シェーダーオブジェクトの仕組みや、シェーダーオブジェクト、サブシェーダー、パスの関係については、シェーダーの基礎概念 を参照してください。

概要

パスは、シェーダーオブジェクトの基本要素です。GPU の状態や、GPU 上で動作するシェーダープログラムを設定するための命令が含まれています。

単純なシェーダーオブジェクトには 1 つのパスしか含まれない場合がありますが、より複雑なシェーダーは複数のパスを含むことができます。別々のパスを使用して、異なる動作を持つシェーダーオブジェクトの部分を定義できます。例えば、レンダー状態の変更を必要とする部分、異なるシェーダープログラム、または異なる LightMode パスタグなどです。

ノート: スクリプタブルレンダーパイプラインを基本にしたレンダーパイプラインでは、RenderStateBlock を使って GPU でレンダー状態を変更することができ、特にパスを必要としません。

レンダーパイプラインの互換性

機能名 ビルトインレンダーパイプライン ユニバーサルレンダーパイプライン (URP) HD レンダーパイプライン (HDRP) カスタム SRP
ShaderLab: Pass ブロック あり あり あり あり

Pass ブロックの使用

ShaderLab で通常の Pass ブロックを定義するには、Pass ブロックを SubShader ブロック内に配置します。

Pass ブロック内では、以下が可能です。

また、UsePassGrabPass コマンドを使って、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 コードをここに記述
        }
    }
}
ShaderLab: LOD 値を SubShader に割り当てる
ShaderLab: 名前をパスに割り当てる