语义是用来做什么的?
用来告诉Unity这个变量是干嘛用的,Unity给Shader传数据时,比如遇到half4 c这样一个变量,那该给这个变量传哪个数据呢?顶点坐标,颜色还是法线方向?
在不说明的情况下是无法确定的,如果写成类似:half4 c: 顶点坐标; 这种形式,就很明确了。
程序输入会涉及的语义:
POSITION: 用模型空间顶点坐标填充变量
NORMAL: 用模型空间法线方向填充变量
TANGENT: 用模型空间切线方向填充变量
COLOR: 用模型颜色填充变量
TEXTURE0: 用模型的第一套纹理坐标(uv)填充变量
TEXTUREn: 用模型的第n套纹理坐标(uv)填充变量
顶点着色器输入会涉及的语义:
SV_POSITION: 该变量存放了裁剪空间中的顶点坐标,SV_开头的为系统数值语义
COLOR0: 该变量存放的数据意义用户可自定义,一般是存放颜色信息
TEXTURE0: 该变量存放的数据意义用户可自定义,一般是存放纹理坐标(uv)信息
片元着色器输出会涉及的语义:
SV_TARGET: 将输出值存储到渲染目标中,等同于dx9的COLOR,SV_开头的为系统数值语义
参考
《Shader入门精要》5.2,5.4
语义 - Win32 apps | Microsoft Learn