HLSL语法

语义

语义的概念

语义xxxx:+ 大写单词,是用来限定输入值的来源输出值的去向,其中那些大写单词都是系统提供的,我们需要用他们去填充我们的参数,然后传到顶点着色器和片元着色器中,进行进一步的计算,最后再通过语义作用到渲染目标上。

struct VertexIn
{
    float3 pos : POSITION;	//告诉系统将顶点坐标填充到pos中
    float4 color : COLOR;
};

struct VertexOut
{
    float4 posH : SV_POSITION;
    float4 color : COLOR;
};

比如“vertex :POSITION” ,POSITION将告诉Unity,把模型的顶点坐标填充到参数vertex中,如果没有语义来限定这些参数的输入输出,渲染器将完全不知道用户的输入输出是什么,自然会导致显示结果错误。

常用的语义

应用阶段到顶点着色器时用常用的语义如下:

  • POSITION:模型空间中的顶点坐标
  • NORMAL:模型空间中的法线方向
  • TANGENT:模型空间中的切线方向
  • TEXCOORDn:模型空间中第n组纹理坐标
  • COLOR:描述该变量是一个颜色

顶点着色器传递数据给片元着色器时常用的语义如下:

  • SV_POSITION:说明该顶点的位置在从顶点着色器输出后,后续的着色器都不能改变它的值,作为光栅化时最终确定的像素位置
  • COLOR0:输出第一组顶点颜色,不是必须
  • COLOR1:输出第二组顶点颜色,不是必须
  • TEXCOORDn:输出第n组纹理坐标,不是必须

片元着色器输出数据到unity阶段常用的语义如下:

  • SV_Target:说明输出的颜色值将会直接保存到渲染目标视图的后备缓冲区对应位置

HLSL变量命名的一些约定

在阅读HLSL代码的时候你将会遇到诸如PosWPosH这样带字母后缀的变量名,那么它们有什么含义呢?其实该字母表达了当前点或向量所处的空间:

字母后缀 含义
L 处于物体局部空间(Local Space)
W 处于世界空间(World Space)
V 处于观察空间(View Space)
H 处于齐次裁减空间(Homogeneous space)
posted @ 2025-10-13 23:50  单身喵  阅读(13)  评论(0)    收藏  举报