Unity_shader
属性详解
属性于Properties中的定义格式
- 格式:
命名(“Inspector面板显示的名字”,类型) = 默认值
(注意,这里最后不加分号)
属性于Pass中的定义格式
- 格式:
类型 其在Properties中的命名;
(注意,这里最后要加分号,并且类型与在Properties中的不同)
属性类型
- Color:颜色类型。
默认值格式:(a,b,c,d)该属性有四个参数 r,g,b,a,取值范围都是0到1。
在Pass中的类型:float4 - Vector:向量类型,有二维三维四维三种,默认情况下为四维向量。
默认值格式:(a,b,c,d)该属性有四个参数,即分别表示其四维参数。
在Pass中的类型:float4 - Int:整数类型,与其他语言中int一样。
默认值格式:单一的一个整数
在Pass中的类型:float - float:小数类型,与其他语言不同的是,这里的小数类型只有float一种,没有double这种。
默认值格式:单一的一个小数
在Pass中的类型:float - Range:定范围数,其定义时限定一个范围,可以使其值永远保持在这个范围内。
定义格式:命名(“Inspector面板显示的名字”,Range(范围限定1,范围限定2)) = 默认值。
默认值格式:单一的一个数。
在Pass中的类型:float - 2D:图片类型(2D纹理)。
默认值格式:“默认颜色值”{}.
在Pass中的类型:sampler2D - Cube:立方体纹理
默认值格式:“默认颜色值”{}.
在Pass中的类型:samplerCube - 3D:3D纹理
默认值格式:“默认颜色值”{}.
在Pass中的类型:sampler3D
float和half和fixed
这三个属性可以相互替换这使用,有float4就同样也有half4与fixed4,不同的是它们占用的空间不同,所能表示的范围也不同
- float: 二进制32位存储
- half: 二进制16位存储,大致范围为-6w~+6w
- fixed: 二进制11位存储,大致范围为-2~+2
顶点片元函数的使用
顶点函数
- 作用:基础作用是将模型的各个三角片顶点的局部坐标转化为剪裁坐标,即以其原来计算的以自身中心为坐标原点的坐标作为基础,去计算其应该在游戏中的什么位置。在这个作用基础上可以再自行附加作用。
- 声明格式:#pragma vertex 函数命名
(注意这里最后不加分号) - 定义格式:与c语言定义格式相仿(参数与返回值涉及语义绑定的知识点下面说)
返回值类型 声明过的函数命名(参数){函数体}
片元函数
- 作用:基础作用是对模型对应显示在屏幕上的每一个像素点进行处理,返回颜色显示。
- 声明格式:#pragma fragment 函数命名
(注意这里最后不加分号) - 定义格式:与c语言定义格式相仿(参数与返回值涉及语义绑定的知识点下面说)
返回值类型 声明过的函数命名(参数){函数体}
矩阵转换
- mul:矩阵转换通常使用矩阵相乘的方式进行转换,这里用到mul函数,写入俩个相同类型参数,让其第一个参数与第二个参数相乘,有些矩阵左乘特殊的矩阵可以达到一定的转换效果。比如左乘UNITY_MATRIX_MVP矩阵可以达到局部坐标转剪裁坐标的效果。
语义绑定
- 说明:由于顶点函数,片元函数这些函数都是系统调用的函数,所以在参数上,无论是实参传入还是返回参数都是要与系统互动的,所以这里肯定不能乱写类型,并且要通过一种特定的手法去告诉系统,这个参数是干嘛的,或者说我这里需要你给我一个什么样的参数,这个手法就叫语义绑定。
- 格式:在定义函数的时候,我们要对返回值和形参均进行语义绑定。格式如下
返回值类型 声明过的函数命名(参数:绑定语义1):绑定语义2 {函数体}
在参数后面加一个冒号所绑定的语义1是让系统传递语义1所代表的数据给这个参数作为其实参,在函数体前面加的冒号所绑定的语义2是告诉系统这个函数返回的参数是什么。 - 语义绑定部分关键词
POSITION:系统传过来的顶点的局部坐标。
SV_POSITION:顶点传出去的顶点的剪裁坐标。
SV_Target:片元函数传出去的各个像素点的色彩情况。 - 拿顶点函数举个例子
#pragma vertex vert
float4 vert(float4 v : POSITION):SV_POSITION{
return mul(UNITY_MATRIX_MVP,v);
}