CN102096948A - 一种适用图形硬件的分格化方法 - Google Patents
一种适用图形硬件的分格化方法 Download PDFInfo
- Publication number
- CN102096948A CN102096948A CN 201110048014 CN201110048014A CN102096948A CN 102096948 A CN102096948 A CN 102096948A CN 201110048014 CN201110048014 CN 201110048014 CN 201110048014 A CN201110048014 A CN 201110048014A CN 102096948 A CN102096948 A CN 102096948A
- Authority
- CN
- China
- Prior art keywords
- dough sheet
- branch
- lod
- rectangular
- formatting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Image Generation (AREA)
Abstract
“一种适用图形硬件的分格化方法”发明,属于适用于图形硬件的曲面细分设计方法领域。为了解决图形曲面细分加速处理中将图形表面细分为更小的多边形时,硬件实现的效率问题,提出了此方法。方法将曲面面片分格化分解为面片的内部矩形分格化和边界区域分格化两部分,减少了硬件实现中消耗时间较长的乘除法操作,采用定点整数的加法与比较操作实现。该方法主要用于图形处理器中曲面细分的分格化处理单元。该方法的提出可以有效提高硬件实现的效率。
Description
1技术领域
本发明主要是提出一种适用图形硬件实现的分格化(Tessellator)方法,可以高效地实现曲面细分的功能。本发明提出的分格化方法,尽量避免占用硬件资源较多地乘除法操作,适合采用图形硬件电路来实现,属于适用于图形硬件的曲面细分设计方法领域。
图形处理需要巨大的计算能力,来实现图形的实时产生。一个三维应用或游戏场景中,为了获得细腻,真实的显示效果,通常将物体表面分格化后,产生数万到数百万个多边形,通常为三角形,再进行染色,贴图等处理。要实现这样数量巨大的多边形进行实时处理,其性能要求是较高的,需要各种图形加速器硬件的支持,其中包括对曲线和曲面计算的硬件支持。
图形硬件所绘制的是最基本的图元,即点、直线和多边形(通常是三角形),一个平滑的曲面是通过使用大量微小的多边形来模拟的。曲面细分(Tessellation)就是把一个曲面进行分格化以产生一系列多边形的技术。在较早的图形处理系统中,曲面细分是靠软件来实现的,而最新的图形处理器则包含了完成曲面细分的硬件,从而提高了曲面渲染的速度。
2背景技术
曲面细分的思想可以追溯到20世纪50年代G.Rham提出的多边形割角算法,1974年,Chaikin提出的曲线细分方法。1978年Catmull与Clark,Doo与Sabin分别将三次和二次均匀B样条曲面推广到任意拓扑,提出了著名的Catmull-Clark细分和Doo-Sabin细分算法。1987年美国华盛顿大学的Loop发明了著名的Loop细分模式,该方法至今仍是最常用的细分模式之一;1990年,Dyn等提出了插值三角网格顶点的蝶式(Butterfly)细分;同年,Kobbelt提出了插值四边形顶点的Kobbelt细分;1997年,Peters与Reif给出了基于四边形网格的中边细分;2000年,Kobbelt又给出了对偶的三角网格细分模式细分,Labsik与Greiner在此基础上提出了插值细分;2002年,Loop给出了基于三角网格的三分细分格式;2003年Stam与Loop提出了基于三角网格和四边形网格的混合细分。
在Direct11和OpenGL 4.0中最显著的变化就是增加曲面细分(Tessellation)功能,也就是这个功能将由图形处理器(GPU)来实现。这样由图形硬件来实现LOD(Level Of Detail)的表面细化,既能达到非常真实细腻的画面效果,同时又尽可能地发挥硬件的性能。
在DirectX 11中曲面细分(Tessellation)功能是由三个功能模块实现的,即:Hull Shader(外壳着色器),Tessellator(分格化处理单元)和Domain Shader(域着色器)。在DirectX 11中,Hull Shader和Domain Shader都是可编程的着色器,而Tessellator则完全是由固定硬件算法实现的加速器。
图1.Direct3D 11流水线结构示意图
如图1所示,Hull Shader负责收集图形曲面的参数信息,如控制点等用来定义曲面的参数变量。HS根据由控制点生成的曲面表达式产生一系列的面片(surface patches)以及与之相对应的LOD信息。
Tessellator是一个固定功能模块,它并不需要曲面的控制点信息,它的输入是面片和对应的LOD信息。Tessellator根据LOD信息将面片细分成若干个四边形或三角形。如果是四边形还会进一步分解成两个三角形。这些三角形的顶点伴随着它们在面片中参数坐标等分格化信息送入下一级处理。
Domain Shader根据面片中的参数坐标对每一个三角形的顶点进行单独处理,并从其附带的分格化信息中进行计算。Domain Shader会计算出每个顶点所对应的信息,包括:坐标数据、纹理坐标等,并将该顶点和对应的顶点信息向下一级传送。
后面的DirectX 11中各模块根据顶点信息进行各种图形操作,包括:投影变换、三维剪裁、视口变换、图元装配、光栅化、像素染色和颜色混合等操作,最终在屏幕上呈现出所要求的曲面表面。
曲面细分的方法虽然很多,因为有很多的乘除法操作,硬件实现效率较低,我们提出的方法,主要采用定点整数的加法和比较运算,尽量避免乘除法操作,适用于硬件实现。
3发明内容
本发明的目的在于提出一种在图形处理器中适用于硬件实现的高效曲面细分的方法。本发明针对Direct 11流水线结构中的Tessellator,提出该模块的核心实现方法。
Tessellator的输入是曲面的面片(surface patches),以及与之相对应的LOD信息。每一个面片都是由内部的规则矩形和外部的不规则边界构成,如图2所示。
图2面片结构示意图
面片的内部规则矩形可以根据LOD信息划分成很多小的矩形网格。如图2所示,面片中规则矩形的高度LOD值LODH=5,宽度LOD值LODW=10,因此面片中规则矩形可以划分成50个矩形网格。面片的四个边界构成了四边形,且每边的LOD值可以各不相同。如图2所示,左边界的LOD值LODF=8,右边界的LOD值LODR=7,上边界的LOD值LODT=8,下边界的LOD值LODB=5。
在本发明方法中,对面片中规则矩形的网格顶点是按从左向右,从下到上的顺序进行编号。对面片边界上的顶点是从按左下角开始,沿顺时针方向进行编号。分格化方法的具体实现方法可以分为两个分支:面片中规则矩形的分格化和面片边界区域的分格化。以下是两个分支方法的具体说明。
3.1面片中规则矩形的分格化
面片中规则矩形的分格化分为两个步骤。首先是要将面片的内部规则矩形分成若干个矩形块(rectangle),每个矩形块中包含若干个矩形网格(mesh)。这一步骤要求尽量减少向下一级传送的矩形块数量,同时又能保证下一步处理的运算量适当。
图3面片内部规则矩形分成矩形块示意图
如图3所示,每个矩形块是由两行三列共6个矩形网格构成,因此每个矩形块包括12个网格顶点。为了使划分方法简便,规定划分的顺序为从底向上,从左向右,依次进行。在最顶上的矩形块和最右边的矩形块可能会与其他矩形块不同,如图3所示。该步骤的伪代码如下所示:
在上面的伪代码描述中,LODW和LODH分别是面片内部规则矩形的宽度和高度LOD值。而bw和bh分别是矩形块的宽度值和高度值。在上面的方法描述中,都是整数操作,且只有加法和比较操作,没有乘法和除法,使得硬件实现设计简单。
其次要对每个矩形块进行处理。即从矩形块中分离出矩形网格,并将每个矩形网格分成两个三角形。具体实现方法的伪代码如下所示:
在上面的伪代码描述中,虽然使用了乘法运算,但可以使用n*(LODH+1)和(n+1)*(LODH+1)这样两个简单的计数器来实现累加运算。因此,也可以在硬件实现中不使用乘法器。接下来Build_Triangle步骤将三角形的顶点坐标,从原来在内部规则矩形的节点编号转换为在面片中的参数坐标{u,v,w},并计算相应的分格化数据信息。
在Tessellate Mesh步骤中,每次循环都能得到一个矩形块。而在Generate_Rectangle步骤中,每次循环都能把一个矩形网格分成两个三角形。在内部规则矩形细分中,这两个步骤总共循环LODW*LODH次,每次都只有定点数加法和比较操作,因此总的算法复杂度为O(LODw*LODH)。又因为面片中的规则矩形中矩形网格的数量是LODw*LODH个,所以该方法性能是最优的。
3.2面片边界区域分格化
面片边界区域分格化方法稍显复杂一些,目的是要将面片的边界与内部规则矩形之间的空白区域用三角形“缝合”起来,如图2所示。在本方法中绝大多数情况下只需要定点数加法运算和比较操作,乘法运算只需要在初始时使用一次即可。面片边界区域分格化需要两个步骤。首先对四个边界区域进行分别处理,包括初始化一些参数信息等,该步骤的具体实现的伪代码如下所示:
在上面的伪代码描述中,分别对面片的四个边,从左边起,按顺时针方向,依次进行边界区域的分格化处理。其中,Ns是面片边界上的节点索引值,Ne是面片中规则矩形边界的节点索引值,如图2所示。
其次要对面片的边界和与之相对的规则矩形的边界进行分格化处理,即三角形“缝合”处理。该步骤具体实现的伪代码如下所示:
在上面的伪代码描述中,大多数情况下只有定点数加法和比较运算。在该步骤初始的时候需要用到一次定点数乘法,由于是给定参数的乘法运算,因此,也可以将乘法结果由Hull Shader传过来,这样可在此省去乘法器设计。接下来在Make_Triangle步骤中,将三角形的顶点坐标,从原来在内外边界中的节点索引值转换为在面片中的参数坐标{u,v,w},并计算相应的分格化数据信息。
在Tessellate_External步骤中,依次对四个边界区域进行初始化处理。而在Border_Stitching步骤中,每循环一次,都可得到一个三角形,总共循环LODE+LODI次,因此该方法的计算复杂度为O(LODE+LODI)。又因为每条边界对应的三角形数为LODE+LODI个,所以该方法的性能是最优的。
4附图说明
图1.Direct3D 11流水线结构示意图
图2.面片结构示意图
图3.面片内部规则矩形分成矩形块示意图
图4.分格化方法硬件实现示意图
5具体实施方式
5.1硬件结构设计
采用本方明提出的分格化处理方法所设计的硬件结构如图4所示。在该硬件结构中,Tessellator内部首先用Branch模块接收从Hull Shader送过来的面片信息,包括面片的内部规则矩形的宽度和高度LOD值,以及面片的4个边界的LOD值等信息。在Branch模块内部处理这些数据信息,然后将数据信息打包分为两条支路传送。这两条支路分别进行面片的内部规则矩形的分格化和面片边界区域的分格化处理。
图4分格化方法硬件实现示意图
在面片的内部规则矩形的分格化这一分支中,Tessellate_Mesh模块接收从Branch模块传来的面片的内部规则矩形的宽度和高度的LOD值(LODW和LODH),以及矩形块的宽度和高度值(bw和bh)。在Tessellat_Mesh模块内部处理中,将面片的内部规则矩形划分为若干个矩形块。在Tessellat_Mesh模块内部状态机中,每一个节拍都能得到一个矩形块,然后将该矩形块向下一级传送。
Generate_Rectangle模块接收从Tessellate_Mesh模块传来的矩形块的起始点信息(i,j)和宽度高度信息(w,h)。在Generate_Rectangle模块内部处理中,首先将矩形块分解为若干个矩形网格(mesh),紧接着将单个矩形网格划分为两个三角形。在Generate_Rectangle模块内部状态机中,每个节拍都能得到两个三角形,然后将这两个三角形的顶点信息向下一级传送。
Build_Triangle模块接收从Generate_Rectangle模块传送来的三角形的顶点数据信息(V0、V1、V2)。因为一个节拍会有两个三角形传送过来,因此设计两个Build_Triangle模块接收信息。Build_Triangle模块内部处理中,将三角形的顶点坐标,从原来在内部规则矩形的节点编号转换为在面片中的参数坐标{u,v,w},并计算相应的分格化数据信息。在Generate_Rectangle模块内部状态机中,每个节拍都能计算出三角形三个顶点的参数坐标,然后将包含该信息的分格化数据向下一级Domain Shader传送。
在面片边界的分格化这一分支中,Tessellate_External模块接收从Branch模块传来的面片的边界信息,包括面片的内部规则矩形的宽度和高度LOD值,以及面片的4个边界的LOD值等信息。在Tessellate_External模块内部处理中,计算出4个边界分格化所需要的参数,如内外边界起始节点索引值和步长等信息。在Tessellate_External模块的内部状态机中,每个节拍能计算出一条边界区域分格化所需要的初始数据信息,然后向下一级传送。
Border_Stitching模块接收从Tessellate_External模块传送来的内部和外部边界LOD值(LODI和LODE),以及步长(stride)、内部和外部边界起始节点索引值(Ne和Ns)。在Border_Stitching模块中,将内部和外部边界区域用三角形逐个“缝合”。在Border_Stitching模块状态机中,每个节拍都能得到一个三角形,以及三个顶点在内部和外部边界中的索引值,然后将该信息向下一级传送。
Make_Triangle模块接收从Border_Stitching模块传来的三角形的三个顶点在内外边界中的索引值等数据信息(Ne,Ns,Ne/Ns+1)。在Make_Triangle模块内部处理中,将三角形的顶点坐标,从原来在内外边界中的节点索引值转换为在面片中的参数坐标{u,v,w},并计算相应的分格化数据信息。在Make_Triangle模块内部状态机中,每个节拍都能计算出三角形三个顶点的参数坐标,然后将包含该信息的分格化数据向下一级Domain Shader传送。
根据本方明方法所设计Tessellator的硬件结构采用流水线工作方式。在流水线满负荷情况下,每个节拍可以输出3个三角形。在具体实现中,绝大多数运算都是定点数加法和比较操作。在本方法中只有少数运算需要用到乘法操作,可以通过一些方式避免,如前所述。本方法在设计时充分考虑了硬件的实现,比较容易提高运算并行性。
5.2仿真结果验证
依据本发明方法编写了相应的C语言仿真程序,分别对面片的内部规则矩形和面片边界区域进行了分格化。设定面片的内部规则矩形的面片中规则矩形的高度LOD值LODH=5,宽度LOD值LODW=10。每个矩形块初始设为高度为2,宽度为3。对面片的内部规则矩形分格化所结果如表1所示:
表1面片内部规则矩形的分格化结果
如表1所示,面片中规则矩形首先被划分为矩形块,然后进一步将矩形块划分为矩形网格,每个矩形网格又被划分为两个三角形。图5中显示出划分处的矩形块和其包含的三角形。
设定面片的四个边界的LOD值,左边界的LOD值LODF=8,右边界的LOD值LODR=7,上边界的LOD值LODT=8,下边界的LOD值LODB=5。对面片边界区域进行分格化所得结果如表2所示:
表2面片边界区域分格化结果
如表2所示,面片的边界区域从左边界开始,沿顺时针方向,依次进行分格化。每个边界区域都是用三角形“缝合”而成。每个三角形的三个顶点分别由外部边界和内部边界的节点索引值给出。
通过软件仿真验证,进一步说明了本发明方法的正确性和有效性。曲面细分是衡量图形处理器设计性能优劣的一项重要指标。本方明方法针对曲面细分中的分格化问题提出了有效的实现方法,非常适用硬件实现,可以有效提高图形处理器性能。
Claims (1)
1.一种适用图形硬件的分格化方法,该方法包含内部矩形分格化和边界区域分格化两部分,在划分过程中(除了初始化时)仅使用了定点整数的加法和比较运算,且内部分格化时可以按照硬件配置进行并行划分,分格化的结果包括有序的顶点索引和相应的参数坐标{u,v};其中边界区域分格化实现方法为:将面片边界的LOD值与对应的内部规则矩形边界的LOD值相乘,用该乘积作为判断循环终止的条件,且面片边界上节点索引值和内部矩形边界上节点索引值按各自步长依次交替增长,步长均为定点整数;内部矩形分格化实现方法为:将面片的内部规则矩形首先划分为若干个矩形块,接着将每个矩形块划分为若干矩形网格,最后将每个矩形网格划分为两个三角形。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110048014 CN102096948B (zh) | 2011-03-01 | 2011-03-01 | 一种适用图形硬件的分格化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110048014 CN102096948B (zh) | 2011-03-01 | 2011-03-01 | 一种适用图形硬件的分格化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102096948A true CN102096948A (zh) | 2011-06-15 |
CN102096948B CN102096948B (zh) | 2012-10-31 |
Family
ID=44130024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110048014 Active CN102096948B (zh) | 2011-03-01 | 2011-03-01 | 一种适用图形硬件的分格化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102096948B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999945A (zh) * | 2011-09-15 | 2013-03-27 | 北京进取者软件技术有限公司 | 一种用于浮雕模型建模的网格曲面区域划分方法 |
CN104933225A (zh) * | 2015-05-25 | 2015-09-23 | 中国科学院过程工程研究所 | 实现计算流体力学大规模实时模拟的方法 |
CN108597590A (zh) * | 2018-05-08 | 2018-09-28 | 上海嘉奥信息科技发展有限公司 | 基于gpu运算的体数据任意断层数据显示方法及系统 |
CN114494651A (zh) * | 2022-04-18 | 2022-05-13 | 龙芯中科技术股份有限公司 | 曲面细分处理方法、装置、电子设备及存储介质 |
CN115861512A (zh) * | 2023-01-31 | 2023-03-28 | 南京砺算科技有限公司 | 用于曲面细分的输出点序列确定方法及装置、存储介质 |
CN116597109A (zh) * | 2023-01-13 | 2023-08-15 | 东莘电磁科技(成都)有限公司 | 一种复杂三维曲面共型网格生成方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1975787A (zh) * | 2006-12-01 | 2007-06-06 | 中山大学 | 一种基于高阶三角形插值曲面细分的几何数据细分方法 |
US20100164955A1 (en) * | 2008-12-31 | 2010-07-01 | Sathe Rahul P | Image forming techniques |
US20100164954A1 (en) * | 2008-12-31 | 2010-07-01 | Sathe Rahul P | Tessellator Whose Tessellation Time Grows Linearly with the Amount of Tessellation |
CN101872488A (zh) * | 2009-04-27 | 2010-10-27 | 鸿富锦精密工业(深圳)有限公司 | 曲面渲染系统及方法 |
-
2011
- 2011-03-01 CN CN 201110048014 patent/CN102096948B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1975787A (zh) * | 2006-12-01 | 2007-06-06 | 中山大学 | 一种基于高阶三角形插值曲面细分的几何数据细分方法 |
US20100164955A1 (en) * | 2008-12-31 | 2010-07-01 | Sathe Rahul P | Image forming techniques |
US20100164954A1 (en) * | 2008-12-31 | 2010-07-01 | Sathe Rahul P | Tessellator Whose Tessellation Time Grows Linearly with the Amount of Tessellation |
CN101872488A (zh) * | 2009-04-27 | 2010-10-27 | 鸿富锦精密工业(深圳)有限公司 | 曲面渲染系统及方法 |
Non-Patent Citations (2)
Title |
---|
《沈阳师范大学学报(自然科学版)》 20090131 李继 等 曲面细分模式的分类研究 全文 1 第27卷, 第1期 * |
《计算机辅助设计与图形学学报》 20100331 韩俊刚 等 一种图形加速器和着色器的体系结构 全文 1 第22卷, 第3期 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999945A (zh) * | 2011-09-15 | 2013-03-27 | 北京进取者软件技术有限公司 | 一种用于浮雕模型建模的网格曲面区域划分方法 |
CN102999945B (zh) * | 2011-09-15 | 2016-01-06 | 北京进取者软件技术有限公司 | 一种用于浮雕模型建模的网格曲面区域划分方法 |
CN104933225A (zh) * | 2015-05-25 | 2015-09-23 | 中国科学院过程工程研究所 | 实现计算流体力学大规模实时模拟的方法 |
CN104933225B (zh) * | 2015-05-25 | 2018-01-09 | 中国科学院过程工程研究所 | 实现计算流体力学大规模实时模拟的方法 |
CN108597590A (zh) * | 2018-05-08 | 2018-09-28 | 上海嘉奥信息科技发展有限公司 | 基于gpu运算的体数据任意断层数据显示方法及系统 |
CN114494651A (zh) * | 2022-04-18 | 2022-05-13 | 龙芯中科技术股份有限公司 | 曲面细分处理方法、装置、电子设备及存储介质 |
CN116597109A (zh) * | 2023-01-13 | 2023-08-15 | 东莘电磁科技(成都)有限公司 | 一种复杂三维曲面共型网格生成方法 |
CN116597109B (zh) * | 2023-01-13 | 2023-12-22 | 东莘电磁科技(成都)有限公司 | 一种复杂三维曲面共型网格生成方法 |
CN115861512A (zh) * | 2023-01-31 | 2023-03-28 | 南京砺算科技有限公司 | 用于曲面细分的输出点序列确定方法及装置、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102096948B (zh) | 2012-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102096948B (zh) | 一种适用图形硬件的分格化方法 | |
CN102272798B (zh) | 曲面细分时间随曲面细分量线性增长的镶嵌器 | |
CN102930594B (zh) | 基于保持边界的计算机三维地形网格的绘制方法 | |
CN103761770A (zh) | 图像形成技术 | |
CN102831275B (zh) | 一种3d流体的仿真方法及系统 | |
CN109003322B (zh) | 一种动力定位船舶海上作业的三维海浪仿真优化方法 | |
CN102117497A (zh) | 一种三维地形建模方法及系统 | |
CN116051708A (zh) | 三维场景轻量化模型渲染方法、设备、装置及存储介质 | |
CN103810756A (zh) | 基于不规则区域的自适性的Loop细分曲面的绘制方法 | |
CN104157000A (zh) | 模型表面法线的计算方法 | |
CN105913475A (zh) | 一种时空变化过程动态可视化方法 | |
CN109934893B (zh) | 几何体任意截面的显示方法、装置及电子设备 | |
CN116977598B (zh) | 三角网格数值仿真平滑化的方法 | |
Krishnamurthy et al. | Optimized GPU evaluation of arbitrary degree NURBS curves and surfaces | |
CN103325086B (zh) | 一种基于四面体坐标系的三维图形的变形方法 | |
CN106887042B (zh) | 基于gpu的自适应曲面细分方法 | |
CN114596400B (zh) | 一种基于三维引擎批量生成法线贴图的方法 | |
Wang et al. | An improving algorithm for generating real sense terrain and parameter analysis based on fractal | |
CN113591208B (zh) | 一种基于舰船特征提取的超大模型轻量化方法及电子设备 | |
CN111145298B (zh) | 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 | |
Tatarinov | Instanced tessellation in DirectX10 | |
CN105957142A (zh) | 一种面向TIN构建的Hilbert排序方法 | |
CN114937110B (zh) | 一种gpu加速的引流线建模方法、系统、设备及介质 | |
CN104143204A (zh) | 考虑拓扑结构的移动最小二乘二维角色变形方法 | |
CN106600671A (zh) | 一种网格模型的体素化方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |