1、引用格式:张淮声,余莉基于邻接三角形的图形曲面细分单元设计J.微电子学与计算机,2023,40(10):48-55ZHANG HS,YU L.Tessellation unit design based on adjacent trianglesJ.Microelectronics&Computer,2023,40(10):48-55.DOI:10.19304/J.ISSN1000-7180.2022.0620基于邻接三角形的图形曲面细分单元设计张淮声1,余莉2(1 格兰菲智能科技有限公司,上海 201203;2 上海建桥学院 信息技术学院,上海 201306)摘要:针对图形处理芯片(GPU)
2、中的曲面细分单元生成顶点数量过多的问题,提出一种基于三角形邻接关系的几何细分策略,称为 TSTESS(Triangle Strip on Tessellation),其主要流程为,把细分块按照从外向内顺序拆分为多个环,对每个环生成多个梯形结构,每个梯形生成大量连续的三角形,通过有限自动机根据三角形的绕向和相邻信息,提取出它们的共有顶点,构成连续的三角形条带并输出.TSTESS 方法减少了顶点的生成数量,有利于后期的计算和存储.通过实验测试在各种细分参数的情况下,该方法生成的顶点数量只相当于传统的三角形列表方法的50%65%左右,可提高细分单元的执行效率,并且易于使用硬件描述代码融入到已有的 G
3、PU 设计中,便于曲面细分单元输出的三角形条带获得硬件加速.关键词:曲面细分;三角形条带;环;梯形块;顺时针;逆时针中图分类号:TN402 文献标识码:A 文章编号:1000-7180(2023)10-0048-08Tessellation unit design based on adjacent trianglesZHANG Huaisheng1,YU Li2(1 Glenfly Technologies INC.,LTD,Shanghai 201203,China;2 Department of Information Technology,Shanghai Jianqiao Colle
4、ge,Shanghai 201306,China)Abstract:To solve the problem that the number of vertices generated by the Tessellation unit of GPU is too large,wepropose a geometric subdivision strategy based on the adjacency relationship of triangles,which is called TSTESS(TriangleStrip on Tessellation).Its main process
5、 is to split the subdivision patch into multiple rings from outside to inside,generatemultiple trapezoids for each ring,and then generate a large number of continuous triangles for each trapezoid.Based on thewinding direction and adjacent information,the finite automata extracts their common vertice
6、s to form continuous trianglestrips and then output them.TSTESS approach reduces the number of vertices which is conducive to later calculation andstorage.Experimental results show that with various subdivision parameters,the number of vertices generated by ourmethod is 50%65%of that of the traditio
7、nal method,which can improve the execution efficiency of the Tessellation unit,furthermore,it is easy to use the hardware description codes to integrate into the existing GPU design,so that the trianglestrips output by the Tessellation unit could be hardware accelerated.Key words:Tessellation;Triang
8、le Strip;Ring;Trapezoid;Clockwise(CW);Counter Clockwise(CCW)1引言图形处理芯片(Graphics Processing Unit,GPU)常用于三维场景的加速绘制,能够处理曲面细分输出的大量几何图元.曲面细分(Tessellation)是一种表现物体细节的有效方法,通过在物体表面自动生成大 收稿日期:2022-10-06;修回日期:2022-12-05基金项目:上海市“晨光计划”基金项目(AASH1702);上海市教委基金项目(JXGG202064)40 卷 第 10 期微 电 子 学 与 计 算 机http:/Vol.40No.10
9、2023 年 10 月MICROELECTRONICS&COMPUTEROctober 2023量的新顶点,使得模型表面变得或者细腻顺滑(例如面部),或者高低不平(例如地形、海面),增强了绘制真实感.在上世纪末本世纪初期,学者们对曲面细分算法进行深入研究,提出了多种插值顶点的方法来构造表面,例如 N-Patch 曲面算法,根据三角形顶点的法线来生成曲面的顶点1;贝塞尔曲面,根据贝塞尔曲线的公式计算顶点的位置2;通过递归算法逼近Catmull-Clark 极限曲面3.这些算法获得的细分效果很好,但是计算量很大,难以在绘制中实时计算出来.文献 4 提出的算法是一种简化的算法,使得实时绘制成为可能.
10、微软在 2010 年提出的 D3D11 绘制平台5,除了传统的顶点着色器(Vertex Shader,VS)、像素着色器(Pixel Shader,PS)以外,还基于文献 4 的方法增加了曲面细分的重要功能,易于程序员的实现,实时绘制效果也不错.近几年来得到大规模的推广,其它的绘制平台,例如 OpenGL、OpenES、Vulkan6等也都是采用了该方法.目前,主流的 GPU 已经把曲面细分功能加入到图形绘制流水线中,并且被应用到实际的研发工作中712.GPU 芯片中的曲面细分硬件单元 TESS 是该方法的核心,TESS 可根据输入的细分参数,实时生成大量的新顶点,然后再通过 DS 计算顶点的
11、空间位置和颜色,开发效率很高.但是,TESS 生成的顶点数量非常大,这样会对后续的计算带来一定的压力.输出的顶点一般构造成三角形列表(Triangle List)的形式,假设 TESS 生成了 n 个三角形,那么顶点数目将是3n 个,数量很大.TESS 生成的三角形一般紧密排列并且相互连接,考虑到这些三角形的邻接关系,本文提出一种TSTESS(Triangle Strip on Tessellation)构造方法,通过有限自动机分别构造顺时针和逆时针绕向的三角形条带.由于输入的细分参数的任意性,可能会构造出多组三角形条带,使得实际应用中,最终得到顶点数量会多于 n+2 个,但是少于 3n.实验
12、结果表明,该方法生成的顶点数只相当于传统方法的 50%60%左右,大大减少了顶点数目,减轻了后续的绘制和计算压力.TSTESS 可认为是一种 TESS 的升级版本,硬件实现难度不大,在 GPU 芯片设计中,研发人员可采用硬件 VerlogHDL 语言对 TESS 进行改进,就可把该方法合并到 GPU 已有的图形流水线中.2曲面细分流水线简介在图形流水线引入曲面细分模块之前,开发人员经常使用几何着色器 GS(Geometry Shader)来生成几何的细节信息.GS 是 D3D10 的重要着色器,可以通过编写着色程序,生成新的顶点,但它是一个通用型的模块,生成的算法过于复杂,执行时间长,不利于实
13、时绘制.微软在 2010 年发布的 D3D11 绘制平台中引入了曲面细分模块,包括两个新的着色器:外壳着色器(Hull Shader,HS)和区域着色器(Domain Shader,DS),和一个曲面细分硬件单元(TESS),大幅度地加速了细分曲面的构造.图 1 就是其基本的绘制流水线,虚线框中是新增加的细分模块,包含 HS、DS 和TESS 三部分,其中 HS 完成曲面细分的预计算过程,DS 是细分的后处理过程.HS 对每个细分块(Patch)计算出多个控制点(Control Points,CPs)和细分参数(Patch Constants,PCs),细分参数 CPs 传送到TESS 中,可
14、计算出新顶点的二维 UV 坐标值;控制点 PCs 将传送到 DS 中,DS 根据控制点和 TESS 输出的顶点 UV 坐标值,插值出最终的三维坐标以及颜色等属性信息.DS 再把生成的新顶点数据,输出到GS 中,进 行 后 期 的 几 何 处 理.整 个 细 分 模 块(HS,TESS,DS)无缝地嵌入到图形流水线中,用户可以选择打开或者关闭该细分模块,如果关闭,那么 VS的输出将直接进入到 GS,从而无缝兼容各种类型的绘制软件.输入组装单元(IA)顶点着色器(VS)外壳着色器(HS)细分单元部件(TESS)区域着色器(DS)几何着色器(GS)光栅化部件(Raster)像素着色器(PS)输出合并
15、单元(OM)CPsPCsTessellation图 1包含曲面细分模块的 D3D 绘制流水线Fig.1 D3D rendering pipeline including tessellation unit第 10 期张淮声,等:基于邻接三角形的图形曲面细分单元设计49 用户可以定义三种细分块 Patch:平行线块Isoline Patch,三角形块 Triangle Patch 和方块 QuadPatch,细分单元 TESS 可根据用户定义的细分块类型输出三种几何拓扑元素:点 Point,线 Line 和三角形Triangle.图 2 是三种细分块的示例.(a)(b)(c)图 2三种细分块的实
16、例(a)Isoline Patch 的细分示例(b)Triangle Patch 的细分示例(c)Quad Patch 的细分示例Fig.2 Three kinds of tessellation patch cases(a)result of isolinepatch(b)result of triangle patch(c)result of quad patch 图 2(a)所示的是输入类型为 Isoline Patch 的一个细分结果,需要两个细分参数:表示生成线数量的 detail 信息和每根线的顶点的密度信息 density.Isoline Patch 主要用于毛发、草地等的生成,
17、所以主要的输出类型就是线 line,这个方法生成的顶点难以进一步减少,不是本文的讨论重点.图 2(b)所示的是 Triangle Patch 的一个细分结果,需要四个细分参数:三个外部参数和一个内部参数,控制着三条外边和内部边的细分力度,所有的参数值必须是 1 到 64 之间.这种细分块可以输出 Point、Line 和 Triangle 三种模式,但是在实际绘制场景中,Triangle 是最常用的结构,可以表现出物体的凹凸表面、高低起伏的地形、海面等.常规的方法是表示为三角形列表的形式(Triangle Lists),但是生成的顶点数量很大.此外,用户还能够指定三角形的绕向,是顺时针(CW)
18、或者逆时针(CCW),从而得到不同方向的三角形序列.图 2(c)是方块 Quad Patch 的一个细分结果.Quad Patch 需要六个细分参数:四个外部参数和两个内部参数,所有参数也必须是 1 到 64 之间.QuadPatch 的细分结果与 Triangle Patch 类似,主要也是生成物体的表面细节信息,常用三角形来表示.本文将以 Triangle Patch 和 Quad Patch 为研究目标,讨论如何利用三角形的邻接性,生成三角形条带,尽量减少顶点的数目.3曲面细分单元三角形条带的构造方法 3.1曲面细分单元的流程设计本文提出的 TSTESS 方法,主要针对 Triangle
19、Patch 和 Quad Patch 生成三角形条带进行研究.设定细分块的左下点为原点,u 轴垂直向上,v 轴水平向右,如图 3 所示,是三角形块(Triangle Patch)和四边形块(Quad Patch)的两种细分示意图,每一圈的梯形条带称为环(Ring).首先需要确定细分的环数,然后从外向内依次对每个环进行三角形的细分操作.其中细分的环数,可根据外部和内部参数的加权平均得到.Ring1Ring0Ring2Ring0Ring1Ring2Trapzoid0Trapzoid2Trapzoid3Trapzoid1vuTrapzoid0Trapzoid1Trapzoid2(a)(b)图 3细分
20、块的环(a)三角形块的环(b)四边形块的环Fig.3 Rings of tessellation patches(a)rings of triangle patch;(b)rings of quad patch 对于每个环,则按照从右向左、从下向上的顺时针方向执行(如图 3 中的箭头所示).每个环 Ring 包含多个梯形块,称作 Trapezoid,梯形的长边和短边分别使用外部和内部的细分参数.如图 3(a)中的三角形块,对于三个梯形的细分顺序依次为 Trapezoid0、Trapezoid1和 Trapezoid2.细分完三个梯形块后,再继续处理内部的更小的环,直到完成最内部的一个环,最中心
21、的内部环一般是一个简单的三角形,或者退化为一个中心点.对于四边形块 Quad Patch,每个环包含四个梯形,如图 3(b)所示,按照顺时针方向依次细分 Trapezoid0、Trapezoid1、Trapezoid2和 Trapezoid3四个梯形,然后再继续细分内部的环,直到细分完毕.最中心的环一般退化为一个小方块,或者是一条线.其曲面细分单元的执行步骤如图 4 所示:(1)外壳着色器 HS 把当前细分块 Patch 的多个控制参数 PCs 输出到细分单元;(2)细分单元根据输入的参数 PCs,确定 Patch 的环数;(3)对所有环按照从外向内的顺序依次处理,进入(4);如果所有环均处理
22、完毕,那么该 Patch 结束,可以细分下一个 Patch;(4)对每个环,按照顺时针方向生成多个梯形;(5)根据 Patch 的类型进行判断生成梯形,如果是三角形块,那么每个环可以生成 3 个梯形,如果是四50微电子学与计算机2023 年边形块,可以得到 4 个梯形;(6)对每个环得到的多个梯形,依次处理,进入(7);如果该环所有的梯形处理完毕,那么跳转到下一个环,回到(3);(7)对每个梯形进行三角形条带化;(8)每个三角形条带可得到一系列的顶点,输出到区域着色器 DS,处理完该梯形的所有三角形条带后,跳转到下一个梯形(6),直到该环的所有梯形处理完毕.TSTESS 的重点是第(7)步,如
23、何对每个梯形进行三角形条带化.下面将首先介绍三角形条带化的原理,然后构造两种有限自动机(CW 和 CCW)来完成该工作.3.2三角形条带的原理传统的 TESS 单元,是直接生成独立的三角形,由于三角形的数量很大,生成的顶点数量也很多,而这些顶点将进入到区域着色器 DS 中继续计算.为了减少顶点数量,降低对区域着色器 DS 的压力,本文通过构造邻接三角形条带,在三角形总数不变的前提下,有效减少三角形的顶点数量.而且目前主流的 GPU,均支持三角形条带的直接访问和绘制,所以用三角形条带表示 Patch 的细分结果,能够和已有的图形流水线无缝结合.TESS 生成的细分三角形,是相互邻接的,三角形之间
24、的顶点重复性很高,假设最终的三角形数量为 n,如果是独立三角形的方式,那么需要 3n 个顶点才能表示;如果是三角形条带,从理论上说,最少只需要n+2 个顶点即可.但是实际上由于顶点绕向的限制,可能会生成多个三角形条带,实际应用中,最终得到顶点数量会多于 n+2 个,但是少于 3n.以图 5 为例,假设所有三角形顺时针旋转走向,按照从左到右的顺序将生成 4 个独立的三角形,分别为:V0V1V2,V1V4V2,V1V3V4,V3V5V4.共需要3*4=12 个顶点来构造它们.这四个三角形是互相邻接的,按照三角形条带化的理论,那么可以仅需 6 个顶点即可,但是由于三角形条带化依赖三角形的拓扑连接关系
25、,可能需要插入分割标记重新构造新的三角形条带,使得顶点数会比单一情况稍多些.对于该例子,将得到两个三角形条带,V0V1V2V4,cut,V1V3V4V5,总共需要存储 8 个顶点,还是比独立的三角形要少.这里 cut 是分割标记,一般用 1 bit 表示,记录在上个三角形条带的最后一个顶点上(V4),不需要占用额外的存储空间.V0V1V2V3V4V5图 5四个相邻的三角形,顺势针绕向Fig.5 Four adjacent triangles with CW winding direction 下面,将论述如何对梯形块 Trapezoid 构造出三角形条带.3.3通过有限自动机构造三角形条带化T
26、STESS 对于每个梯形块 Trapezoid 按照从右向左、从下向上的顺时针方向,进行三角形的条带化.每个梯形块根据细分参数生成一系列的顶点,检查预先设置的三角形绕向,是顺时针 Clock Wise(CW)还是逆时针 Counter Clock Wise(CCW),选择不同的方案进行三角形的条带化.图 6 是一个梯形块按照 CW 方式生成三角形的例子,按照从右向左的顺序,生成多个三角形,每个顶点都有一个 UV 坐标.通过 TS 能够生成 8 个顶点,分别标记为 V0,V1,V2,V3,V7;但是为了构造出三角 外壳着色器(HS)(1)输出控制参数 PCs(2)确定环的数目(3)环数循环YPa
27、tch end(5)类型判断(4)生成梯形N三角形块每个环生成3 个梯形每个环生成4 个梯形四边形块(6)梯形循环(7)三角形条带化Y(8)输出顶点N区域着色器(DS)控制点 CPs细分单元图 4细分单元的执行流程Fig.4 The execution pipeline of tessellation unit第 10 期张淮声,等:基于邻接三角形的图形曲面细分单元设计51 形,仅仅离散的顶点是不够的,TESS 需要按照邻接顺序得到6 个三角形,依次为V0V1V2,V1V3V2,V2V3V4,V3V5V4,V5V6V4,V6V7V4,因此 TESS 共需要生成18 个顶点,才能得到该梯形块的所
28、有三角形表示.其中很多点被重复使用,浪费了计算和存储.V7V6V5V3V1V0V4V2vuIOIXXOOIOOIOOI内边外边图 6梯形块的 CW 三角形条带生成示例Fig.6 Example of CW triangle strip generation for trapezoidalpatch 考虑到这些三角形是相互邻接的,之间存在共用的顶点.为了能够生成合适的三角形条带,定义了两种类型的三角形,分别称为 IOI 和 OOI 的三角形,其中 I 表示生成的点在梯形的内边(短边),O 表示生成的点位于梯形的外边(长边),例如图 6 中的 V0,V1位于梯形的外边,而 V2位于梯形的内边,这样
29、得到的V0V1V2就是一个 OOI 三角形;V3位于梯形的外边,而 V2,V4位于梯形的内边,得到的V2V3V4就是一个 IOI 三角形.这里先分析 CW 的情况,图 7 左边表示了V0V1V2分别为 IOI 和 OOI 的绕向情况,右边是一个 CW 的有限自动机的示意图,总共 4 种状态,根据当前三角形是 IOI 还是 OOI 分别进行跳转.可以利用该有限自动机,实现 CW 的三角形的条带化.V0V1V2IOIV2V1V0OOIOOIIOI/OOIIOIOOIvnvnvnIOIvn,cutvn,cutvn,cutIOI1stTriv0,v1,v22ndTriOOIIOIOOI图 7CW 三角
30、形生成的有限自动机Fig.7 Finite automata for CW triangle generation 该有限自动机的执行过程为:Step1:首先从第一个结点(1st Tri)开始,构造出第一个三角形V0V1V2,这三个顶点作为三角形条带的起始三个顶点,无论该三角形是 IOI 或者 OOI 的三角形,都会跳转到第二个结点(2nd Tri),进行 Step2的操作;Step2:对于一个新顶点 Vn,将和前一个三角形的两个顶点 V1和 V2,构造出一个新三角形.判断新三角形的连接顺序,是 IOI 还是 OOI.如果是 IOI,那么形成的三角形为V1V2Vn,记录该 Vn到三角形条带中,
31、并记录 cut 标记,表示该三角条带结束,回到 Step1,重新开始下一个三角条带;如果是 OOI,那么形成的三角形为V1VnV2,记录 Vn到三角形条带中,并跳转到第三个结点(OOI 结点),进入 Step3;Step3:对于一个新顶点 Vn构造出的三角形,并判断其是 IOI 还是 OOI,如果是 OOI,那么记录 Vn到三角形条带中,并记录 cut 标记,表示该三角条带结束,回到 Step1,重新构造下一个三角条带;如果是 IOI,那么记录 Vn到三角形条带中,并进入到第四个结点(IOI 结点),进入 Step4;Step4:对于一个新顶点 Vn构造出的三角形,并判断其是 IOI 还是 O
32、OI,如果是 OOI,那么记录 Vn到三角形条带中,此时回到 Step3,从第三个结点(OOI结点)再次判断下一个三角形;如果是 IOI,那么记录 Vn到三角形条带中,并记录 cut 标记,回到 Step1,重新开始下一个三角条带.以上过程循环执行,直到整个梯形块顶点生成完毕,再开始下一个梯形块的三角形细分操作.以图 6 为例,第一个三角形(V0V1V2)完成后,进入 Step2,第二个三角形为V1V3V2,连接关系为 OOI,那么记录第二个顶点 V3到三角形条带中,并跳转到Step3;接着V2V3V4是一个 IOI 的三角形,记录第三个顶点 V4到三角形条带中,并进入到 Step4;V3V5
33、V4是一个 OOI 的三角形,记录第二个顶点 V5到三角形条带中,又回到 Step3;V5V6V4是一个OOI 的三角形,那么记录第二个顶点 V6到三角形条带中,并接上 cut 标记,表示该三角条带结束,回到Step1,这样得到一个三角形条带 V0V1V2V3V4V5V6,cut.接着,对于最后一个三角形V6V7V4,没有后继顶点了,只能单独作为一个三角形条带,最后得到所有的条带为:V0V1V2V3V4V5V6,cut,V6V7V4,cut.这样,通过该 CW 的有限自动机只需要记录 10 个顶点,就可以表示这 6 个三角形,只相当于传统方法所用顶点的10/(6*3)=55.6%,有效地减少了
34、生成顶点的数量.对于 CCW 的情况,也设计一个类似的有限自动机,如图 8 所示,同样定义两种 CCW 方向的三角形,IIO 和 OIO,IIO 表示 V0,V1两点位于梯形的内边,52微电子学与计算机2023 年而 V2位于梯形的外边;OIO 表示 V0,V2两点位于梯形的外边,而 V1位于梯形的内边.其有限自动机的执行过程与 CW 类似,不再详述.IIOOIOIIOIIO/OIOOIOIIOOIOOIOIIOOIOIIOV0V0V1V1V2V2vnvnvnvn,cutvn,cutvn,cut1stTriv0,v1,v22ndTri图 8CCW 三角形生成的有限自动机Fig.8 Finite
35、 automata for CCW triangle generation 图 9 是一个 CCW 梯形块的细分例子,与图 6 的不同在于,这里的三角形均是逆时针 CCW 绕向,按照从右向左的顺序,生成多个逆时针 CCW 的三角形,每个顶点都有一个 UV 坐标值.总共需要 8 个顶点(标记为 V0,V1,V2,V3,V7)来表示这 6 个三角形,依次 为V0V1V2,V2V1V3,V1V4V3,V3V4V5,V5V4V6,V6V4V7.因此常规方法共需要输出 18 个顶点,才能得到该梯形块完整的三角形细分结果.而 TSTESS考虑到顶点之间的连接关系,只需要表示为三角形条带即可,根据图 8 所
36、示的 CCW 有限自动机,可构造为 V0V1V2V3,cut,V1V4V3V5,cut,V5V4V6V7,cut,其 中 cut 表示该三角形条带结束,这样只需要 TESS 输出 12 个顶点就可以表示这 6 个三角形,相当于传统方法所用顶点的 12/(6*3)=66.7%.V7V6V5V3V2V0V4V1vuIIOXXOIOOIOOIO内边外边图 9梯形块的 CCW 三角形条带生成示例Fig.9 Example of CCW triangle strip generation for trapezoidalpatch 4实验结果分析首先编写了曲面细分 TSTESS 的模拟程序,在CPU 为
37、Intel Core i7、内存 16GB 的计算机上运行.由于 Triangle Patch 和 Quad Patch 的基本单位都是梯形块(Trapezoid),所以只需要测试梯形块在不同细分参数下的生成结果.图 10 记录了在内外参数均相同的条件下,一个梯形块的细分情况,横坐标为均匀分布的细分参数,分别为 4、8、12、.、64,其中的柱状图分别是TSTESS 方法(strip_vtx_Num)和传统的三角形列表的顶点数目(list_vtx_Num),它们之间的比例使用折线段表示(ratio=strip_vtx_Num/list_vtx_Num).9047400350300250200输
38、出顶点1501005004 8 12 16strip_vtx_Numlist_vtx_Numstrip/list ratio20 24 28 32细分参数36 40 44 48 52 56 60 64Ratio48.0%49.0%50.0%51.0%52.0%53.0%54.0%55.0%56.0%Trapezoid resultssame factors图 10梯形块在不同参数下的细分结果,内外参数均相同Fig.10 Results of trapezoidal patches under different factors.Their internal and external facto
39、rs are equal.这里举例说明图 10 的含义,例如细分参数为 16的 时候(图 示 中 的 虚 线 框),传 统 方 法(list_vtx_Num)将输出 90 个顶点,共 90/3=30 个三角形,而TSTESS 方法(strip_vtx_Num)只需要输出 47 个顶点,其比例 ratio=47/90=52%.随着细分参数的增大,两个方法的输出顶点数量也会相应增加,但两者之间的比例稳定在 50%左右.总体来看,在不同细分参数情况下,本文方法生成的顶点仅相当于传统方法的50%55%.因为内外细分参数一致,所以产生的三角形排列比较均匀,有利于条带化.在这种条件下,TSTESS 的压缩
40、率效果很好.图 11、图 12 记录了较小和较大的内部参数的细分结果,依然选择均匀变化的外部参数(4、8、12、60、64),图 11 的内部参数保持为 4,而图 12 的内部参数设为最大值 64.图 11 两种方法的顶点数目比例变化较大,在 50%65%之间,这是因为细分参数较小的时候,产生的三角形比较少,因此三角形条带化减少的顶点数目有限,压缩比例较差;但当外部参数增大后,随着三角形数目的增加,压缩比例接近于 55%.当内部参数设为 64 时候,产生的三角形很多,所以随着外部参数增加后,压缩比逐渐达到了 50%,如图 12 所示.通过实验发现,本文提出的 TSTESS 三角形条带方法,大幅
41、度地减少了传统的三角形列表生成的顶点第 10 期张淮声,等:基于邻接三角形的图形曲面细分单元设计53 数目,经过条带化处理后,得到的顶点数目仅相当于三角形列表的 50%65%.为了验证本方法的有效性,采用了 Verilog HDL语言进行模块化设计,并融入到本公司已有的 GPU硬件描述代码中,然后进行逻辑综合,得到门级网表数据,在 Cadence Palladium Z1 硬件加速模拟器上进行仿真,基础频率为 450 MHz.因为 TSTESS 是功能性相关的,和时序没有关系,所以当输入和模拟程序同样的细分参数时,硬件仿真能够得到和上述讨论一样的结果.此外,分别使用传统方法(TESS)和本文方
42、法(TSTESS)来测试包含曲面细分任务的 3DMark应用实例,统计了运行一帧的平均执行时间,单位为毫秒(ms),如表 1 所示,本方法在大幅度减少顶点的前提下,应用实例的总体运行时间也能获得加速,提高性能基本上在 8%15%左右.之所以不能达到前面实验 50%多的加速效果,是因为应用实例中除了曲面细分任务,还有大量的顶点处理、像素处理等任务,而 TSTESS 对这些工作没有任何加速效果.表 1 测试 3DMark 应用实例获得的执行时间,单位毫秒(ms)Tab.1 The execution time by testing 3DMark applications inmillisecond
43、s(ms)测试实例传统TESS本文TSTESS加速比3DMark_CloudGate32.629.91.093DMark11Perf_GT1235.4217.31.08FireStrike332.4301.71.10Skydriver88.776.91.15 5结束语曲面细分模块已经合并到 GPU 的图形绘制流水线中,能够实时生成物体表面细节的三角形网格.本文提出 TSTESS 方法,根据曲面细分三角形的邻接关系,通过有限自动机构造出连续的三角形条带,能够显著减少顶点的总数量,降低对后序的区域着色器 DS 的工作压力,并且目前的 GPU 硬件支持三角形条带的数据格式,因此得到的三角形条带可以直
44、接利用 GPU 硬件的功能,获得计算和绘制的加速.实验表明,该方法得到的顶点数目,只相当于传统方法的50%65%.由于在多个三角形条带之间还是有重复的顶点,TSTESS 方法尚有优化空间,对于这些重复顶点进行重用可以进一步减少顶点数量,只是硬件实现更加复杂.参考文献:VLACHOS A,PETERS J,BOYD C,et al.Curved PNtrianglesC/Proceedings of the 2001 Symposium on In-teractive 3D Graphics.Chapel Hill,NC,USA:ACM,2001:159-166.DOI:10.1145/3643
45、38.364387.1 SHIRMAN L A,SQUIN C H.Local surface interpola-tion with Bzier patchesJ.Computer Aided GeometricDesign,1987,4(4):279-295.DOI:10.1016/0167-8396(87)90003-3.2 STAM J.Exact evaluation of Catmull-Clark subdivisionsurfaces at arbitrary parameter valuesC/Proceedings ofthe 25th Annual Conference
46、on Computer Graphics andInteractive Techniques.Orlando:ACM,1998:395-404.DOI:10.1145/280814.280945.3 MORETON H.Watertight tessellation using forward dif-ferencingC/Proceedings of the ACM SIGGRAPH/EUROGRAPHICS Workshop on Graphics Hardware.Los Angeles:ACM,2001:25-32.DOI:10.1145/383507.383520.4 LUNA F.
47、Introduction to 3D game programming with5 40501001502008 12 16 20 24 28 32外部的细分参数输出顶点36 40 44 48 52 56 60 64Trapezoid resultsinside TFs=4Ratio40.0%45.0%50.0%55.0%60.0%65.0%70.0%strip_vtx_Numlist_vtx_Numstrip/list ratio图 11梯形块在不同外部参数下的细分结果,内部参数固定为 4Fig.11 Results of trapezoidal patches under differen
48、t externalfactors.Their internal factors are fixed to 4.40501001502002503003504008 12 16 20 24 28 32外部的细分参数输出顶点36 40 44 48 52 56 60 64Trapezoid resultsinside TFs=64Ratio40.0%45.0%50.0%55.0%60.0%65.0%70.0%strip_vtx_Numlist_vtx_Numstrip/list ratio图 12梯形块在不同外部参数下的细分结果,内部参数固定为 64Fig.12 Results of trapez
49、oidal patches under different externalfactors.Their internal factors are fixed to 64.54微电子学与计算机2023 年DirectX 11M.Dulles:Mercury Learning&Informa-tion,2012:864.The Khronos Vulkan Working Group.Vulkan-A Spe-cification (with all registered Vulkan extensions)EB/OL.(2017-05-21)2022-01-21.https:/www.khro-
50、nos.org/registry/vulkan/specs/1.0-extensions/html/chap23.html.6 张兵强,张立民,艾祖亮,等.屏幕空间自适应的地形Tessellation绘制J.中国图象图形学报,2012,17(11):1431-1438.DOI:10.11834/jig.20121113.ZHANG B Q,ZHANG L M,AI Z L,et al.Screen-space adaptive tessellation for terrain renderingJ.Journal of Image and Graphics,2012,17(11):1431-1