Version: Unity 6.0 (6000.0)
言語 : 日本語
カスタムシェーダーでのサブシェーダーの追加
UsePass コマンドによるシェーダーパスのインクルード

カスタムシェーダーへのシェーダーパスの追加

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

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

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

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

また、UsePassGrabPass コマンドを使って、2 つの特別なタイプのパスを定義することもできます。これらのコマンドの詳細については、ShaderLab コマンド:UsePass または ShaderLab コマンド:GrabPass を参照してください。

シェーダーパスの命名

パスは名前を持つことができます。UsePass コマンドや、いくつかの C# API では、名前でパスを参照する必要があります。パスの名前は、フレームデバッガー ツールに表示されます。

ShaderLab でパスに名前を割り当てるには、Name ブロックを Pass ブロックの中に配置します。

内部的には、Unity は名前を大文字に変換します。ShaderLab コードで名前を参照する場合は、大文字のバリアントを使用する必要があります。例えば、値が “example” の場合、EXAMPLE として参照する必要があります。

同じ SubShader 内の複数のパスが同じ名前の場合、Unity はコードの最初のパスを使用します。

C# スクリプトでのパス名の使用

C# スクリプトからパスの名前にアクセスするには、Material.FindPassMaterial.GetPassNameShaderData.Pass.Name などの API を使用します。

注意Material.GetShaderPassEnabledMaterial.SetShaderPassEnabled は、名前でパスを参照するのではなく、LightMode タグ の値を使ってパスを参照します。

このサンプルコードは、1 つの SubShader を含むシェーダーオブジェクトを作成するための構文を示しています。SubShader には 1 つのパスが含まれます。

Shader "Examples/SinglePass"
{
    SubShader
    {
        Pass
        {                
              Name "ExamplePassName"
              Tags { "ExampleTagKey" = "ExampleTagValue" }

              // ShaderLab commands go here.

              // HLSL code goes here.
        }
    }
}

追加リソース

カスタムシェーダーでのサブシェーダーの追加
UsePass コマンドによるシェーダーパスのインクルード