Shader

Unity中的Shader及其基本框架

shader和Material的基本关系

Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。

所以说Shader并没有什么特别神奇的,它只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。

Unity中Shader的三种基本类型

按照渲染管线的分类,可以把Sharder分成3个类别:

固定功能着色器(Fixed Function Shader)

固定功能着色器为固定功能渲染管线的具体表现。

OpenGL-渲染管线的流程(有图有真相)

学习shader之前必须知道的事情:shader(着色语言)到底发生在那个阶段?OpenGL的渲染管线有哪些阶段?这对开发人员来说很重要,也许你刚刚接触,或者你在使用已有的产品,很优秀的游戏引擎,或者渲染引擎,你觉得知道这个没有太大意义,但知道了这些,总归对你没有坏处。

下图是一个非常简化框图流水线的各个阶段,并在他们之间传播的数据。虽然极其简单,它是足够的着色器编程,提出了一些重要的概念。固定管线中存在很多阶段,并存在很多细节,这里只是粗略的介绍。

(1)顶点变换:

在这里,一个顶点的属性,如在空间的位置,以及它的颜色,法线,纹理坐标,其中包括一组。这个阶段的输入的各个顶点的属性。由固定的功能所执行的操作,主要完成一下工作:
1. 顶点位置变换
2. 计算顶点观照
3. 纹理坐标变换

(2)图元装配: