Unity中HLSL代码块的基本知识归纳整理

Unity中HLSL代码块的基本知识归纳整理

着色器语义

编写 HLSL 着色器程序时, 输入和输出变量需要通过语义来表明 其“意图”。这是 HLSL 着色器语言中的 标准概念。

语义是附加到着色器输入或输出的字符串,用于传达有关参数预期用途的信息。 在着色器阶段之间传递的所有变量都需要语义.

顶点着色器输入语义

主顶点着色器函数(由 #pragma vertex 指令表示)需要在所有输入参数上都有语义。 这些对应于各个网格数据元素,如顶点位置、法线网格和纹理坐标。

对于 Cg/HLSL 顶点程序, 网格顶点数据作为输入传递给顶点 着色器函数。每个输入都需要有指定的语义:例如,POSITION 输入表示顶点位置,NORMAL 表示顶点法线。

通常,顶点数据输入在结构中声明,而不是 逐个列出。
几个常用的顶点结构:

  • appdata_base:位置、法线和一个纹理坐标。
  • appdata_tan:位置、切线、法线和一个纹理坐标。
  • appdata_full:位置、切线、法线、四个纹理坐标和颜色。

要访问不同的顶点数据,需要自己声明顶点结构,或者将输入参数添加到顶点着色器。顶点数据由 Cg/HLSL 语义标识,并且必须来自以下列表:

  • POSITION 是顶点位置,通常为 float3 或 float4。
  • NORMAL 是顶点法线,通常为 float3。
  • TEXCOORD0 是第一个 UV 坐标,通常为 float2、float3 或 float4。
  • TEXCOORD1TEXCOORD2TEXCOORD3 分别是第 2、第 3 和第 4 个 UV 坐标。
  • TANGENT 是切线矢量(用于法线贴图),通常为 float4。
  • COLOR 是每顶点颜色,通常为 float4。

示例:
我们在unity中创建一个‘Unlit Shader’,可以看见这一部分(我使用的unity版本是2019):

struct v2f
            {
   
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

从这一部分可以发现,当我们需要读

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨亦妖_JRegn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值