Version: 2021.2
言語: 日本語
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

Did you find this page useful? Please give it a rating:

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