着色器中的参数
Properties
属性的结构:_CG变量名 (“unity可见的变量名”, 属性类型) = 值
例:_Color (“My Color”, Color) = (1, 1, 1, .5)
属性类型表
类型 |
说明 |
实例 |
Int |
整型 |
(.1, 2) |
Float |
浮点数 |
.5 |
Vector |
四维向量 |
(.5, 1 , 1, 0.5) |
Range |
范围1-2.3的浮点数 |
(1, 2.3) |
Color |
RGBA颜色 |
(1,1,1,.5) |
2D |
2d贴图, 2d纹理,默认值可以为一个代表默认tint颜色的字符串,可以是空字符串或者”white”,”black”,”gray”,”bump”中的一个 |
”white”{} |
3D |
3d贴图 |
|
Cube |
6面立方贴图 |
”white”{} |
Rect |
矩形贴图 |
”white”{} |
从应用阶段传递模型数据给顶点着色器时 常用的语义
命令 |
实例 |
说明 |
POSITION |
|
模型空间中的顶点位置,一般是float4类型 |
NORMAL |
|
顶点法线,float3类型 |
TANGENT |
|
顶点切线 float4 |
TEXCOORD0~N |
|
该顶点纹理坐标,0是第一组,一般是flkoat2 或float4类型 |
COLOR |
|
定点颜色,通常是fixed4或float4类型 |
从顶点着色器传递给片元着色器时 常用的语义
命令 |
实例 |
说明 |
SV_POSITION |
|
裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量 |
COLOR0 |
|
用于输出第一组顶点颜色 |
COLOR1 |
|
通常用于输出第二组顶点颜色 |
TEXCOORD0~TEXCOORD7 |
|
通常用于输出纹理坐标 |
片元着色器输出给unity时常用的语义
命令 |
实例 |
说明 |
SV_Target |
|
输出值将会存到渲染目标(render target)中 |
unity 内置的矩阵变换
命令 |
实例 |
说明 |
UNITY_MATRIX_MVP |
|
当前的模型观察投影矩阵,用于将顶点/方向矢量从模型空间变换到裁剪空间 |
UNITY_MATRIX_MV |
|
当前的模型观察矩阵,用于将顶点/方向矢量从模型空间变换到观察空间 |
UNITY_MATRIX_V |
|
当前的观察矩阵,用于将顶点/方向矢量从世界空间变换到观察空间 |
UNITY_MATRIX_P |
|
当前的投影矩阵,用于将顶点/方向矢量从观察空间变换到裁剪空间 |
UNITY_MATRIX_VP |
|
当前的观察投影矩阵,用于将顶点/方向矢量从世界空间变换到裁剪空间 |
UNITY_MATRIX_T_MV |
|
UNITY_MATRIX_MV 的转置矩阵 |
UNITY_MATRIX_IT_MV |
|
UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间变换到观察空间,也可以用于得到UNITY_MATRIX_MV的逆矩阵 |
_Object2World |
|
当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间 |
_World2Object |
|
_Object2World的逆转矩阵,用于将顶点/方向矢量从世界空间变换到模型空间 |
unity 顶点转换函数
命令 |
说明 |
实例 |
float4 UnityObjectToClipPos(float3 pos) |
将一个点从object空间转换成相机在均匀坐标下的剪辑空间。这就相当于 mul(UNITY_MATRIX_MVP, float4(pos, 1.0)), 应该在它的位置上使用。 |
|
float3 UnityObjectToViewPos(float3 pos) |
将一个点从object空间转换为view空间。这就相当于mul(UNITY_MATRIX_MV, float4(pos, 1.0)).xyz, 应该在它的位置上使用。 |
|
辅助函数
unity 内置的摄像机和屏幕参数
命令 |
实例 |
说明 |
float3 _WorldSpaceCameraPos |
|
该摄像机在世界空间中的位置 |
float4 _ProjectionParams |
|
x=1.0 或-1.0(使用反转的投影矩阵渲染时是负数),y=Near,z=Far,w= 1.0+1.0/Far, 其中near和far分别是近裁剪平面和远裁剪平面与摄像机的距离 |
float4 _ScreenParams |
|
x=width,y=height,z=1.0+1.0/width,w=1.0+1.0/height, 其中width和height分别是该摄像机的渲染目标 (render target)的像素宽度和高度 |
float4 _ZBufferParams |
|
x=1-Far/near,yFar/Near, 最x/Far,wy/Far,该变量用于线性化Z缓存中的深度值 |
floart4 unity_OrhoParams |
|
x=width,y=height,z无意义,w=1.0(该相机是正交相机)或w=0.0(透视相机),其中width和height是正交投影相机的宽和高 |
float4x4 unity_CameraProjection |
|
该摄像机的投影矩阵 |
floart4x4 unity_CameraInvProjection |
|
该摄像机的投影矩阵的逆矩阵 |
float4 unity_CameraWorldClipPlanes |
|
该摄像机的6个裁剪屏幕在世界空间下的等式,按左右上下近远的顺序裁剪平面 |
时间变量
命令 |
实例 |
说明 |
float4 _Time |
_Time.x;_Time.y; _Time.z; _Time.w; |
t是自该场景加载开始所经过的时间,4个分量分别是t/20,t,2t,3t |
float4 _SinTime |
|
t是时间的正限制,4个分量分别是t/8,t/4,t/2,t |
float4 _Costime |
|
t是时间的余弦值,t/8,t/4.t/2,t |
float4 unity_DeltaTime |
|
dt是时间增量,4个值分别是dt,1/dt,smoothDt,1/smoothDt |