上述四种UntiyShader中,Compute Shader会编译为一种特殊的shader,可以利用GPU的并行性来进行一些与常规渲染流水线无关的计算,书中没有做过多的介绍。去官方文档查了下,看的不是很明白,暂且放一放,先搞其他三种。
UnityShader可以用三种不同的方式编写:表面着色器(Surface Shaders)、顶点和片元着色器(Vertex and Fragment Shaders)、固定函数着色器(Fixed Function Shaders)。剩下的三种UnityShader模板(Standard Suface Shader、Unlit Shader、Image Effect Shader),我们就按照编写方式来分类了解。
顶点和片元着色器(Vertex and Fragment Shaders)
顶点和片元着色器是UnityShader中最灵活的一种编写方法,同时也是最复杂的。其实令外两种编写方式Unity都会在悄咪咪的编译为此种方式。我们右键Creat出的Unlit Shader、Image Effect Shader两种模板实际上都是基于这种方式编写的,只不过Image Effect Shader是为我们提供了一个实现各种屏幕后处理效果的基本模板,而Unlit Shader提供的是一个不包含光照的顶点和片元着色器的基本模板。
官方文档说明如下:如果您的着色器不需要与光照交互,或者如果您需要无法由表面着色器处理的非常奇特的效果,则需要使用顶点和片元着色器。以这种方式编写的着色器程序是创建所需效果的最灵活方法(甚至表面着色器也会自动转换为一堆顶点和片元着色器),但这需要付出代价:必须编写更多的代码并且更难以让它与光照互动。这些着色器也是以Cg/HLSL编写。
固定函数着色器(Fixed Function Shaders)
固定管线的编程方式已经已经逐渐被抛弃了,主要为了支持一些不支持可编程管线的老旧设备,且在Unity5.2之后,所有的固定函数着色器都会被Unity'编译为对应的顶点/片元着色器,因此此处不再赘述,由需要的童鞋可以下边的官方文档。