struct VertexIn
{float3 pos : POSITION;float4 color : COLOR;
};struct VertexOut
{float4 posH : SV_POSITION;float4 color : COLOR;
};
float4 PS(VertexOut pIn) : SV_Target//系统值,渲染目标
{return pIn.color;
}
// 顶点着色器
VertexOut VS(VertexIn vIn)
{VertexOut vOut;vOut.posH = float4(vIn.pos, 1.0f);//齐次裁剪空间,多加一维,是一个点vOut.color = vIn.color; // 这里alpha通道的值默认为1.0return vOut;
}

之前对顶点着色器仅了解一点点,后面再学习的时候,发现忘得差不多,想不起来大概,所以又重新屡了一遍思路。

齐次空间:

齐次空间是什么?

简单来说,就是在N维空间的基础上再加一维。比如说,N维向量的齐次空间就是N+1维的。但是,我们并不是随便地升维的,要是N维空间是个点,则升维时加1;如果是个向量,就加0;像三维的(2,3,1)变成(2,3,1,1)是一个四维空间下的点;若变成(2,3,1,0)则是四维空间下的一个向量。这种升维的操作主要目的是为了向量或点在高维变换后再转回低维。(一句话来说,转高维就是为了简化变换)

齐次裁剪空间又是什么?

渲染管线中进行裁剪的位置是透视投影之后,齐次除法之前。过程如下图所示:

思路很明确,齐次裁剪空间就是在透视之后,对视锥体之外的物体进行剔除的空间。透视之后如下图所示,得到摄像机的视锥体,这种空间称为视锥体裁剪空间。

所以代码中的pos和posH变量就很好理解了,下面所展示就是这些变量名的一些约定。

字母后缀 含义
L 处于物体局部空间(Local Space)
W 处于世界空间(World Space)
V 处于观察空间(View Space)
H 处于齐次裁减空间(Homogeneous space)

HLSL语义:

上面代码有一行是SV_Taregt,这是什么意思呢?SV的意思是指System Value,即系统值。还有诸如POSITION,SV_POSITION,COLOR这些都有‘ :’在前面修饰的。都是什么意思呀?那都是语义,因为着色器编程是在GPU中完成的,所以不会像CPU拥有堆栈来设置变量以存储数据,也就是说,可以把语义理解为像INT、DOUBLE的关键字。他们都是用来存储数据的。

系统语义:

System-Value语义 说明 类型
SV_ClipDistance[n] 剪辑距离数据。 SV_ClipDistance值都假定为平面的 float32 带符号距离。 基元设置仅对内插平面距离 () >为 0 的像素调用光栅化。 通过将一个或多个顶点元素的多个组件声明为SV_ClipDistance,可以同时实现多个剪辑平面 () 。 组合的剪辑和剔除距离值最多是 D3D#_CLIP_OR_CULL_DISTANCE_COUNT 组件,大多数为 D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT 寄存器。 可供读取或写入的所有着色器使用,但顶点着色器可以写入值,但不能将其用作输入。
剪辑平面属性的工作方式类似于SV_ClipDistance,但适用于所有硬件功能级别9_x及更高版本。 有关详细信息,请参阅 功能级别 9 硬件上的用户剪辑平面。
FLOAT
SV_CullDistance[n] 剔除距离数据。 如果为 (顶点元素 () 的组件) ,则每个值都假定为平面的 float32 带符号距离。 如果基元中的所有顶点的平面距离 () 为 < 0,则完全放弃基元。 可以通过将一个或多个顶点元素的多个组件 () 声明为SV_CullDistance来同时使用多个布尔平面。 组合的剪辑和剔除距离值最多是 D3D#_CLIP_OR_CULL_DISTANCE_COUNT 组件,大多数为 D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT 寄存器。 可供读取或写入的所有着色器使用,但顶点着色器可以写入值,但不能将其用作输入。 FLOAT
SV_Coverage 可以在输入、输出或两个像素着色器上指定的掩码。
对于像素着色器上的SV_Coverage,ps_4_1或更高版本支持 OUTPUT。
对于像素着色器上的SV_Coverage,INPUT 需要ps_5_0或更高版本。
uint
SV_Depth 深度缓冲区数据。 可以通过像素着色器编写。 FLOAT
SV_DepthGreaterEqual 在像素着色器中,只要深度大于或等于光栅器确定的值,就可以输出深度。 启用调整深度而不禁用早期 Z。 FLOAT
SV_DepthLessEqual 在像素着色器中,只要深度小于或等于光栅器确定的值,就可以输出深度。 启用调整深度而不禁用早期 Z。 FLOAT
SV_DispatchThreadID 定义组的每个维度的 Dispatch 调用中的全局线程偏移量。 可用作计算着色器的输入。 (只读) uint3
SV_DomainLocation 定义正在计算的当前域点外壳上的位置。 可用作域着色器的输入。 (只读) float2|3
SV_GroupID 定义 Dispatch 调用中的组偏移量,每个调度调用的维度。 可用作计算着色器的输入。 (只读) uint3
SV_GroupIndex 为给定组中的给定线程提供平展索引。 可用作计算着色器的输入。 (只读) uint
SV_GroupThreadID 定义组中每个维度的线程偏移量。 可用作计算着色器的输入。 (只读) uint3
SV_GSInstanceID 定义几何着色器的实例。 可用作几何着色器的输入。 需要实例,因为同一几何图形基元上最多可以调用几何着色器 32 次。 uint
SV_InnerCoverage 表示 (低估的保守光栅化信息,即是否保证像素完全覆盖) 。 可以由像素着色器读取或写入。
SV_InsideTessFactor 定义修补图面中的细化量。 在外壳着色器中可用于写入,并在域着色器中可用于读取。 float|float[2]
SV_InstanceID 运行时自动生成的每个实例标识符 (请参阅 使用 Direct3D 1) 0) direct3D 10 System-Generated (值 。 适用于所有着色器。
SV_IsFrontFace 指定三角形是否正面。 对于行和点,IsFrontFace 的值为 true。 例外是 (线框模式) 绘制出三角形的线条,该模式设置 IsFrontFace 的方式与在实心模式下光栅化三角形的方式相同。 可以由几何着色器写入,并由像素着色器读取。 bool
SV_OutputControlPointID 定义通过调用外壳着色器的主要入口点来操作的控制点 ID 的索引。 只能由外壳着色器读取。 uint
SV_Position 当为着色器输入声明SV_Position时,它可以指定两种内插模式之一:linearNoPerspective 或 linearNoPerspectiveCentroid,后者会导致在多重采样抗锯齿时提供质心贴靠 xyzw 值。 在着色器中使用时,SV_Position描述像素位置。 在所有着色器中可用,以获取具有 0.5 偏移量的像素中心。 float4
SV_PrimitiveID 运行时自动生成的每基元标识符 (请参阅 使用 direct3D 1) 0) 使用 System-Generated 值 (Direct3D 10 。 可以由几何图形或像素着色器写入,并由几何图形、像素、外壳或域着色器读取。 uint
SV_RenderTargetArrayIndex 呈现目标数组索引。 应用于几何着色器输出,并指示基元将由像素着色器绘制到的呈现目标数组切片。 仅当呈现目标为数组资源时,SV_RenderTargetArrayIndex才有效。 此语义仅适用于基元;如果基元有多个顶点,则使用前导顶点中的值。 此值还指示深度/模具视图的数组切片用于读/写。
可以从几何着色器写入,并由像素着色器读取。
如果为 D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizertrue,则SV_RenderTargetArrayIndex应用于馈送光栅器的任何着色器。
uint
SV_SampleIndex 采样频率索引数据。 只能由像素着色器读取或写入。 uint
SV_StencilRef 表示当前像素着色器模具引用值。 只能由像素着色器编写。 uint
SV_Target[n],其中 0 <= n <= 7 将存储在呈现目标的输出值。 索引指示要写入的 8 个可能绑定的呈现目标中的哪一个。 该值适用于所有着色器。 float[2|3|4]
SV_TessFactor 定义补丁的每个边缘上的分割量。 可用于在外壳着色器中写入,并在域着色器中读取。 float[2|3|4]
SV_VertexID 运行时自动生成的每个顶点标识符 (请参阅 使用 Direct3D 10 (Direct3D 10) ) System-Generated值 。 仅作为顶点着色器的输入提供。 uint
SV_ViewportArrayIndex 视区数组索引。 应用于几何图形着色器输出,并指示当前要写入的基元使用的视区。可以由像素着色器读取。 在将基元传递给光栅器之前,将针对索引指定的视区进行转换和剪裁。 此语义仅适用于基元;如果基元有多个顶点,则使用前导顶点的值。
如果D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizertrue,则SV_ViewportArrayIndex应用于为光栅器馈送的任何着色器。
uint
SV_ShadingRate 通过底纹速率 值定义由一个像素着色器调用为 可变着色速率第 2 层或更高版本设备写入的像素数。 可以从像素着色器读取。 可以从顶点或几何图形着色器编写。 uint

像素着色器语义:

输入 说明 类型
COLOR[n] 漫射或反射颜色。 float4
TEXCOORD[n] 纹理坐标 float4
VFACE 指示面向背的基元的浮点标量。 负值向后面,而正值则面对相机。

[!注意]
Direct3D 9 着色器模型 3.0 中提供了此语义。 对于 Direct3D 10 及更高版本,请改用 SV_IsFrontFace 。

FLOAT
VPOS 屏幕空间中的像素位置 (x,y) 。 若要将此语义 () 的 Direct3D 9 着色器转换为 Direct3D 10 及更高版本的着色器,请参阅 Direct3D 9 VPOS 和 Direct3D 10 SV_Position) float2
输出 说明 类型
COLOR[n] 输出颜色 float4
DEPTH[n] 输出深度 FLOAT

顶点着色器语义:

输入 说明 类型
BINORMAL[n] 二进制 float4
BLENDINDICES[n] 混合索引 uint
BLENDWEIGHT[n] 混合权重 FLOAT
COLOR[n] 漫射和反射颜色 float4
NORMAL[n] 普通向量 float4
POSITION[n] 对象空间中的顶点位置。 float4
POSITIONT 转换的顶点位置。 float4
PSIZE[n] 点大小 FLOAT
TANGENT[n] 正切 float4
TEXCOORD[n] 纹理坐标 float4
输出 说明 类型
COLOR[n] 漫射或反射颜色 float4
顶点雾 FLOAT
POSITION[n] 顶点在同质空间中的位置。 通过将 (x,y,z) 除以 w,在屏幕空间中计算位置。 每个顶点着色器都必须写出具有此语义的参数。 float4
PSIZE 点大小 FLOAT
TESSFACTOR[n] 分割因子 FLOAT

参考:高级着色器语言 (HLSL) - Win32 apps | Microsoft Docs

关于对齐次裁剪空间及HLSL语义的理解相关推荐

  1. UnityShader7:内置包含文件UnityCG.cginc与GG/HLSL语义

    一.包含文件 .cginc 类似于头文件,cginc 可以理解为 GC include,用 #include 指令包括进来后,就可以使用其中的变量和帮助函数,在上一章:UnityShader6:最简单 ...

  2. 基于多粒度语义交互理解网络的幽默等级识别

    论文阅读 2020 1. 解决问题 将幽默等级识别为自然语言推理任务,将幽默文本划分为铺垫和笑点两部分,提出对两者之间的关系进行建模可以显著提升模型识别幽默等级的性能. 2. 创新点(贡献) 本文基于 ...

  3. 深入浅出的web语义化理解

    写目录 前言 一:什么是语义元素? 二:为什么要语义化? 三:常用的语义元素 四:文档结构标签 五:参考 前言 很多面试官会问: 谈谈你对 HTML5语义化标签的理解. 那么本篇博客可以对你理解HTM ...

  4. HTML的语义化理解

    当我们编写HTML文档时,是否会感到有些标签总是使用得比较频繁,而另外一些标签则常常被忽视呢?这时候,HTML语义化就显得格外重要了.HTML语义化的本质是将更多的含义和结构信息显式地表达出来,提高文 ...

  5. Co-Fusion:物体级别的语义SLAM

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:robot L https://zhuanlan.zhihu.com/p/137100522 本 ...

  6. 详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    https://www.tinymind.cn/articles/120 [ 导读]目前,计算机视觉是深度学习领域最热门的研究领域之一.计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形.算 ...

  7. matlab 图像分割 提取人像_几种典型的图像处理技术(分类 目标提取 目标跟踪 语义分割 实例分割)...

    目前,在处理海上无人艇的感知系统的开发.其中,比较核心的一个部分就是基于光电的目标识别(Object Detection). 任务目标 如图所示,从包含舰艇的图片中,标识舰艇的位置 本文的学习笔记,主 ...

  8. AAAI 2020 开源论文 | 语义感知BERT(SemBERT)

    作者丨张倬胜 学校丨上海交通大学硕士生 研究方向丨自然语言理解 本文从计算语言学角度,提出使用显性语义角色信息来改善深度语言模型的建模性能,将语义角色标注用于机器阅读理解和推理任务中,提供更加丰富和精 ...

  9. 一文详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    [ 导读]目前,计算机视觉是深度学习领域最热门的研究领域之一.计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形.算法.理论.系统.体系结构),数学(信息检索.机器学习),工程学(机器人.语 ...

最新文章

  1. Open3D面向机器学习的扩展库
  2. 《统一沟通-微软-实战》-5-部署-SharePoint Server 2010
  3. bat 取得服务列表_基于IDEA热部署更新服务器Tomcat类,服务器Tomcat热更新
  4. ubuntu11.10 mysql_Ubuntu11.10下mysql+apache+PHP
  5. 求一个序列中最大的子序列_最大的斐波那契子序列
  6. pandas打印全部列_python——pandas练习题1-5
  7. LeetCode - Medium - 114. Flatten Binary Tree to Linked List
  8. display inline-block 垂直居中
  9. svn is already locked解决办法
  10. mysql 触发器trigeer_MySQL触发器trigger的使用-阿里云开发者社区
  11. javascript、jquery获取网页的高度和宽度
  12. Node.js 文档(目录)
  13. .html与.htm为网页后缀的区别
  14. 【最短路】Floyd算法:2020蓝桥最短路
  15. WPF_在APP.xaml应用资源样式
  16. linux系统镜像安装方法,linux系统安装的引导镜像制作流程分享
  17. 记录:ubuntu安装zlog及使用
  18. matlab课程论文2500字,matlab课程论文模板
  19. Adobe Flash Professional CS5挂起挂起,安装不成功
  20. 图像超分辨去噪(去雨雾)

热门文章

  1. 去中心化市场OpenBazaar如何运转
  2. python小组项目总结报告_给大家汇报一下我们学习小组的进展情况
  3. java面试宝典(综合版)
  4. Redis Cluster集群节点间通信
  5. 如何用老毛挑清除WINDOWS密码(以HP笔记本为例)
  6. 报表引擎终于做出来了!!!!!参考了根兄的文档。
  7. Word VBA自动排版(2)-通过自动查找替换去除叠字
  8. 微信小程序开发13 云开发:云原生一体化应用开发平台
  9. [计算机视觉] AprilTag 2: Efficient and robust fiducial detection(2016)论文理解
  10. eve-ng模拟器安装在部署使用