1)
必须放在CGPROGRAM ENDCG 中
2)
用
#program surface 表面函数 光照模型 [可选参数]
//========
光照模型 可选参数为 Lambert | BlinnPhong
//=======
表面函数形式:
vodi surf (Input IN,inputSurfaceOutput o)
//======
structSurfaceOutput{
half3 Albedo;//反射光
half3 Normal;//法线
half3 Emission;//自发光
half Specular;//高光
half Gloss;//光泽度
half Alpha;//透明度
}
接下来是是一个编译指令:#pragma surface surf Lambert,它声明了我们要写一个表面Shader,并指定了光照模型。它的写法是这样的
#pragma surface surfaceFunction lightModel [optionalparams]
- surface - 声明的是一个表面着色器
- surfaceFunction - 着色器代码的方法的名字
- lightModel - 使用的光照模型。
我们声明了一个表面着色器,实际的代码在surf函数,使用Lambert(也就是普通的diffuse)作为光照模型。
Surface Shader的核心是
(1)这套用的是Unity3d自带光照模型Lambert,也不做顶点处理,那么只需要一个表面处理函数surf即可
CGPROGRAM#pragma surface surf Lambert
ENDCG
或者(2)这套表示使用的是自己写的光照模型 lsyLightModel,并且使用了顶点处理函数vert
CGPROGRAM
//
#pragma surface
//执行顺序
ENDCG