This page contains information on using a LOD
block in your ShaderLab code to assign a LOD (level of detail) value to a SubShader.
You can assign a LOD value to a SubShader. This value indicates how computationally demanding it is.
At runtime, you can set the shader LOD value for a single Shader object, or for all Shader objects. Unity then prioritises SubShaders that have a lower LOD value. For information on how Unity chooses when to use SubShaders, see Shader objects: Order of operations during rendering.
Note: Although this technique is named after the LOD feature for rendering meshes, there are important differences: shader LOD does not relate to distance from the Camera, and Unity does not calculate shader LOD automatically. You must set the maximum shader LOD manually.
Use this technique to fine-tune shader performance on different hardware. This is useful when a SubShader is theoretically supported by a user’s hardware, but the hardware is not capable of running it well.
Feature name | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | Custom SRP |
---|---|---|---|---|
ShaderLab: SubShader LOD block | 지원 | 지원 | 지원 | 지원 |
In ShaderLab, you assign a LOD value to a SubShader by placing a LOD
block inside a SubShader
block.
Signature | 기능 |
---|---|
LOD [value] | Assigns the given LOD value to the SubShader. |
Note: Inside your Shader
block, you must put your SubShaders in descending LOD order. For example, if you have SubShaders with LOD values of 200, 100, and 500, you must put the SubShader with the LOD value of 500 first, followed by the one with a LOD value of 200, followed by the one with a LOD value of 100. This is because Unity selects the first valid SubShader it finds, so if it finds one with a lower LOD first it will always use that.
To set the shader LOD for a given Shader object, you can use Shader.maximumLOD. To set the shader LOD for all Shader objects, you can use Shader.globalMaximumLOD. By default, there is no maximum LOD.
This example code creates a Shader object that contains two SubShaders: one with a LOD value of 200, and one with a value of 100. The SubShaders are in descending order of LOD value.
Shader "Examples/ExampleLOD"
{
SubShader
{
LOD 200
Pass
{
// The rest of the code that defines the Pass goes here.
}
}
SubShader
{
LOD 100
Pass
{
// The rest of the code that defines the Pass goes here.
}
}
}
In the Built-in Render Pipeline, Unity’s built-in shaders have the following LOD values:
LOD value | Shader name |
---|---|
100 | Unlit/Texture Unlit/Color Unlit/Transparent Unlit/Transparent Cutout |
300 | Standard Standard (Specular Setup) Autodesk Interactive |
In the Built-in Render Pipeline, Unity’s built-in legacy shaders have the following LOD values:
LOD value | Shader name |
---|---|
100 | VertexLit |
150 | Decal Reflective VertexLit |
200 | 디퓨즈 |
250 | Diffuse Detail Reflective Bumped Unlit Reflective Bumped VertexLit |
300 | Bumped Specular |
400 | 범프 스페큘러 |
500 | Parallax |
600 | Parallax Specular |