转载自:https://blog.youkuaiyun.com/qq_33537945/article/details/79242089
Unity 渲染需要两个组件 Mesh Filter 和 Mesh Renderer
Mesh Filter : 存储一个Mesh(网格,模型的网格,就是模型的由哪些三角面组成,组成一个什么样子的模型,三角面的一些顶点信息)
Mesh Renderer:用来渲染一个模型的外观,就是样子, 按照 mesh给它皮肤,给它颜色通过Material(材质)控制模型渲染的样子
Material(材质)简单的理解为 是由 贴图+Shader组成的(贴图可以没有也可以是单纯的颜色 但是Shader必须要有)
shader可以认为是一种渲染命令 ,由opengl 或者dx进行解析,来控制渲染
CPU <===应用程序(C#代码由CPU计算 Shader调用opengl 或者DX)===> opengl 或者dx==>GPU
DX 和OPengl 是敌对关系 两者实现功能一样都是用来进行图像编程 其中DX在PC平台用的多OPengl在移动平台用的多
OpenGL 使用GLSL 编写shader
DirectX 使用HSSL 编写shader
英伟达 CG 编写shader(跨平台)
CG语言教程官网(初学者不推荐看)
http://http.developer.nvidia.com/CgTutorial/cg_tutorial_frontmatter.html
这里推荐使用CG编写shader 因为他是跨平台的 可以用OpenGL解析也可以使用DX解析
使用Unity也不会直接使用CG语言编写 而是使用了Unity封装好的 叫ShaderLab
ShaderLab 对这三种语言都做了封装 通常使用CG来编写Shader
Unity Shader的分类
使用的是ShaderLab编写Unity中的Shader
1,表面着色器 Surface Shader(Unity独有的 是对,顶点/片元着色器的一种封装 封装的还不全面肯会有一些功能无法实现 编写起来或许会简单点 运行时会被解析成顶点/片元着色器 )
2,顶点/片元着色器 Vertex/Fragment Shader(最基本的 编写起来代码可能会多一点 因为是最基本的所以可以实现所有的效果 比如 表面着色器 无法实现的 顶点/片元着色器可以实现 )
3,固定函数着色器 Fixed Function Shader(现在已经被启用了 在旧设备上使用)
总结:
如果游戏场景灯光较多(比如三四个以上的时候)的话推荐使用 表面着色器 因为它 帮我们处理好了许多光照的细节 我们不用挨个去处理每个光源了 反之 使用顶点/片元着色器 固定函数着色器在老设备上使用