このページには、ShaderLab コードの LOD
ブロックを使用して、LOD 値を SubShader に割り当てるための情報が記載されています。
LOD 値をサブシェーダーに割り当てることができます。この値は、計算負荷を示します。
ランタイムでは、シェーダーの LOD 値を単一のシェーダーオブジェクト、またはすべてのシェーダーオブジェクトに設定することができます。Unity は LOD 値が低いサブシェーダーを優先します。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 |
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.