Unity支持的语义
从应用阶段传递模型数据给顶点着色器时Unity支持的常用语义
语义 | 描述 |
POSITION | 模型空间中的顶点位置,通常是float4类型 |
NORMAL | 顶点法线,通常是float3类型 |
TANGENT | 顶点切线,通常是float4类型 |
TEXCOORDn,如TEXCOORD0、TEXCOORD1 | 该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标,依此类推,通常是float2或float4类型 |
COLOR | 顶点颜色,通常是fixed4或float4类型 |
从顶点着色器传递数据给片元着色器时Unity使用的常用语义
语义 | 描述 |
SV_POSITION | 裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于DirectX9中的POSITION,但最好使用SV_POSITION |
COLOR0 | 通常用于输出第一组顶点颜色,但不是必须的 |
COLOR1 |
通常用于输出第二组顶点颜色,但不是必须的 |
TEXCOORD0~TEXCOORD7 |
通常用于输出纹理坐标,但不是必须的 |
片元着色器输出时Unity支持的常用语义
语义 | 描述 |
SV_Target | 输出值将会存储到渲染目标(render target)中。等同于DirectX9中的COLOR语义,但最好使用SV_Target |
定义复杂的变量类型
上面提到的语义绝大部分用于描述标量或矢量类型的变量,例如fixed2、float、float4、fixed4等。下面的代码给出了一个使用语义来修饰不同类型变量的例子:
struct v2f { float4 pos : SV_POSITION; fixed3 color0 : COLOR0; fixed4 color1 : COLOR1; half value0 : TEXCOORD0; float2 value1 : TEXCOORD1; };一个语义可以使用的寄存器只能处理4个浮点值(float)。因此,如果我们想要定义矩阵类型,如float3x4、float4x4等变量就需要使用更多的空间。一种方法是,把这些变量拆分成多个变量,例如对于float4x4的矩阵类型,我们可以用拆分成4个float4类型的变量,每个变量存储了矩阵中的一行数据。