Shader "Custom/LODShader" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 600
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o) {
o.Albedo = fixed3(1.0, 0.0, 0.0);
}
ENDCG
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 500
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o) {
o.Albedo = fixed3(0.0, 1.0, 0.0);
}
ENDCG
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 400
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o) {
o.Albedo = fixed3(0.0, 0.0, 1.0);
}
ENDCG
}
FallBack "Diffuse"
}
using UnityEngine;
using System.Collections;
public class Test2 : MonoBehaviour
{
public Shader shader;
public int va = 600;
void Start()
{
Debug.Log(this.shader.maximumLOD);
}
void Update()
{
this.shader.maximumLOD =va;
}
}
总结:
shader有一个LOD,每一个SubShader又分别有各自的LOD
按照shader书写顺序,从上到下依次查阅SubShader
如果当前查阅的SubShader的LOD <= Shader.maximumLOD ,就停止查阅,立即执行当前的SubShader;
最终只有一个SubShader会被执行
FR:海涛高软(hunk Xu)