MeshFilter
存储一个Mesh(网格,模型的网格,模型的三角面顶点信息)
MeshRenderer
用于渲染一个物体的外观,数据来源于MeshFilter
Material
材质包含两部分,贴图和Shader
OpenGL DirectX
直接与显卡交互图形渲染库,可以理解为应用程序与显卡之间的桥梁,为应用程序提供一些渲染接口,用于渲染。
Shader
Shader可以理解为是一种渲染命令,由opengl或DX进行解析,用于控制图形的渲染。
GLSL/HLSL/CG
shader编程语言,GLSL面向OpenGL,HLSL面向DirectX,CG是Nvidia公司出的,跨平台的shader编程语言。
ShaderLab
我们在Unitiy中写Shader用的语言是ShaderLab,可以理解为Unity为了方便使用者写Shader而创造的一种新的Shader语言,最后其实都会在底层被翻译成GLSL或HLSL或CG。
Unity中的Shader分类
Shader的中文名叫做着色器
- 表面着色器,Surface Shader
- 顶点/片元着色器,Vertex/Fragment Shader
- 固定功能着色器,Fixed function Shader (在现代硬件上基本已被弃用)
表面着色器可以理解为是对顶点/片元着色器的一种封装,它帮我们处理了很多渲染上比较麻烦的事情。而顶点/片元着色器就相对更灵活一些,也就是说很多东西要自己处理,相对来说要写的代码更多一些。进一步讲,使用顶点/片元着色器能实现的效果,使用表面着色器并不一定能实现,或者说,并不一定那么方便地实现。
Unity Shader 结构
Shader "iMoeGirl/MyShader" { // Shader 名字
Properties {
// 这里定义一些属性,可以显示在UI面板上用于调节
}
SubShader {
// 子 Shader,可以写多个,显卡运行时,
// 从第一个SubShader开始,如果第一个里面的效果都支持,则使用第一个,
// 如果发现这个SubShader里面某些效果不支持,则自动运行下一个SubShader
}
// 如果发现所有的SubShader都不支持,则使用Fallback,相当于后备方案
Fallback "VertexLit"
}
Unity Shader 属性类型
Shader "iMoeGirl/MyShader" { // Shader 名字
// 这里定义一些属性,可以显示在UI面板上用于调节
Properties {
// 属性名("Inspector面板上显示出来的属性名", 属性类型) = 默认值
_Color("颜色类型", Color) = (1,1,1,1)
_Vector("向量类型", Vector) = (1, 2, 3, 4)
_Int("整型", Int) = 11111
_Float("浮点型", Float) = 12.11
_Range("范围类型", Range(100, 1000)) = 128
_Tex2D("贴图类型", 2D) = "white"{}
_Cube("立方体贴图类型", Cube) = "white"{}
_Tex3D("3D纹理", 3D) = "white"{}
}
// 子 Shader,可以写多个,显卡运行时,
// 从第一个SubShader开始,如果第一个里面的效果都支持,则使用第一个,
// 如果发现这个SubShader里面某些效果不支持,则自动运行下一个SubShader
SubShader {
// 至少有一个Pass,相当于一个方法
Pass {
// 在Pass块里写Shader代码
CGPROGRAM
// 使用 CG语言编写Shader
ENDCG
}
}
// 如果发现所有的SubShader都不支持,则使用Fallback,相当于后备方案
Fallback "VertexLit"
}