US2S3L9——语义

语义

CG语言中提供了 语义 这种特殊关键字用于修饰函数中的传入参数和返回值

它的主要作用是让Shader知道从哪里读取数据,并把数据输出到哪里
让我们在Shader开发当中可以获取到想要的数据,并且可以把数据传递到正确的目标

以最简单的顶点着色器为例:

  • POSITION​:应用阶段准备好的顶点数据会传入到该函数内,因此该参数需要这个语义来指定需要模型的顶点消息
  • SV_POSITION​:模型的顶点需要转换到裁剪空间,因此该函数的返回值需要这个语义来指定函数返回值代表裁剪空间下的坐标
1
2
3
4
5
6
7
#pragma vertex myVert

//顶点着色器 回调函数
float4 myVert(float4 v : POSITION) : SV_POSITION
{
return UnityObjectToClipPos(v); //假设这里对顶点坐标进行变换,将变换出的顶点坐标返回出去
}

注意:Unity中只支持CG当中的部分语义

语义的主要作用是让 Shader 知道从哪里读取数据,并把数据输出到哪里
我们在编写顶点片元着色器回调函数的相关逻辑时,我们需要使用语义去修饰函数参数和返回值
这样我们才能获取到我们想要的数据,并且把结果数据明确的返回出去用于下一流程处理

我们需要将常用语义记录下来,以便后续使用

常用语义

  • 应用阶段 ——> 顶点着色器

    应用阶段传递模型数据给顶点着色器时Unity支持的语义,一般在顶点着色器回调函数的传入参数中应用

    • POSITION​:模型空间中的顶点位置,通常是float4​类型

    • NORMAL​:顶点法线,通常是 float3​ 类型,常用于计算光照消息

    • TANGENT​:顶点切线,通常是 float4​ 类型,常用于计算光照消息

    • TEXCOORDn​:比如 TEXCOORD0​,TEXCOORD1​,……,该顶点的纹理坐标,通常是float2​或者float4​类型

      TEXCOORD0​ 表示第一组纹理坐标,依次类推

      纹理坐标:也称**UV坐标,表示该顶点对应纹理图像上的位置**

      它的使用相关内容具体可见:US3S2L1——纹理颜色采样

    • COLOR​:顶点颜色,通常是 fixed4​ 或 float4​ 类型

  • 顶点着色器 ——> 片元着色器

    从顶点着色器传递数据给片元着色器时Unity支持的语义,一般在顶点着色器回调函数的返回值中应用

    • SV_POSITION​:裁剪空间中的顶点坐标(必备)
    • COLOR0​:通常用于输出第一组顶点颜色(不是必须的)
    • COLOR1​:通常用于输出第二组顶点颜色(不是必须的)
    • TEXCOORD0 ~ TEXCOORD7​:通常用于输出纹理坐标,当不明确传递的数据为何种语义都可以使用此语义(不是必须的)
  • 片元着色器输出

    片元着色器输出时Unity支持的常用语义,一般在片元着色器回调函数的返回值中应用

    • SV_Target​:输出值会存储到渲染目标中

更多语义

HLSL语义汇总:语义 - Win32 apps | Microsoft Learn

CG的语义大部分和HLSL的相同,在此做了解即可,以后我们用到其他语义时,再着重讲解即可