Version: 2021.1
ShaderLab: タグを SubShader に割り当てる
ShaderLab: パスの定義

ShaderLab: LOD 値を SubShader に割り当てる

このページには、ShaderLab コードの LOD ブロックを使用して、LOD 値を SubShader に割り当てるための情報が記載されています。

概要

LOD 値をサブシェーダーに割り当てることができます。この値は、計算負荷を示します。

ランタイムでは、シェーダーの LOD 値を単一のシェーダーオブジェクト、またはすべてのシェーダーオブジェクトに設定することができます。Unity は LOD 値が低いサブシェーダーを優先します。Unity がサブシェーダーを使用するタイミングをどのように選択するかについては、シェーダーオブジェクト: レンダリング時の操作順序 を参照してください。

ノート: このテクニックはメッシュをレンダリングするための LOD 機能にちなんで名付けられていますが、重要な違いがあることに注意してください。シェーダー LOD はカメラからの距離とは関係がなく、Unity はシェーダー LOD を自動的に計算しません。最大のシェーダー LOD は手動で設定する必要があります。

概要

この手法を使用して、さまざまなハードウェアでシェーダーのパフォーマンスを微調整できます。これは、サブシェーダーが理論的にはハードウェアによってサポートされていても、ハードウェアがそれをうまく実行できない場合に便利です。

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

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

LODブロックの使用

ShaderLab では、LOD ブロックを SubShader ブロック内に配置することで、SubShader に LOD 値を割り当てます。

シグネチャ 機能
LOD [value] LOD 値を SubShader に割り当てます。

ノート: Shader ブロックの中では、LOD の降順で SubShader を置かなければなりません。例えば、LOD 値が200、100、500 の SubShader がある場合、LOD 値が 500 の SubShader を最初に置き、次に LOD 値が 200 の SubShader、その次に LOD 値が 100 の SubShader を置く必要があります。これは、Unity が最初に見つけた有効な SubShader を選択するためです。そのため、LOD の低いものを最初に見つけると、常にそれを使用します。

C# コードによる SubShader の LOD 値の利用

指定の Shader オブジェクトにシェーダー LOD を設定するには、Shader.maximumLOD を使用します。すべてのシェーダーオブジェクトのシェーダー LOD を設定するには、Shader.globalMaximumLOD を使用します。デフォルトでは、最大 LOD はありません。

コード例

このサンプルコードでは、LOD 値が 200 のものと 100 のものの 2 つの SubShader を含むシェーダーオブジェクトを作成しています。SubShader は、LOD 値の降順に並んでいます。

Shader "Examples/ExampleLOD"
{
    SubShader
    {
        LOD 200

        Pass
        {                
              // Pass を定義するコードの残りをここに記述
        }
    }

    SubShader
    {
        LOD 100

        Pass
        {                
              // Pass を定義するコードの残りをここに記述
        }
    }
}

Unity のビルトインシェーダーの LOD 値

ビルトインレンダーパイプラインでは、Unity のビルトインシェーダーは以下の LOD 値を持ちます。

LOD 値 シェーダー名
100 Unlit/Texture
Unlit/Color
Unlit/Transparent
Unlit/Transparent Cutout
300 Standard
Standard (Specular Setup)
Autodesk Interactive

古いシェーダーの LOD 値

ビルトインレンダーパイプラインでは、Unity の古い ビルトインシェーダー は以下の LOD 値を持ちます。

LOD 値 シェーダー名
100 VertexLit
150 Decal
Reflective VertexLit
200 Diffuse
250 Diffuse Detail
Reflective Bumped Unlit
Reflective Bumped VertexLit
300 Bumped
Specular
400 Bumped Specular
500 Parallax
600 Parallax Specular
ShaderLab: タグを SubShader に割り当てる
ShaderLab: パスの定義