このページには、ShaderLab コードの LOD
ブロックを使用して、LOD 値を SubShader に割り当てるための情報が記載されています。
LOD 値をサブシェーダーに割り当てることができます。この値は、計算負荷を示します。
ランタイムでは、シェーダーの LOD 値を単一のシェーダーオブジェクト、またはすべてのシェーダーオブジェクトに設定することができます。Unity は LOD 値が低いサブシェーダーを優先します。Unity がサブシェーダーを使用するタイミングをどのように選択するかについては、Unity がサブシェーダーを選択する方法 を参照してください。
ノート: このテクニックはメッシュをレンダリングするための LOD 機能にちなんで名付けられていますが、重要な違いがあることに注意してください。シェーダー LOD はカメラからの距離とは関係がなく、Unity はシェーダー LOD を自動的に計算しません。最大のシェーダー LOD は手動で設定する必要があります。
この手法を使用して、さまざまなハードウェアでシェーダーのパフォーマンスを微調整できます。これは、サブシェーダーが理論的にはハードウェアによってサポートされていても、ハードウェアがそれをうまく実行できない場合に便利です。
機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP |
---|---|---|---|---|
ShaderLab:SubShader 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 の低いものを最初に見つけると、常にそれを使用します。
指定の 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 値を持ちます。
LOD 値 | シェーダー名 |
---|---|
100 | Unlit/Texture Unlit/Color Unlit/Transparent Unlit/Transparent Cutout |
300 | Standard Standard (Specular Setup) Autodesk Interactive |
ビルトインレンダーパイプラインでは、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 |