1.Mesh Filter:存储一个Mesh(网格,模型由那些三角面组成,组成的样子,三角面的一些顶点信息)
Mesh Renderer:用来渲染模型的外观,相当于外表贴图,如果Texture没有就是一个纯色的贴图
2.Shader编写
创建一个空的Shader
①给Shader一个名字
Shader “Shader/MyShader”{
}
文件夹名字/Shader名字
②创建Shader中的属性,关键字为Properties{}
Properties中的属性可以为_Color,_Vector,_Int,_Float,_Range,_2D,_3D
Shader "Shader/MyShader"{
Properties
{
_Color("Color",Color)=(1,1,1,1)//float4
_Vector("Vector",Vector)=(1,1,1,1)//float4
_Int("Int",Int)=54545//float4
_Float("Float",Float)=4.5//float4
_Range("Range",Range(1,10))=6//float
_2D("texture",2D)="red"{}//sampler2D
_3D("texture",3D)="black"{}//sampler3d
_Cube("Cube",Cube)="white"{}//samplerCube,天空盒子支持不是很好,一般不用
}
}
属性中的结尾是不带“;” 的,另外 _ 是告诉编译器,这是一个属性定义的开头(“属性的名字”,属性),=后面为值
③显卡的显示效果,Shader可以认为是一种渲染命令,由opengl或者dx(显卡的驱动)进行解析,
开发者能控制的着色器有顶点/片元 Vertex/Fragment Shader两块
关键字为SubShader,每一个SubShader中至少有一个pass,pass中的代码可以使用GLSL,HSSL,和CG,因为CG是通用的跨平台的,所以比较常用CG代码。
告诉编译器要开始写CG代码 CGPROGRAM 结束CG代码ENDCG
先声明要使用到的属性
然后使用
#pragma 声明要使用的方法
其中可以使用SV_这种语义声明的方法,获得值
SubShader
{
//至少得有一个pass
pass
{
CGPROGRAM
float4 _Color;
float4 _Vector;
float _Int;
float _Float;
sampler2D _2D;
sampler3D _3D;
#pragma vertex vert
float4 vert(float4 v:POSITION):SV_POSITION //通过语义告诉系统,这个参数v是顶点坐标
{
float4 pos= UnityObjectToClipPos(v);
return pos;
}
#pragma fragment fragm
fixed4 fragm():SV_Target
{
return _Vector;
}
ENDCG
}
}