Unity有三种shader的编写方式:fixed function shader (固定功能着色器)、 vertex and fragment shader (顶点片段程序着色器) 、surface shader (表面着色器) 。
fixed function shader (固定功能着色器)
最简单的着色器类型,只能使用Unity3D自带的固定语法和提供的方法,适用于任何硬件,使用难度最小;
vertex and fragment shader (顶点片段程序着色器)
顶点片段着色器,效果最为丰富的着色器类型,使用Cg/HLSL语言规范,着色器由顶点程序和片段程序组成。所有效果都需要自己编写,使用难度相对较大;
surface shader (表面着色器)
同样使用Cg/HLSL语言规范的着色器类型,不过把光照模型提取出来,可以使用Unity3D自带的一些光照模型,也可以自己编写光照模型,着色器同样由顶点程序和片段程序组成,不过本身有默认的程序方法,使用者可以只针对自己关系的效果部分进行编写。由于选择性比较大,所以可以编写出较为丰富的效果,使用难度相对 vertex and fragment shader小。
总结:如果有着丰富的的Cg开发经验的,可以使用 vertex and fragment shader了。fixed function shader虽然简单,但能实现的效果非常有限。而surface shader是Unity3D提供的一种较为折中的方式,同样能实现较丰富的效果,但难度相对小很多。不过surface shader有一个问题,它不支持SubShader内部的多pass,所以某些需要多pass的效果要实现起来会比较困难。
硬件型号:惠普暗影精灵6
系统版本:Windows10 专业版
软件版本:Unity3D 5.0