标签:
Shader "Custom/BasicDiffuse" {
Properties
{
_EmissiveColor ("Emissive Color", Color) = (1,1,1,1)
_AmbientColor ("Ambient Color", Color) = (1,1,1,1)
_MySliderValue ("This is a Slider", Range(0,10)) = 2.5
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf BasicDiffuse
float4 _EmissiveColor;
float4 _AmbientColor;
float _MySliderValue;
inline float4 LightingBasicDiffuse (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
float difLight = max(0, dot (s.Normal, lightDir));
float4 col;
col.rgb = s.Albedo * _LightColor0.rgb * (difLight * atten * 2);
col.a = s.Alpha;
return col;
}
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
float4 c;
c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
1.SubShader表示针对不同显卡的实现
2.Tags表示引擎如何认证这个SubShader
Queue类型(指定渲染顺序队列)
Background(1000)
Geometry(2000)
AlphaTest(2450)
Transparent(3000)
Overlay(4000)
RenderType类型
Opaque: 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
Transparent:用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。
TransparentCutout: 蒙皮透明着色器(Transparent Cutout,两个通道的植被着色器)。
Background: Skybox shaders. 天空盒着色器。
Overlay: GUITexture, Halo, Flare shaders. 光晕着色器、闪光着色器。
TreeOpaque: terrain engine tree bark. 地形引擎中的树皮。
TreeTransparentCutout: terrain engine tree leaves. 地形引擎中的树叶。
TreeBillboard: terrain engine billboarded trees. 地形引擎中的广告牌树。
Grass: terrain engine grass. 地形引擎中的草。
GrassBillboard: terrain engine billboarded grass. 地形引擎何中的广告牌草
3.LOD 200 (Shader Level of Detail ),描述细节程度限制
4.#pragma surface 告诉着色器将使用哪个光照模型来计算
5.Properties块定义属性必须再声明一次才能使用
6.声明一个新的光照模型函数来创建新的光照模型,格式:Lighting<任何名字>
7.点积是两个向量空间比较,返回(-1 1)。 1表示向量方向完全相反,-1表示向量方向完全一致,0垂直。
8.Shader表现属性
Albedo,是漫反射颜
Normal,法线坐标
Emission,自发光颜色
Specular,镜面反射系数
Gloss,控制光泽
Alpha,控制透明
9.如果用户所有的SubShader都失败了,Unity会通过FallBack调用自己预制的Shader实现。
Shader结构
标签:
原文地址:http://www.cnblogs.com/DragonXin/p/4580350.html