基于不规则区域的自适性的Loop细分曲面的绘制方法

文档序号:6535942阅读:232来源:国知局
基于不规则区域的自适性的Loop细分曲面的绘制方法
【专利摘要】本发明的提供了一种基于不规则区域的自适应性的Loop细分曲面的绘制方法,该绘制方法基于不规则区域的自适应方式,利用计算着色器计算控制顶点的位置,根据当前原始面片与相邻原始面片的细分层数的关系,将不规则的原始面片分割为若干个规则的子面片,对三角控制网格进行重构,再由tessellation着色器绘制得到相应的面片,可以有效消除T裂缝。通过分割能够采用tessellation着色器绘精确计算得到三角控制网格中各层顶点的位置,因此所有计算得到的顶点和法向量都与极限Loop细分曲面相同,且硬件tessellation着色器绘制,解决全局细分方法的庞大内存和带宽问题,能够达到实时精确绘制Loop细分曲面。
【专利说明】基于不规则区域的自适性的Loop细分曲面的绘制方法
【技术领域】
[0001]本发明涉及计算机图形学细分曲面绘制领域,具体涉及一种基于不规则区域的自适应性的Loop细分曲面的绘制方法。
【背景技术】
[0002]细分曲面,在计算机图形学领域,用于任意拓扑的网格创建光滑曲面。细分曲面定义为一个无穷细化过程的计算。通过反复细化初始的多边形网格,可以产生一系列网格趋于最终的细分曲面。每个新的细化步骤产生一个新的有更多多边形元素并且更光滑的网络。Loop细分曲面作为其中比较具有代表性的一个细分策略,在电子游戏,电影制作以及有限兀仿真等应用中广泛使用,参见C.Loop, Smooth subdivision surfaces based ontriangles, Master’s thesis, Dept, of Math., Univ.0f Utah (1987)。Loop 细分曲面是针对任意拓扑的三角形控制网格设计的,区别于Catmull-Clark细分曲面,参见E.Catmull, J.Clark, Recursively generated b—spline surfaces on arbitrary topologicalmeshes, Computer-Aided DesignlO (6)(1978)350 - 355。
[0003]传统的细分曲面是根据细分规则,循环地细分控制网格计算得出的。虽然这种方法在当代的GPU上是很容易实现的。但是,指数增长的内存占有量和数据传输量会严重的影响运行效率。随着DirectXllAPI的出现,其中的硬件tessellation着色器,可在GPU流多处理上,直接计算、生成、绘制细分的几何,达到避免高代价的内存输入输出,绘制精细几何细节的高质量曲面绘制的目的,参见Microsoft Corporation, Direct3DllFeatures,http: //msdn.microsoft.com/en-us/library/ff476342 (VS.85).aspx (2009)。但是,硬件tessellation绘制曲面是逐面片计算的。虽然它能够用于直接计算规则面片,但对于如奇异顶点,准尖锐折痕和分层次的编辑这样的不规则区域,无法直接计算。
[0004]目前已有的Loop细分绘制方法可分成三大类。首先,全局细分方法。该类方法通过全局的对输入控制网格循环的细分实现。此类方法的内存消耗随生成的顶点数量线性增长。由于GPU的带宽限制,造成性能的严重下降,参见L.Shiue, 1.Jones, J.Peters, Arealtimegpu subdivision kernel, ACM Transactions on Graphics24(3)(2005) 1010 -1015。第二,直接计算方法。该类方法是对细分曲面的细分矩阵的特征矩阵解析分析,直接计算求解细分曲面,参见 J.Stam, Evaluation of Loop subdivision surfaces, in:ACMSIGGRAPH99Course Notes#37, SIGGRAPH,99, ACM, New York, NY, USA, 1999,pp.1ll - 125。虽然此类方法在GPU上容易实现,但由于大量的程序代码分支,导致运行性能较差。此外,该类方法需要奇异点分离,因此,需要对初始控制网格做一次到两次的预细分,这样处理之后的控制网格的顶点和面片数量都将大量增加;而且,该类方法无法处理造型常见的准尖锐折痕以及分层次编辑。最后,基于面片的逼近算法。该类算法基本细想是寻找一个逼近不规则区域的解,提高绘制效率,牺牲绘制质量。该类方法利用硬件tessellation着色器绘制细分曲面,参见文献 G.Li, C.Ren, J.Zhang, W.Ma, Approximation of Loop subdivisionsurfaces for fast rendering, IEEE Transactions on Visualization and ComputerGraphics17 (4) (2011)。

【发明内容】

[0005]针对现有技术的不足,本发明提供了一种基于不规则区域的自适应GPU绘制Loop细分曲面方法。
[0006]一种基于不规则区域的自适应性的Loop细分曲面的绘制方法,包括:
[0007](I)输入三角控制网格,并设定最大细分层数和全局细分参数;
[0008](2)确定三角控制网格的不规则区域,并以该不规则区域作为三角控制网格的第零层拓扑结构,根据第零层拓扑结构生成三角控制网格的第零层细分查找表,根据第零层细分查找表构建三角控制网格的第一层拓扑结构,并根据第一层拓扑结构生成三角控制网格的第一层细分查找表;
[0009](3)依次递推,直至构建得到三角控制网格的第η层细分查找表和第η层拓扑结构,其中η等于设定的最大细分层数;
[0010](4)将各层细分查找表以及第零层控制顶点的位置上传至GPU,GPU的计算着色器根据各层细分查找表和上一层控制顶点的位置,依次计算得到各层控制顶点的位置;
[0011](5)根据各层拓扑结构构造该拓扑结构中各个原始面片的控制面片作为该层控制面片,并确定各个控制面片的参数域,具体如下:
[0012](5-1)根据所述拓扑结构中各个原始面片所处的细分层数将各个原始面片划分为平凡面片和非平凡面片:
[0013]若当前原始面片的边相邻原始面片的细分层数均小于或等于当前原始面片的细分层数,则当前原始面片为平凡面片,
[0014]否则,当前原始面片为非平凡面片;
[0015](5-2)若当前原始面片为平凡面片,则以当前原始面片的一环邻域的顶点索引作为当前原始面片的控制面片,并确定该控制面片的参数域;
[0016]若当前原始面片为非平凡面片,则进行如下操作:
[0017](5-21)根据边相邻原始面片大于当前原始面片的细分层数将当前原始面片划分为若干个子面片,
[0018](5-22)以当前原始面片的一环邻域的顶点索引作为各个子面片的控制面片,并确定各个控制面片的参数域;
[0019](6)根据全局细分参数确定当前细分层数,分别根据各层控制顶点的位置、各层控制面片、以及各控制面片的参数域由tessellation着色器绘制第零层面片至第g_d印th层面片,g_depth为当前细分层数。
[0020]步骤(I)中输入的三角控制网格包括第零层的控制顶点。
[0021]所述步骤(2)、步骤(3)和步骤(5)可以为离线进行。
[0022]拓扑结构结构中包含各个原始面片,各个面片中相互连接,边相邻面片指与该面片共享边(有公共边)的面片成为边相邻面片。
[0023]本发明的Loop细分曲面的绘制方法中三角控制网格、最大细分层数和全局细分参数由用户设定,其中三角控制网格和最大细分层数在Loop细分曲面的绘制过程中一般不再调整,而全局细分参数在Loop细分曲面的绘制过程中用户可根据显示需要实时调整。[0024]本发明的Loop细分曲面的绘制方法使用的细分查找表与输入的三角控制网格的几何无关,且在类似曲面编辑或动画这样的三角网格保持拓扑不变的应用中,该细分查找表的生成和上传仅需要一次,改变全局细分参数后不需要重新生成和上传细分查找表。
[0025]本发明的基于不规则区域的自适应性的Loop细分曲面的绘制方法,基于不规则区域的自适应方式,利用计算着色器并行计算控制顶点的位置,利用tessellation着色器绘制面片。通过利用GPU的并行处理能力,解决全局细分方法的庞大内存和带宽问题。另外,tessellation着色器只能直接精确绘制规则区域的面片,但由于可能相邻面片处于不同细分层上,若采用tessellation着色器直接绘制面片会出现T型裂缝,本发明中根据当前原始面片与相邻原始面片的细分层数的关系,将不规则的原始面片分割为若干个子面片,然后根据子面片重构三角控制网格,直接构造会出现T型裂缝,不能以母面片(原始面片)为单位绘制,必须以子面片为单位绘制,再由tessellation着色器绘制得到相应的面片,可以有效消除T裂缝。
[0026]所述步骤(1)中最大细分层数和全局细分参数满足以下条件:
[0027]1.0 ≤ g—tessfactor ≤ 2n,
[0028]其中,g_tessfactor为全局细分参数,η为最大细分层数。
[0029]最大细分层数相当于一个约束,用户根据需要设定,实际应用中η不超过8。
[0030]所述的不规则区域为三角控制网格的奇异点、半尖锐顶点和分层次编辑点。通常三角控制网格带有奇异点、半尖锐顶点和分层次编辑点,这些点即为不规则区域,并构成该三角控制网格的第零层拓扑 结构。
[0031]奇异点是指度不为6的顶点。
[0032]半尖锐顶点指在输入的三角控制网格上,用户可以对每一条边指定一个尖锐值,表示该边细分后的尖锐程度。若一条边的尖锐值不为零,则该边为半尖锐边。若一个顶点连接的边中含有尖锐值不为零的边,则该点为半尖锐点,半尖锐的意思是该尖锐值可以为
非整数。
[0033]分层次编辑点指根据造型需要,在不同细分层次上对三角控制网格做编辑的点,Loop细分曲面的极限曲面是由四次箱样条构成,除了在奇异点周围,是由无限数量的四次箱样条曲面构成。
[0034]所述的细分表包括边点表和点点表,
[0035]所述的边点表用于记录不规则区域中各个边点所在边的相邻两个三角形的四个顶点的索引;
[0036]所述的点点表用于记录不规则区域中的各个顶点的索弓丨,各个顶点的度,以及各顶点的一环邻域顶点索引和一环邻域顶点的起始位置。
[0037]在Loop细分曲面每一步细分的过程中,需要对控制网格的每一条边和顶点做细分。在边上细分得到的顶点为边点,对顶点细分得到的顶点称为点点。
[0038]与一个顶点以一条边相互连接的点,成为该顶点的一环邻域顶点。
[0039]边点表和点点表中记录的各个内容分别存储于相应的缓存中,顶点的索引对应于索引缓存,顶点的度存储于度缓存中,一环邻域顶点的起始位置采用偏移量表示,该偏移量存储于偏移量缓存中。
[0040]所述的控制顶点包括边点和顶点。[0041]所述步骤(4)中计算各层的控制顶点的位置时在计算着色器中分别设置边点线程和点点线程,所述的边点线程用于计算边点的位置,所述的点点线程用于计算顶点的位置。
[0042]计算点点时,通过点点线程从索引缓存中获得该顶点索弓丨,从度缓存读取该顶点的度,通过偏移量缓存获得该顶点一环邻域顶点索引起始位置,从该位置为起点,读取若干个(与该顶点度相等)顶点索弓I,进而得到该顶点的一环邻域顶点的索弓I,如此,得到了 所有顶点索弓I,米用参考文献:C.Loop, Smooth subdivision surfaces based ontriangles, Master’ s thesis, Dept, of Math., Univ.0f Utah (1987).中报到的方法,计算得到相应的点点坐标。同理,可得到相应边点的坐标。
[0043]所述步骤(5-21)包括:
[0044](a)若只有一个边相邻原始面片大于当前原始面片的细分层数,以该边相邻原始面片与当前原始面片的公共边的中点和该当前原始面片中该公共边相对的顶点的连线为分割线,将当前原始面片拆分为两个子面片;
[0045](b)若有两个边相邻原始面片大于当前原始面片的细分层数,以两个边相邻原始面片与当前原始面片的公共边的中点的连线和任意一个公共边的中点和与该公共边相对的连线为分割线将当前原始面片拆分为三个子面片;
[0046](c)若有三个边相邻原始面片大于当前原始面片的细分层数,以当前原始面片的三条边的中点的两两连线为分割线,将当前原始面片拆分为四个子面片。
[0047]所述步骤(6)包括以下步骤:
[0048](6-1)根据公式:
[0049]
gJepth = \\og2g-tessfactor]
[0050]确定当前细分层数,其中g_depth为当前细分层数,g_tessfactor为全局细分参数,[bg2 表示对 log2g_tessfactor 向上取整;
[0051](6-2)根据公式:
[0052]tessfactori+1 = tessfactorj/2,
[0053]计算第i+1层的细分参数,其中tessfactori为第i层的细分参数,i=0, I,......,
g_depth,其中 tessfactor0 = g_tessfactor ;
[0054](6-3)基于四次箱样条基函数,根据每一层的细分参数、控制顶点、控制面片以及各个控制面片的参数域绘制相应层的面片。
[0055]后一层的细分参数通过前一层的细分参数确定,本发明中后一层的细分参数是前一层的细分参数的两倍。得到各个层的细分参数后,采用四次箱样条基函数即可绘制得到相应层的面片。每细分一次后的控制网格可以理解为被细分过一次,那么细分参数减半。
[0056]与现有的Loop细分曲面的绘制方法相比较,本发明的Loop细分曲面的绘制方法通过不规则区域的自适应方式,依据不规则面片的类型,将不规则面片的分割成若干个子面片,然后以得到的子面片生成该三角控制网格的控制面片进行面片绘制。通过分割能够采用tessellation着色器绘精确计算得到三角控制网格中各层顶点的位置,因此所有计算得到的顶点和法向量都与极限Loop细分曲面相同,且硬件tessellation着色器绘制,解决全局细分方法的庞大内存和带宽问题,能够达到实时精确绘制Loop细分曲面。【专利附图】

【附图说明】
[0057]图1为本发明的Loop细分曲面的绘制方法的流程图;
[0058]图2为原始画面的拆分方法和参数域的确定示意图。
【具体实施方式】
[0059]下面将结合附图和具体实施例对本发明进行详细说明。
[0060]一种基于不规则区域的自适应GPU绘制Loop细分曲面方法,包括以下步骤:
[0061](I)输入三角控制网格,并设定最大细分层数和全局细分参数,且最大细分层数和全局细分参数满足以下条件:
[0062]1.0 ^ g—tessfactor ^ 2n,
[0063]其中,g_tessfactor为全局细分参数,η为最大细分层数(本实施例中g_tessfactor=l.0, n=8)。
[0064](2)确定三角控制网格的不规则区域,并以该不规则区域作为三角控制网格的第零层拓扑结构,根据第零层拓扑结构生成三角控制网格的第零层细分查找表,根据第零层细分查找表构建三角控制网格的第一层拓扑结构,并根据第一层拓扑结构生成三角控制网格的第一层细分查找表。
[0065]不规则区域为三角控制网格的奇异点、半尖锐顶点和分层次编辑点。本实施例中:奇异点是指度不为6的顶点,半尖锐顶点指连接的边中有尖锐值不为零的边的顶点;分层次编辑点指根据造型需要,在`不同细分层次上对三角控制网格做编辑的点。
[0066](3)依次递推,直至构建得到三角控制网格的第η层细分查找表和第η层拓扑结构,其中η等于设定的最大细分层数;
[0067]细分查找表包括边点表和点点表,边点表用于记录不规则区域中各个边点所在边的相邻两个三角形的四个顶点的索引;点点表用于记录不规则区域中的各个顶点的索引,各个顶点的度,以及各顶点的一环邻域顶点索引和一环邻域顶点的起始位置。
[0068](4)将各层细分查找表以及第零层控制顶点的位置上传至GPU,GPU的计算着色器根据各层细分查找表和上一层控制顶点的位置,依次计算得到各层控制顶点的位置。
[0069](5)根据各层拓扑结构构造该拓扑结构中各个原始面片的控制面片作为该层控制面片,并确定各个控制面片的参数域,具体如下:
[0070](5-1)根据所述拓扑结构中各个原始面片所处的细分层数将各个原始面片划分为平凡面片和非平凡面片:
[0071]若当前原始面片的边相邻原始面片的细分层数均小于或等于当前原始面片的细分层数,则当前原始面片为平凡面片,
[0072]否则,当前原始面片为非平凡面片;
[0073](5-2)若当前原始面片为平凡面片,则以当前原始面片的一环邻域的顶点索引作为当前原始面片的控制面片,并确定该控制面片的参数域;
[0074]若当前原始面片为非平凡面片,则进行如下操作:
[0075](5-21)根据边相邻原始面片大于当前原始面片的细分层数将当前原始面片划分为若干个子面片,具体如下:[0076](a)若只有一个边相邻原始面片大于当前原始面片的细分层数,以该边相邻原始面片与当前原始面片的公共边的中点和该当前原始面片中该公共边相对的顶点的连线为分割线,将当前原始面片拆分为两个子面片;
[0077](b)若有两个边相邻原始面片大于当前原始面片的细分层数,以两个边相邻原始面片与当前原始面片的公共边的中点的连线和任意一个公共边的中点和与该公共边相对的连线为分割线将当前原始面片拆分为三个子面片;
[0078](c)若有三个边相邻原始面片大于当前原始面片的细分层数,以当前原始面片的三条边的中点的两两连线为分割线,将当前原始面片拆分为四个子面片。
[0079](5-22)以当前原始面片的一环邻域的顶点索引作为各个子面片的控制面片,并确定各个控制面片的参数域。
[0080]本实施例中平凡面片的各个子面片的控制面片的参数域的根据重心坐标的计算方法确定。
[0081]本实施例中非平凡面片的控制面片的分割规则,以及分割后各个子面片的参数域的确定方法如图2所示,图中虚线表示分割线,①、②、③和④为子面片的编号。
[0082]如图2 (a)所示,若只有一个边相邻原始面片大于当前原始面片的细分层数,则将当前原始面片拆分为图2(a)中所示的两个子面片。
[0083]①号子面片的参数域为:
[0084]
【权利要求】
1.一种基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,包括: (1)输入三角控制网格,并设定最大细分层数和全局细分参数; (2)确定三角控制网格的不规则区域,并以该不规则区域作为三角控制网格的第零层拓扑结构,根据第零层拓扑结构生成三角控制网格的第零层细分查找表,根据第零层细分查找表构建三角控制网格的第一层拓扑结构,并根据第一层拓扑结构生成三角控制网格的第一层细分查找表; (3)依次递推,直至构建得到三角控制网格的第η层细分查找表和第η层拓扑结构,其中η等于设定的最大细分层数; (4)将各层细分查找表以及第零层控制顶点的位置上传至GPU,GPU的计算着色器根据各层细分查找表和上一层控制顶点的位置,依次计算得到各层控制顶点的位置; (5)根据各层拓扑结构构造该拓扑结构中各个原始面片的控制面片作为该层控制面片,并确定各个控制面片的参数域,具体如下: (5-1)根据所述拓扑结构中各个原始面片所处的细分层数将各个原始面片划分为平凡面片和非平凡面片: 若当前原始面片的边相邻原始面片的细分层数均小于或等于当前原始面片的细分层数,则当前原始面片为平凡面片, 否则,当前原始面片为非平凡面片; (5-2)若当前原始面片为平凡面片,则以当前原始面片的一环邻域的顶点索引作为当前原始面片的控制面片, 并确定该控制面片的参数域; 若当前原始面片为非平凡面片,则进行如下操作: (5-21)根据边相邻原始面片大于当前原始面片的细分层数将当前原始面片划分为若干个子面片, (5-22)以当前原始面片的一环邻域的顶点索引作为各个子面片的控制面片,并确定各个控制面片的参数域; (6)根据全局细分参数确定当前细分层数,分别根据各层控制顶点的位置、各层控制面片、以及各控制面片的参数域由tessellation着色器绘制第零层面片至第g_d印th层面片,g_depth为当前细分层数。
2.如权利要求1所述的基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,所述步骤(1)中最大细分层数和全局细分参数满足以下条件:
1.0 ^ g—tessfactor ^ 2n, 其中,g_tessfactor为全局细分参数,η为最大细分层数。
3.如权利要求2所述的基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,所述的不规则区域为三角控制网格的奇异点、半尖锐顶点和分层次编辑点。
4.如权利要求3所述的基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,所述的细分表包括边点表和点点表, 所述的边点表用于记录不规则区域中各个边点所在边的相邻两个三角形的四个顶点的索引; 所述的点点表用于记录不规 则区域中的各个顶点的索弓丨,各个顶点的度,以及各顶点的一环邻域顶点索引和一环邻域顶点的起始位置。
5.如权利要求4所述的基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,所述的控制顶点包括边点和顶点。
6.如权利要求5所述的基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,所述步骤(4)中计算控制顶点的位置时在计算着色器中分别设置边点线程和点点线程,所述的边点线程用于计算边点的位置,所述的点点线程用于计算顶点的位置。
7.如权利要求6所述的基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,所述步骤(5-21)包括: Ca)若只有一个边相邻原始面片大于当前原始面片的细分层数,以该边相邻原始面片与当前原始面片的公共边的中点和该当前原始面片中该公共边相对的顶点的连线为分割线,将当前原始面片拆分为两个子面片; (b)若有两个边相邻原始面片大于当前原始面片的细分层数,以两个边相邻原始面片与当前原始面片的公共边的中点的连线和任意一个公共边的中点和与该公共边相对的连线为分割线将当前原始面片拆分为三个子面片; (c)若有三个边相邻原始面片大于当前原始面片的细分层数,以当前原始面片的三条边的中点的两两连线为分割线,将当前原始面片拆分为四个子面片。
8.如权利要求7所述的基于不规则区域的自适应性的Loop细分曲面的绘制方法,其特征在于,所述步骤(6 )包括以下步骤: (6-1)根据公式:
【文档编号】G06T17/30GK103810756SQ201410021013
【公开日】2014年5月21日 申请日期:2014年1月17日 优先权日:2014年1月17日
【发明者】冯结青, 黄韵岑 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1