Tessellator (TS) 阶段
细化器 (TS) 阶段创建代表几何图形修补程序的域的采样模式,并生成连接这些样本的一组较小对象(三角形、点或线)。
用途和用法
下图重点显示了 Direct3D 图形管道的阶段。
下表显示分割阶段的进度。
进度从低画质细分图面开始。 进度接下来使用连接这些样本的相应几何图形修补程序、域样本和三角形重点显示输入修补程序。 最后,进度重点显示与这些样本对应的顶点。
Direct3D 运行时支持实现分割的三个阶段,通过分割可将低画质细分图面转换为 GPU 上的高画质基元。 分割将高阶图面平铺(或分裂)成合适的结构以进行渲染。
各分割阶段一起将高阶图面(保留了模型简易度和效率)转换为多个三角形,从而在 Direct3D 图形管道中进行精确渲染。
分割使用 GPU 根据构建于四边形修补程序、三角形修补程序或等值线的图面计算更加精细的图面。 为了接近高阶图面,每个修补程序会通过分割因子细分为三角形、点或线。 Direct3D 图形管道利用三个管道阶段实施分割:
- 外壳着色器 (HS) 阶段 - 可编程的着色器阶段,可生成与各个输入修补程序(四边形、三角形或线)对应的几何修补程序(和修补程序常数)。
- 细化器 (TS) 阶段 - 固定功能管道阶段,创建代表几何图形修补程序的域的采样模式,并生成连接这些样本的一组较小对象(三角形、点或线)。
- 域着色器 (DS) 阶段 - 可编程的着色器阶段,计算与各个域样本对应的顶点位置。
通过在硬件中实施分割,图形管道可评估更低画质(多边形数量更少)模型并以更高画质进行渲染。 在可完成软件分割时,由硬件实施的分割可生成大量的视觉细节(包括位移映射的支持),无需为模型大小添加视觉细节,也不会影响刷新率。
分割的优点:
- 分割能够节约大量的成本和带宽,进而让应用程序从低分辨率的模型渲染更高画质的图面。 在 Direct3D 图形管道中实施的分割技术还支持位移映射,这能够产生丰富的图面细节。
- 分割支持可扩展的渲染技术,例如持续或视点相关精细程度(无需停机即可计算)。
- 分割能以较低频率执行高成本计算(在较低画质模型上计算),进而改善性能。 其中包括使用融合变形或变形目标实现逼真动画的混合计算,或者碰撞检测或柔体动力学的物理计算。
Direct3D 图形管道在软件中实施分割,能够将 CPU 的工作负担转移至 GPU。 如果应用程序实施大量的变形目标和/或更加复杂的蒙皮/变形模型,这将能够显著改善性能。
细化器是由一种固定功能阶段,通过将外壳着色器绑定至管道进行初始化。 (请参阅如何:初始化细化器阶段)。 细化器阶段旨在将域(四边形、三角形或线)分割为很多较小对象(三角形、点或线)。 细化器能够在标准化(零到一)协调系统中平铺规范域。 例如,四边形域细化为单位正方形。
细化器 (TS) 阶段中的各个阶段
细化器 (TS) 阶段的运行有两个阶段:
第一阶段使用 32 位浮点算法处理分割因子、修复制圆问题、处理极小因子、减少并合并因子。
第二阶段根据所选分区类型,生成点或拓扑列表。 这是细化器阶段的核心任务,通过定点算法使用 16 位分数。 定点算法可实现硬件加速,同时维持可接受的精度。 例如,对于 64 米宽修补程序,该精度可实现 2 毫米分辨率的点。
分区类型 范围 分数_奇数 [1...63] 分数_偶数 分割因子范围:[2..64] Integer 分割因子范围:[1..64] 幂 2 分割因子范围:[1..64]
分割通过两个可编程的着色器阶段实施:外壳着色器和域着色器。 这些着色器阶段通过在着色器模型 5 中定义的 HLSL 代码进行编程。 着色器目标为:hs_5_0 和 ds_5_0。 标题创建着色器,然后从在着色器绑定至管道时传递至运行时的编译着色器提取硬件代码。
启用/禁用分割
通过创建外壳着色器并将其绑定至外壳着色器阶段(这会自动设置细化器阶段),进而实现分割。 要从细化修补程序生成最终顶点位置,你还需要创建域着色器并将其绑定至域着色器阶段。 启用分割后,输入汇编程序 (IA) 阶段的数据输入必须为修补程序数据。 输入汇编程序拓扑必须为修补程序常数拓扑。
要禁用分割,则将外壳着色器和域着色器设为空。 几何着色器 (GS) 阶段和流输出 (SO) 阶段均不会读取外壳着色器输出控制点或修补程序数据。
输入
在每个使用从外壳着色器阶段传入的细化因素(指定域被细分的细微程度)和分区的类型(指定用于分割修补程序的算法)的修补程序上执行一次细化器。
输出
细化器将 uv(和可选 w)坐标和表面拓扑输出到域着色器阶段。
相关主题