Unity顶点着色器和片段着色器

顶点着色器和片段着色器的处理流程:
3d模型—>Vertex shader and flagment shader(—>vertex data inputs结构体—>vertex function—>Vertex shader outputs and fragment shader inputs结构体—>flagment function)—>color
理解:首先,几何点被送到顶点处理单元,得到各个顶点的位置和数据;然后,得到的结果被送到片段处理单元,得到最终的颜色值。

一、vertex data inputs结构体

通常顶点数据输入被声明为一个结构体,代替一个一个的列举他们.

1、Unity定义的顶点数据输入结构体

(1)appdata_base:包含顶点位置、法线和一个纹理坐标;
(2)appdata_tan:包含顶点位置、切线、法线和一个纹理坐标;
(3)appdata_full:包含顶点位置、法线、切线、顶点色和两个纹理坐标;
(4)appdata_img:包含顶点位置和一个纹理坐标;

2、自定义顶点数据输入结构体

获取不同的顶点数据,需要自己声明顶点结构体或者添加一个输入变量到顶点着色器中,结构体名称可以随意定义,结构体中可定义的变量类型有:

(1)POSITION:顶点的位置,通常为float3或float4 类型;
(2)NORMAL:顶点法线向量,通常为float3类型;
(3)TEXCOORD0:第一UV坐标,通常为float2、float3或float4类型
(4)TEXCOORD1, TEXCOORD2 and TEXCOORD3:第二、第三、第四UV坐标
(5)TANGENT:切线向量(通常用在法线贴图中),通常为float4 类型;
(6)COLOR:每一个顶点的颜色值,通常为float4 类型;

3、内置矩阵

(1)UNITY_MATRIX_MVP 当前模型视图投影矩阵
(2)UNITY_MATRIX_MV 当前模型视图矩阵
(3)UNITY_MATRIX_V 当前视图矩阵。
(4)UNITY_MATRIX_P 目前的投影矩阵
(5)UNITY_MATRIX_VP 当前视图*投影矩阵
(6)UNITY_MATRIX_T_MV 移调模型视图矩阵
(7)UNITY_MATRIX_IT_MV 模型视图矩阵的逆转
(8)UNITY_MATRIX_TEXTURE0 UNITY_MATRIX_TEXTURE3 纹理变换矩阵

4、内置向量

UNITY_LIGHTMODEL_AMBIENT 当前环境的颜色。

二、Vertex shader outputs和fragment shader inputs结构体

1、POSITION, SV_POSITION, HPOS:顶点在摄像机坐标系(裁剪空间,各维度的值为0~1)中的坐标;
2、COLOR, COLOR0, COL0, COL, SV_TARGET:第一个颜色;
3、COLOR1, COL1:第二个颜色;
4、FOGC, FOG:雾坐标
5、TEXCOORD0, TEXCOORD1, …, TEXCOORDi, TEXi:顶点存储的第i个UV数据;
6、PSIZE, PSIZ:正在绘制的点的大小;
7、WPOS:窗口范围内(左下角为原点)以像素为单位的坐标

三、Vertex Fuction

1、输入该函数的变量是顶点数据类型的结构体,结构体数据自动获取
2、输出类型是自定义的(二)中的类型组成的结构体
3、该函数主要用于对顶点数据的处理

四、Flagment Function

1、该函数的输入数据是Vertex函数的输出
2、绝大多数的Flagment函数的输入是一个颜色值和有一个SV_Target

fixed4 frag (v2f i) : SV_Target

3、返回值也可写成一个结构体

struct fragOutput {
fixed4 color : SV_Target;
};
fragOutput frag (v2f i)
{
fragOutput o;
o.color = fixed4(i.uv, 0, 0);
return o;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值