Mesh Filer与MeshRender与Material?
答:(了解就行了)
包含顺序:MeshRender->Material->Shader
MeshFilter 组件存储一个网格(模型由哪些三角形组成,组成了什么样子)
MeshRender 组件用来渲染模型的外观按照meshFilter给的mesh 来给她皮肤颜色
而MeshRender中的有一个属性:Material,Materials由贴图和shader构成
Material:控制模型渲染的样子;
Material下的一个属性:shader
OpenGL与 DX 是什么 ?
答:shader可以认为是一种渲染命令,用OpenGl和DX进行解析,从而渲染出图形使用CG(英伟达)语言来编写shader(以为CG的shader是跨平台的)
在unity 中使用shaderLab 来编写Unity中的shader
shader分类?
1.顶点/片段着色器 vertex/Fragmengt shader
比表面着色器要复杂,但是质量好
2.表面着色器 surface shader
可以理解成对顶点片段着色器的一种封装,比顶点片段着色器要简单,它的设计初衷是为了让用户仅仅使用一些指令(#pragma)就可以完成很多事情,并且封装了很多常用的光照模型和函数。相比底层的Vertex And Fragment Shader,Suface Shader的限制比较多,它只能有一次Pass。如果做一些常规的功能又需要光照,可以用Surface Shader写,比较快速便捷。如果要写比较高级的Shader还是建议使用Vertex Shader 和 Fragment
Unity创建shader?
Creart->shader->Standard Surface Shader
编写shader ,Unity 可以用Vs编写shader
shader的结构
Shader"Myshader/01myshader"{ //这里指定shader的名字
Properties{ //属性
//变量名(“变量显示在unity编辑器中的名子”,变量类型)=初始值
_Color("颜色",Color)=(1,1,1,1)
_Vector("Vector",Vector)=(1,2,3,4)
_Int("Int",Int)=3333
_Float("Float",Float)=4.5
_Range("Range",Range(1,11))=6
_2D("Texture",2D)="red"{}
_Cube("天空盒“,cube)=""{}
_3D("Texture",3D)="black"{}
}
//SubShader 可以写多个,显卡运行的时候第一个不行执行第二个
SubShader{
//至少有一个Pass
Pass{
//在这里编写shader代码
CGPROGRAM
//使用CG语言编写shader代码
//重新定义Properties中的变量
float4 _Color;
float4 _Vector;
float _Int;
float _Float;
float _Range;
sampler2D _2D;
samplerCube _Cube;
sampler3D _3D;
ENDCG
}
}
Fallback"VertexLit"// 备胎
}
总结:shader中属性Properties的类型有哪些?
答:_Color("颜色",Color)=(1,1,1,1)
_Vector("Vector",Vector)=(1,2,3,4)
_Int("Int",Int)=3333
_Float("Float",Float)=4.5
_Range("Range",Range(1,11))=6
_2D("Texture",2D)="red"{}
_Cube("天空盒“,cube)=""{}