一般在游戏物体GameObject上面会有最为基本的组件MeshFilter以及MeshRender组件,MeshFilter主要用来存储网格,就是模型由哪些三角面组成,组成一个什么样子的模型,三角面的一些顶点信息。
MeshRender用来渲染一个模型的外观,按照Mesh给它皮肤、外观,通过Material(材质)来控制模型渲染的样子。
Material由贴图(可以没有,可以是一个单纯的颜色)和Shader组成(由反光程度、光滑程度等构成)。
Shader可以认为是一种渲染命令,由OpenGL组成或DX进行解析,来控制渲染丰富多彩的图形。其中GLSLshader语言用于OpenGL,HLSLshader语言用于DirectX,而CG(NIVADA公司)是跨平台的,可以在这两种平台上运行。
Unity Shader的分类:1.表面着色器 Surface Shader (表面着色器相当于顶点着色器的封装);2.顶点/片元着色器 Vertex/Fragment Shader,顶点着色器比表面着色器会更强大一些;3.固定函数着色器Fixed Function Shader,现在已经弃用。
我们在场景的模型有些时候会出现紫色的情况,其实是Unity不知道如何对其进行渲染就会出现这样一种状态。
Shader的基本构成
在上面Shader就相当于C#里面的MonoBehaviour{};里面包含的有属性Properties以及SubShader块,在SubShader块中的Pass相当于C#里一个个的方法;子SubShader块可以有很多个,用来控制效果,很多个是因为显卡不同,功能强的显卡用第一个SubShader,如果第一个SubShader里面的效果可以实现,那么就使用第一个SubShader,如果显卡这个SubShader里面的某些效果它实现不了,就会自动去运行下一个SubShader。
FallBack用来指定一个存在的Shader,相当于后备方案,前面的所有SubShader都实现不了就运行这个。