Unity中Shader语义的理解

前言

        以下内容主要是个人理解,如有错误,欢迎严厉批评指正。

一、语义的形式在Shader中是必要的吗?

        不是必要的。

        使用HLSL和CG语言来编写Shader需要语义,使用GLSL编写Shader不需要。

二、语义的意义?

  • 语义是什么?        

        语义实际上是特定数据存储位置的标记。

  • vertex对应方法的输入结构体中的语义

        通常在  vertex  对应的方法(就是通常命名为  vert  的那个方法)中使用的输入结构体中的语义与内容之间是严格相关的,参考下面的代码中的结构体:

struct appdata
{
	float3 pos:POSITION;
	float2 uv:TEXCOORD0;
};

        在HLSL语言环境下,可以认为应用程序向GPU传递数据时,事先约定好在POSITION语义所对应的存储位置是存放模型基于自身坐标的顶点的位置信息。类似的,TEXCOORD0这个语义所对应的存储位置也是约定好存放模型默认的uv信息的。当一个结构体定义的目的是向  vertex  对应的方法中传递信息的时候,所有变量对于这些约定必须严格遵循,否则取不到正确的数据!

  • 从vertex对应的方法向fragment对应的方法传递内容的结构体中的语义

        如果定义的结构体的用途是将数据从vertex对应的方法处理好再传递给fragment对应的方法(就是通常命名为  frag  的那个方法),就只有一个SV_POSITION语义是约定好的,这个语义对应的是顶点在裁剪空间中的位置。其它语义并没有约定,所谓语义只对应了一个存储位置,比如下面代码中的uv使用了语义TEXCOORD0,其实你使用NORMAL啥的也行。

struct v2f
{
	float4 pos:SV_POSITION;
	float2 uv:TEXCOORD0;
};
  • fragment对应的方法的返回值的语义

        对于fragment对应的方法的返回值, SV_TARGET 的语义约定也是必须的,因为程序后续要在SV_TARGET所对应的存储位置取值。示例代码如下:

float4 frag(v2f IN):SV_TARGET
{
	float4 texColor = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,IN.uv);
	return texColor * _MainColor;
}

常用语义:

        POSITION           表示这个变量用于存储模型基于自身坐标的顶点的位置信息。

        SV_POSITION    指定顶点的位置,通常用于顶点着色器输入。

        SV_TARGET       指定像素颜色输出的目标缓冲区,通常用于像素着色器输出。

        TEXCOORD        指定纹理坐标,用于从纹理中采样颜色。

        COLOR                指定顶点或像素的颜色。

        NORMAL             指定顶点或像素的法线向量。

        TANGENT           指定顶点或像素的切线向量。

        BINORMAL         指定顶点或像素的副法线向量。

        DEPTH                深度值

相关推荐

  1. UnityShader语义理解

    2023-12-13 18:56:02       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-13 18:56:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-13 18:56:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-13 18:56:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-13 18:56:02       20 阅读

热门阅读

  1. anaconda3 升级python版本

    2023-12-13 18:56:02       38 阅读
  2. SQL查询语句

    2023-12-13 18:56:02       33 阅读
  3. 什么是nginx

    2023-12-13 18:56:02       38 阅读
  4. PyQt5程序的打包和发布

    2023-12-13 18:56:02       38 阅读
  5. HSRP热备份路由协议

    2023-12-13 18:56:02       37 阅读