使用位移因数的细分方法与流程

文档序号:12472173阅读:1447来源:国知局
使用位移因数的细分方法与流程

细分是在计算机图形中用于将表示在场景中的对象的一组表面分割成一般是三角形的多个更小和更简单的片(被称为基元),其更容易渲染。因而产生的细分的表面通常是对原始表面的近似,但这个近似的准确度可通过增加所产生的基元的数量来增加,这又通常导致基元更小。细分/再分的量通常由细节级别(LOD)确定。因此一般在需要更高的细节级别的情况下使用增加数量的基元,例如因为对象更接近观看者和/或对象具有更复杂的形状。然而,更大数量的三角形的使用增加了渲染场景所需的处理努力。

一般对补片执行再分成三角形基元,补片在形状上是正方形或三角形的(即四边形或三角形)并可弯曲以与它们代表的对象的表面保持一致(并因此可被称为“表面补片”)和/或使位移映射被应用。然而,再分不对表面补片执行而替代地在二维补片(即补片是平面的,而不是由多项式方程定义)的域中被执行,二维补片的域可用(u,v)参数来定义并被称为“参数空间”。这意味着细分过程与在最终表面中存在的任何曲率无关。

细分可提前被执行(例如以计算场景的在不同的细节级别和/或来自不同的视点的多个不同的视图)或可在运行中被执行(例如以提供连续或视图相关的细节级别)。使用一些现有的细分方法,用户可经历不希望有的视觉伪像,其中虽然所请求的细节级别平稳地改变,因而产生的细分以间断的方式改变。

下面所述的实施方式仅作为例子被提供,且并不是解决用于执行细分的已知方法和装置的任何或所有缺点的实现的限制。

概述

这个概述被提供来以简化的形式介绍一系列概念,其在下面在详细描述中被进一步描述。这个概述并不打算识别所主张的主题的关键特征或必要特征,也不打算用作在确定所主张的主题的范围时的帮助。

描述了使用为补片的每个顶点定义的顶点细分因数和位移因数二者的细分方法,补片可以是四边形、三角形或等值线。该方法在计算机图形系统中实现并涉及计算在一个或多个输入补片中的每个角顶点的顶点细分因数。然后使用顶点细分因数对一个或多个输入补片执行细分。细分操作涉及添加一个或多个新顶点以及计算每个最新添加的顶点的位移因数。随后通过计算每个顶点的目标自然空间参数并接着使用那个顶点的位移因数修改顶点的目标自然空间参数来确定每个顶点的自然空间参数。

第一方面提供在计算机图形系统中执行细分的方法,该方法包括:计算在一个或多个输入补片中的每个角顶点的顶点细分因数;使用顶点细分因数对一个或多个输入补片执行细分以产生由顶点定义的多个基元,细分包括添加一个或多个新顶点以及计算每个最新添加的顶点的位移因数;以及通过计算每个顶点的目标自然空间参数并接着使用那个顶点的位移因数修改顶点的目标自然空间参数来确定每个顶点的自然空间参数。

添加一个或多个新顶点可包括:比较在补片中的一对相邻顶点的顶点细分因数与阈值;以及响应于确定至少一个顶点细分因数超过阈值,添加将在这两个相邻顶点之间的边再分成两个部分的新子顶点,这两个相邻顶点是子顶点的父顶点。新的子顶点可平分在这两个父顶点之间的边。计算每个最新添加的顶点的位移因数可包括:根据顶点的父顶点的顶点细分因数来计算顶点的位移因数。顶点的父顶点的顶点细分因数的函数G(TF)可由下式给出:

G(TF)=(TFmax–THRES)/Δ,如果TFmax∈(THRES,THRES+Δ)

G(TF)=1,如果

其中TFmax是父顶点的顶点细分因数的最大值,THRES是阈值,以及Δ是当执行细分时顶点细分因数在每次迭代中减小的量。

该方法还可包括:将在一个或多个输入补片中的每个角顶点的位移因数设置为位移因数的最大值。

使用顶点的位移因数修改那个顶点的目标自然空间参数可包括:通过在顶点的父顶点的自然空间参数之间内插来产生顶点的自然空间参数的开始状态;以及使用顶点的位移因数来在顶点的自然空间参数的开始状态和顶点的目标自然空间参数之间内插。如果顶点的位移因数等于最小值,则顶点的自然空间参数可等于顶点的自然空间参数的开始状态,以及其中如果顶点的位移因数等于最大值,则顶点的自然空间参数可等于顶点的自然空间参数的目标状态。使用顶点的位移因数来在顶点的自然空间参数的开始状态M’和顶点的目标自然空间参数M(u3,v3)之间内插可包括计算(1–df)*M’+df*M(u3,v3)。通过在顶点的父顶点的自然空间参数M(u1,v1)、M(u2,v2)之间内插来产生顶点的自然空间参数的开始状态M’可包括计算:

M’=RAST_INTERP(M(u1,v1),M(u2,v2),A)

其中RAST_INTERP是由在计算机图形系统中的光栅器使用的内插函数,以及A是常数。

添加一个或多个新顶点可包括:对于包括由边连接并在域空间中定义的左顶点和右顶点的初始补片:将左顶点的顶点细分因数和右顶点的顶点细分因数与阈值进行比较;响应于确定左顶点和右顶点的顶点细分因数中没有一个超过阈值,输出描述初始补片的数据;以及响应于确定左顶点和右顶点的顶点细分因数中有任一个超过阈值,形成将边再分成两个部分的新顶点,计算新顶点的顶点细分因数,分割初始补片以形成包括左顶点和新顶点的第一新补片以及包括右顶点和新顶点的第二新补片,并减小在每个最新形成的补片中的每个顶点的顶点细分因数。

新顶点可平分边。添加一个或多个新顶点还可包括:使用每个最新形成的补片作为初始补片重复该方法。对作为初始补片的每个最新形成的补片重复该方法可包括:对作为初始补片的每个最新形成的补片重复该方法,直到在每个补片中的左顶点和右顶点的顶点细分因数不超过阈值。

计算新顶点的顶点细分因数可包括:计算左顶点和右顶点的顶点细分因数的平均值;以及将新顶点的顶点细分因数设置为等于所计算的平均值。左顶点和右顶点的顶点细分因数的平均值可由下式给出:

MEAN(LEFT.TF,RIGHT.TF)=MIN(AVG(LEFT.TF,RIGHT.TF),MIN(LEFT.TF,RIGHT.TF)+INTERVAL)

其中LEFT.TF是左顶点的顶点细分因数,RIGHT.TF是右顶点的顶点细分因数,AVG()是在括弧内的值的算术平均值,MIN()是在括弧内的一系列值中的最小值,以及INTERVAL是预先定义的参数。

减小在每个最新形成的补片中的每个顶点的顶点细分因数可包括将每个顶点细分因数减小预先定义的参数INTERVAL。参数INTERVAL可以是0.5。阈值可以是零。

初始补片可以是由两个顶点——左顶点和右顶点——定义的等值线补片。

初始补片可以是三角形补片,且其中三角形补片是三个顶点的有序集合:上顶点、右顶点和左顶点。被分割的补片可以是两个最新形成的补片的父补片,以及其中第一新补片是三个顶点的有序集合:上顶点,其为被添加到父补片的新顶点;右顶点,其为父补片的左顶点;以及左顶点,其为父补片的上顶点;以及其中第二新补片是三个顶点的有序集合:上顶点,其为被添加到父补片的新顶点;右顶点,其为父补片的上顶点;以及左顶点,其为父补片的右顶点。该方法还可包括:接收输入补片;以及从输入补片产生一个或多个初始补片;以及对于多个初始补片中的每个重复该方法。

输入补片可以是具有三个顶点的三角形补片,且其中产生一个或多个初始补片可包括:比较三个顶点中的每个的顶点细分因数与阈值;响应于确定没有一个顶点细分因数超过阈值,输出描述输入补片的数据;以及响应于确定至少一个顶点细分因数超过阈值,形成在三角形的中心处的新顶点,计算新顶点的顶点细分因数,分割输入补片以形成三个初始补片,每个初始补片是以新顶点作为上顶点的三角形补片,以及减小在每个最新形成的初始补片中的每个顶点的顶点细分因数。新顶点可在三角形的质量中心处形成。输入补片的三个顶点可以是上顶点、左顶点和右顶点,且可使用MID.TF=MEAN(TOP.TF,LEFT.TF,RIGHT.TF)来计算在三角形的中心处的新顶点的顶点细分因数,其中MID.TF是新顶点的顶点细分因数,TOP.TF是上顶点的顶点细分因数,LEFT.TF是左顶点的顶点细分因数,以及RIGHT.TF是右顶点的顶点细分因数,以及MEAN()是在括弧内的值的平均值。可使用下式来计算MEAN(TOP.TF,LEFT.TF,RIGHT.TF):

MEAN(TOP.TF,LEFT.TF,RIGHT.TF)=MIN(AVG(TOP.TF,LEFT.TF,RIGHT.TF),MIN(TOP.TF,LEFT.TF,RIGHT.TF)+INTERVAL)

其中AVG()是在括弧内的值的算术平均值,MIN()是在括弧内的一系列值中的最小值,以及INTERVAL是预先定义的参数。

输入补片可以是具有四个顶点的四边形补片,以及其中产生一个或多个初始补片可包括:形成在四边形补片的中心处的新顶点;计算新顶点的顶点细分因数;分割输入补片以形成四个初始补片,每个初始补片是以新顶点作为上顶点的三角形补片;以及减小在每个最新形成的初始补片中的每个顶点的顶点细分因数。

输入补片可以是具有四个顶点和中心细分因数的四边形补片,以及其中产生一个或多个初始补片可包括:添加五个新顶点以将输入补片再分成四个子输入四边形补片;计算五个最新添加的顶点中的每个的顶点细分因数;减小在最新形成的四个子输入补片中的每个顶点的顶点细分因数;以及对于每个子输入补片:在四边形补片的中心处形成新顶点;计算新顶点的顶点细分因数;分割输入补片以形成四个初始补片,每个初始补片是以新顶点作为上顶点的三角形补片;以及减小在每个最新形成的初始补片中的每个顶点的顶点细分因数。

输入补片可以是具有三个顶点和中心细分因数的三角形补片,以及其中产生一个或多个初始补片可包括:添加四个新顶点以将输入补片再分成三个子输入四边形补片;计算五个最新添加的顶点中的每个的顶点细分因数;减小在最新形成的四个子输入补片中的每个顶点的顶点细分因数;以及对于每个子输入补片:在四边形补片的中心处形成新顶点;计算新顶点的顶点细分因数;分割输入补片以形成四个初始补片,每个初始补片是以新顶点作为上顶点的三角形补片;以及减小在每个最新形成的初始补片中的每个顶点的顶点细分因数。

输入补片的四个顶点可以是左上顶点、右上顶点、左下顶点和右下顶点,且可使用下式计算在三角形的中心处的新顶点的顶点细分因子:

MID.TF=MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF)

其中MID.TF是新顶点的顶点细分因数,TLEFT.TF是左上顶点的顶点细分因数,TRIGHT.TF是右上顶点的顶点细分因数,BLEFT.TF是左下顶点的顶点细分因数,BRIGHT.TF是右下顶点的顶点细分因数,以及MEAN()是在括弧内的值的平均值。

可使用下式来计算MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF):

MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF)=MIN(AVG(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF),MIN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF)+INTERVAL)

其中AVG()是在括弧内的值的算术平均值,MIN()是在括弧内的一系列值中的最小值,以及INTERVAL是预先定义的参数。

减小在每个最新形成的初始补片中的每个顶点的顶点细分因数可包括将每个顶点细分因数减小预先定义的参数INTERVAL。

第二方面提供图形管线,其包括:硬件细分器,其布置成接收定义在一个或多个输入补片中的每个角顶点的数据并包括布置成使用顶点细分因数对多个输入补片执行细分以产生并输出由顶点定义的多个基元的硬件逻辑,其中数据包括每个角顶点的顶点细分因数,细分包括添加一个或多个新顶点,以及其中硬件细分器还包括布置成计算每个最新添加的顶点的位移因数的硬件逻辑;以及硬件混合着色器,其布置成对于每个最新添加的顶点,使用顶点的位移因数修改该顶点的所接收的目标自然空间参数。

图形管线还可包括布置成计算每个角顶点的顶点细分因数并将顶点细分因数输出到硬件细分器的顶点着色器。

图形管线还可包括输出顶点缓冲器,以及其中将顶点细分因数输出到硬件细分器包括将顶点细分因数存储在输出顶点缓冲器中。

图形管线还可包括布置成计算每个顶点的目标自然空间参数并将目标自然空间参数输出到硬件混合着色器的域着色器。图形管线还可包括输入域缓冲器,以及其中将目标自然空间参数输出到硬件混合着色器包括将目标自然空间参数存储在输入域缓冲器中。

对于平分在两个父顶点之间的边的新顶点,布置成计算最新添加的顶点的位移因数的硬件逻辑可布置成根据顶点的父顶点的顶点细分因数来计算最新添加的顶点的位移因数。

布置成计算最新添加的顶点的位移因数的硬件逻辑可布置成将在一个或多个输入补片中的每个角顶点的位移因数设置为位移因数的最大值。

硬件混合着色器可包括布置成执行下列操作的硬件逻辑:通过在顶点的父顶点的自然空间参数之间内插来产生顶点的自然空间参数的开始状态;以及使用顶点的位移因数来在顶点的自然空间参数的所产生的开始状态和顶点的所接收的目标自然空间参数之间内插。如果顶点的位移因数等于最小值,则顶点的自然空间参数可等于顶点的自然空间参数的开始状态,以及其中如果顶点的位移因数等于最大值,则顶点的自然空间参数可等于顶点的自然空间参数的目标状态。

布置成执行细分的硬件逻辑可布置成对于包括由边连接并在域空间中定义的左顶点和右顶点的初始补片:比较左顶点的顶点细分因数和右顶点的顶点细分因数与阈值;响应于确定左顶点和右顶点的顶点细分因数中没有一个超过阈值,输出描述初始补片的数据;以及响应于确定左顶点和右顶点的顶点细分因数中有任一个超过阈值,形成将边再分成两个部分的新顶点,计算新顶点的顶点细分因数,分割初始补片以形成包括左顶点和新顶点的第一新补片以及包括右顶点和新顶点的第二新补片,并减小在每个最新形成的补片中的每个顶点的顶点细分因数。

另外的方面提供具有在其上编码的用于定义如本文所述的图形管线的计算机可读程序代码的计算机可读存储介质和具有在其上编码的用于定义配置成执行如本文所述的方法的图形管线的计算机可读程序代码的计算机可读存储介质。

如将对技术人员明显的,优选特征可以视情况被组合,并可与本发明的任一方面组合。

附图的简要说明

现在将参考附图通过示例描述本发明的实施方式,其中:

图1示出使用各种已知的细分方法的结果;

图2示出具有部分分割的位移映射的使用;

图3是使用位移因数的示例细分方法的流程图;

图4示出用于在父顶点之间内插并使用位移因数的混合过程的两个示意图;

图5示出当细分因数使用位移因数而增加时几何结构如何改变;

图6是改进的细分方法的流程图;

图7是示出各种输入补片并示出图6的方法的预处理阶段的示意图;

图8是三角形输入补片的图6的方法的预处理阶段的流程图;

图9是四边形输入补片的图6的方法的预处理阶段的流程图;

图10是将算法递归地应用于由预处理阶段输出的三个或四个三角形补片中的每个或应用于输入等值线补片的流程图;

图11是示出说明图10的方法的三角形的示意图;

图12是示出说明本文所述的改进的细分方法的三角形的示意图;

图13是改进的细分方法的另一示例流程图且是对图6所示的方法的变形;

图14是示出图13的方法的示意图;

图15是图13的方法的额外的预处理阶段的流程图;

图16示出使用图13的方法得到的示例结果;

图17是示例改进的GPU管线的示意图;以及

图18示出可被实现为计算和/或电子设备的任何形式并可配置成实现本文所述的改进的细分方法的示例性基于计算的设备的各种部件。

共同的参考数字在全部附图中用于指示相似的特征。

详细描述

下面仅通过例子描述本发明的实施方式。这些例子代表实施本发明的、申请人当前已知的最佳方式,虽然它们并不是这可被实现的唯一方式。该描述阐述例子的功能和用于构造和操作例子的步骤的顺序。然而,相同或等效的功能和顺序可由不同的例子实现。

存在使用边细分因数(TF)的多种已知的细分方法,边细分因数对(例如四边形或三角形)补片的每条边被定义并确定边(和因而补片)应被再分多少次。图1示出当使用不同的边细分因数时因而产生的三角形如何不同,但细分因数对每条边是相同的。

在图1中的前四个例子(a)-(d)示出:

(a)整数分割,对于所有四条边,边TF=3

(b)整数分割,对于所有四条边,边TF=4

(c)二次幂整数分割,对于所有四条边,边TF=3

(d)二次幂整数分割,对于所有四条边,边TF=4

使用整数分割和二次幂整数分割,沿着每条边的顶点总是均匀地间隔开;然而,不想要的视觉伪像(例如下面解释的爆裂)非常可能出现在再分级别改变(随细节级别改变)且三角形不是很小的地方,但当小多边形带来额外的渲染开销时,使多边形这么小是不合乎需要的。这个效应对二次幂整数分割是尤其显著的,因为步长可以大得多。

在图1中的第二四个例子(e)-(h)示出(与例子(a)-(d)不同)以变化的偏移产生顶点的部分分割方法:

e)奇数部分分割,对于所有四条边,边TF=3.0

f)奇数部分分割,对于所有四条边,边TF=4.0

g)偶数部分分割,对于所有四条边,边TF=3.0

h)偶数部分分割,对于所有四条边,边TF=4.0

一些已知的系统通过允许“部分”细节级别(例如,如在例子(e)-(h)中所示的)来避免沿着边的“爆裂”伪像,其中任何新顶点最初在现有的顶点的位置处被创建,且随着细节级别增加,那些顶点逐渐“滑”到合适位置上,如在图2(a)中对在参量空间中的仅仅一条边所示的。虽然在表示中的突然跳跃在很大程度上被消除,这样的方案可能遭受可通过位移映射的使用而恶化的令人不安的、不稳定的“漂浮/摆动”伪像,且这可参考图2(b)和(c)被描述。

图2(b)示出示例位移映射横截面,而图2(c)示出当细分因数改变时这个横截面如何应用于边(例如,如图2(a)所示的边)。箭头201-204示出当细分因数从4.0改变到5.0(箭头201、202)和从5.0改变到6.0(箭头203、204)时顶点的位移如何改变。

在本文描述了用于确定在网内的顶点的参数的改进的方法,其使用位移因数来减轻上面参考图2所述的爆裂和漂浮伪像。如下面更详细所述的,在网中的顶点的参数(其中这些参数可被称为“顶点成员值”并可包括位置、法线、切线等)基于顶点的位移因数从“目标”或最终值移动。这具有下面的效果:当新顶点最初被添加到网时,它的参数是顶点的父顶点的参数的平均值,且然后参数逐渐改变,直到它们等于目标值为止。这避免顶点参数的值的突然变化,其可导致不需要的视觉伪像。

可结合任何细分方法来使用该方法(和因而位移因数),细分方法(a)使用为域(例如四边形、三角形或等值线)的每个角顶点定义的细分因数,并(b)包括添加多个新顶点,其中每个新顶点被添加在将连接两个现有顶点的边再分成两个部分(其在一些例子中可以是相等的部分,使得新顶点平分边)的位置(在域空间中)处。最新添加的顶点可被称为子顶点,且两个现有的顶点可被称为父顶点。顶点的这些细分因数被称为“顶点细分因数”以将它们与在上面所述的已知方法中使用的边细分因数区分开,且下面参考图6-16描述了使用顶点细分因数的示例细分方法。

在这个描述中,表面补片被称为通常有限的N维表面(或在等值线的情况下,N维曲线段),其为将参数映射函数应用于有界限的2D域的结果,该2D域是四边形或三角形(或在等值线的情况下,1D线段)。因而产生的表面或等值线可被考虑为N维的,因为它可不仅包括用于笛卡尔(或均匀)空间定位的3(或4)维,而且包括其它参数例如纹理坐标。如上所述,表面补片可弯曲以与它们代表的对象的表面保持一致和/或使位移映射被应用。然而,细分(即补片的再分)不在“自然空间”中被执行(即它不对弯曲表面补片执行)而替代地在域空间(其也可被称为参量空间或参数空间)中被执行,其中域中的任何位置可由被称为域空间坐标的两个坐标(u,v)描述,这意味着细分过程与存在于最终表面中的任何曲率(虽然用户在确定细分因数时可考虑这个曲率)无关。

当在下面的描述中描述细分方法时,术语“补片”用于指定界域的界限的两个、三个或四个顶点(分别对于等值线、三角形或四边形)的有序集合。术语“域”因此指由补片的顶点定界的二维空间。术语“顶点”通常用于描述位置加上其它属性,其中这些属性根据背景而不同。例如,来自域着色器的输入控制点和输出顶点包括3D位置加上其它参数,例如法线、切线、纹理等,而在细分器内的顶点(即在细分方法内使用的顶点)包括域空间坐标和顶点细分因数。在细分器内的这些顶点因此与输入控制点或形成最终三角形的因而产生的N维顶点不相同。

图3是使用位移因数的示例细分方法的流程图。该方法显示可在GPU管线中实现的三个高级方法块。下面更详细描述GPU管线的例子。

如图3所示,例如根据来自摄像机的顶点的位置来对一个或多个补片的每个角顶点计算顶点细分因数(块302)。然后例如使用下面的两个示例方法之一或可选的方法基于补片的角顶点的顶点细分因数将这些输入补片中的每个再分成多个基元(例如三角形或线)(块304)。在再分期间,一个或多个新顶点被添加(块305),每个新(“子”)顶点被添加在域空间中的将在两个现有的(“父”)顶点之间的线再分成两个部分的位置处。如上所述,这两个部分可以是相等的,使得子顶点平分在两个父顶点之间的线(或边),或在这两个部分的长度中可以有差异,使得子顶点不确切地放置在这两个父顶点之间。对每个最新添加的顶点计算位移因数(块306),且随后连同顶点的域空间坐标一起使用这些位移因数(在块308中)以为基元中的每个顶点产生一个或多个自然空间顶点参数,例如位置、法线和切线。在新顶点被添加时使用顶点(例如父顶点,虽然在其它例子中,可此外或替代地使用子顶点的顶点TF)的顶点细分因数来计算这些位移因数(在块306中),且这些顶点细分因数不一定与在细分过程结束时的顶点的顶点细分因数相同,如下面参考这两个示例细分方法更详细描述的,顶点系统因数可在细分过程期间减小。

如在下面更详细描述的,顶点的自然空间参数的产生(在块308中)可包括产生子顶点的一个或多个目标自然空间参数和它的两个父顶点的相应自然空间参数(块310)以及接着执行“混合”(块312),其中对于子顶点的每个自然空间参数,基于子顶点的位移因数并基于这两个父顶点中的每个的自然空间参数的所产生的值来修改特定参数的目标值。例如,如果参数是自然空间位置,混合采用子顶点的目标自然空间位置和它的两个父顶点中的每个的自然空间位置,并基于子顶点的目标自然空间位置、这两个父顶点中的每个的所计算的自然空间位置(其如下所述将是那些顶点的“目标”自然空间位置)和子顶点的位移因数来产生子顶点的已修改的自然空间位置。

顶点细分因数的计算(在块302中)可例如在按顶点(即在不知道网拓扑的情况下)操作的顶点着色器内实现,同时输入补片的再分(在块304中)和位移因数的计算(在块306中)可在硬件细分单元(或细分器)内实现。最后,每个顶点的自然空间参数的产生(在块308中)可在GPU中的一个或多个着色器内实现(例如可在混合着色器内实现混合,混合着色器可在硬件中实现并可使用由域着色器产生的目标自然空间参数,域着色器可在软件中实现)。

如本文所述,位移因数的使用处理被称为“爆裂”的问题,当细节级别改变时(例如当对象更靠近摄像机且因此需要以较高的细节级别被渲染时),“爆裂”在已知的细分方法中产生。爆裂常常用于描述突然改变方位的基元的视觉伪像,然而它可以指在顶点成员中的任何不连续性(例如由于添加使照明突然改变的新顶点而引起的在网的点上的法线的突然变化)。这主要在顶点被形成并紧接着由高度图移动时产生。一些已知的分形方法通过在老顶点的顶部上引入新顶点(这保证顶点的所有特性例如位置、法线、切线、纹理坐标等都是相同的)并随细节级别增加将它们滑动到合适位置上(如上面参考图2所述的)而克服了这个问题。然而,这样的技术的使用引入“漂浮”伪像,其中顶点的运动导致看起来发微光的几何结构(如在图2中所示和在上面所述的)。

可定义位移因数(如在块306中计算的),使得它们具有在零和一之间的值(即它们具有在[0,1]中的值),且顶点的位移因数的值根据顶点的“年龄”而改变。为了避免爆裂,当位移因数被首次引入(例如在特定的细节级别处)时,位移因数对于顶点为零,且然后位移因数增加(随细节级别增加)且在顶点(随细节级别进一步增加)变成父顶点之前必须为一。

虽然本文所述的例子涉及范围从零到一的位移因数,在其它例子中,可使用可选的范围,且范围可以更一般地被规定为[dfmin,dfmax],其中dfmin是可能的最小位移因数(对于最新添加的顶点),而dfmax是可能的最大位移因数(对于原始顶点和父顶点)。

在补片中的顶点的顶点细分因数确定补片是否需要进一步的再分(在块304中,如在下面参考两个示例细分方法更详细描述的),且父顶点的顶点细分因数可用作子顶点的年龄以及子顶点本身是否可能是父顶点的指示器。如果父顶点(或至少一个父顶点,其中再分视单个顶点的顶点细分值而定)的顶点细分因数刚好满足再分的条件,则子顶点被最新添加且它的位移因数为零。如果父顶点(或至少一个父顶点,其中再分视单个顶点的顶点细分值而定)的顶点细分因数明显超过再分的条件,使得再分的多于一个级别被需要,则子顶点本身可以是父顶点且它的位移因数为一。位移因数的中间值(即大于零但小于一)相应于下面的情况,其中父顶点(或至少一个父顶点,其中再分视单个顶点的顶点细分值而定)的顶点细分因数足够大以超过再分的标准(即子顶点没有被最新添加且因此位移因数是非零的),但没有大到使得进一步再分(除子顶点的添加之外)可被触发(即子顶点不可能是父顶点且因此位移因数小于一)。

虽然本文的讨论涉及随细节级别增加的位移因数的变化,该方法也在下面的情况中适用,其中细节级别下降(例如其中对象远离摄像机移动)且因此顶点的位移因数在一开始,其中该顶点可以是父顶点,且然后随着它的子顶点移除该位移因数减小,且当顶点本身被移除时减小到零。

在下面所述的示例细分方法中,补片(或边)的再分出现(在块304中),其中一对顶点的顶点细分因数中的一个或两个超过阈值THRES,且在每次再分时,顶点细分因数减小了量Δ。因此,如果特定的子顶点的父顶点中的一个或多个具有超过THRES+Δ的顶点细分因数,则再分的多个级别可出现(且子顶点本身可以是父顶点)。然而如果特定的子顶点的父顶点中的一个或多个具有刚刚超越THRES的顶点细分因数,则只有再分的一个级别将出现,且子顶点将被最新创建。

如果V1和V2是作为顶点V3(子顶点)的父顶点的两个顶点且每个顶点的顶点细分因数(TF)分别被表示为V1.TF、V2.TF和V3.TF,则子顶点V3的位移因数V3.DF由下式给出:

V3.DF=G(MAX(V1.TF,V2.TF)) (1)

其中MAX()是在括弧内的数字的最大值(例如在上面的表达式中的V1.TF和V2.TF中的最大值,且这可以可选地被表示为TFmax),以及:

G(TF)=(TF–THRES)/Δ,如果TF∈(THRES,THRES+Δ) (2)

否则G(TF)=1,

其中TF∈(THRES,THRES+Δ)表示TF位于在THRES和THRES+Δ之间但不等于THRES或THRES+Δ的开区间中,以及

TF=MAX(V1.TF,V2.TF)=TFmax

使用函数MAX(),因为如上所述,如果V1.TF或V2.TF高于THRES,则细分出现(在块304中),所以当MAX(V1.TF,V2.TF)至多是THRES时,顶点“消失”。G(TFmax)对等于THRES的TFmax为0(即顶点刚刚出现),而对于高于THRES+Δ的TFmax为1。对于将是父顶点的V3,TFmax必须大于这个界限。

在可能的位移因数的范围由[dfmin,dfmax](而不是[0,1])给出的场合,方程(2)变成:

G(TF)=(1-α)*dfmin+α*dfmax (3)

其中α=(TF–THRES)/Δ。

在块304中使用下面描述的示例细分方法的场合,THRES可以是0.0,且对于四边形或三角形补片Δ=INTERVAL,以及对于等值线补片Δ=2x INTERVAL,其中INTERVAL可以是0.5(假设细分因数被规定为以2为底的对数)。

将有一些顶点,其位移因数被固定在一,因为那些顶点将总是存在(且因此必须总是完全被移动)。这些顶点包括目标输入补片的任何顶点和在各种例子(例如其中第一示例细分方法被使用)中包括四边形域的中间顶点。

根据所使用的特定细分方法,可以有具有多于两个父顶点的顶点。例如,输入三角形域的中间顶点具有三个父顶点(被表示为上、左和右),且在这样的例子中,那个中间顶点的位移因数由下式给出:

G(MAX(TOP.TF,LEFT.TF,RIGHT.TF)) (4)

其中TOP.TF是上顶点的顶点细分因数,LEFT.TF是左顶点的顶点细分因数,以及RIGHT.TF是右顶点的顶点细分因数。

可参考图4描述自然空间顶点参数的混合(在块308中且特别是在块312中)。上部图401示出一个特定顶点参数——自然空间位置的混合,而下部图402将该方法扩展到与所有顶点参数(其也可被称为顶点成员值)有关。

如上所述,每个新顶点被给了位移因数df(如在块306中计算的),其描述顶点应被移动得多远。0的位移因数应指示顶点刚刚被引入且因此应位于穿过在自然空间中的它的“父”顶点(“开始位置”)的线上。1的位移因数应指示顶点可以是父顶点且应被设置到可由高度图给出(例如通过对灰度级图像采样)或从等效信息的可选源例如贝塞尔表面确定的在自然空间中的它的正确位置。

在图4中的上部图401示出新顶点V3及其两个父顶点V1和V2。顶点的位置被显示在域空间中(如由箭头410-412指示的),其中V3=(V1+V2)/2。H()是确定任何顶点的全(或目标)位移的高度函数,且V3’是在两个父顶点之间的中间点(在自然空间中)处的新顶点的开始位置,即V3’=(H(V1)+H(V2))/2。

V3的移动的(或修改的)位置(在自然空间中)是被表示为F(V3,df)的其位移因数df的函数,并通过在V3’和H(V3)之间内插来确定如下:

F(V3,df)=(1–df)*V3’+df*H(V3) (5)

在顶点具有三个父顶点(而不是如在上面的例子中的两个)的情况下,则V3’由(H(V0)+H(V1)+H(V2))/3给出,其中父顶点是V0、V1和V2。这可在顶点具有多于三个父顶点情况下进一步外插。

现在参考在图4中的下部图402,因为这个图不只与位置有关,为一的位移因数指示顶点应被设置到其最终或目标状态,而对于小于一的位移因数,基于位移值来根据目标值修改每个顶点成员值(例如位置、法线、切线)的值。

图4中的图402将(u1,v1)和(u2,v2)示为两个父顶点的域空间坐标并将(u3,v3)示为新(子)顶点的域空间坐标,其中u3=(u1+u2)/2以及v3=(v1+v2)/2。M()是计算目标顶点成员值的函数,给定域空间坐标(u,v),且M’是新(子)顶点的开始状态。M’的值可被确定如下:

M’=RAST_INTERP(M(u1,v1),M(u2,v2),A) (6)

其中RAST_INTERP是跨三角形域由光栅器(在GPU管线中)使用的内插函数,且通常是线性内插,以及A是常数。在子顶点平分边A=0.5以及子顶点不平分边的例子中,常数A可具有不同的值。使用M’的这个选择,任何新顶点的状态具有与像素(其在它的父顶点的正中间)在光栅化之后将具有的相同的成员值,并因此在新顶点被引入之后确保没有几何结构的爆裂或照明。

为了确定新顶点的当前状态F(u3,v3,df),该方法在M’和M(u3,v3)之间由df线性地内插:

F(u3,v3,df)=(1–df)*M’+df*M(u3,v3) (7)

在顶点具有三个父顶点(例如下面描述的在第一示例细分方法中的三角形域的中间顶点)的情况下,M’替代地由下式给出:

M’=RAST_INTERP(M(1,0,0),M(0,1,0),M(0,0,1),C,D,E) (8)

在质量中心坐标中,其中C、D和E是常数。在子顶点放置在质量中心处、C=1/3、D=1/3、E=1/3以及其中子顶点不准确地放置在质量中心处的例子中,常数C、D、E可具有不同的值。

在图5中的图像使用位移因数(如上所述)展示当细分因数增加时几何结构如何改变。域以未细分的三角形501开始。然后一需要再分,就引入中间顶点502,然而所有顶点仍旧位于三角形的平面中。当细分因数增加时,顶点如随后的图所示的移动,直到顶点到达其正确的位置为止。

如上所述,位移因数可与任何可兼容的细分方法(即使用顶点细分因数并包括添加多个新顶点的方法,其中每个新顶点被添加在域空间中的点处,该点再分在两个父顶点之间的边)一起被使用。下面描述示例细分方法。

当选择细分方法时,考虑因素不仅包括避免视觉伪像和在边细分设置的给定组合下产生的三角形的数量(因为细分的模型的渲染成本部分地取决于三角形的数量),而且包括那些三角形的高宽比。一般,图形系统(软件或硬件)将比渲染具有相同的面积但更高的周长与面积比的(长细)三角形更快地渲染暗示最小周长与面积比的给定屏幕面积(即屏幕像素)的“等边”三角形。此外,当值例如明暗处理的结果在顶点处被计算并接着跨三角形被内插时,有更多等边形状的三角形应导致更少的伪像。

另一考虑因素是用于产生三角形的图案的算法的复杂度。如果算法可保持简单和/或有规律(例如没有需要不同地被处理的很多“特殊情况”),这可减小硬件或软件实现成本。

最后合乎需要的考虑因素是在细分模式中的旋转/反射对称性。例如,使用以比如顺时针顺序ABCD给出的顶点并使用适当的细分因数定义的四边形补片产生与具有被列为BCDA的顶点的“等效”四边形相同的最终三角形网将是优选的。一些现有的细分方案不保证这个特性(例如见在图1的例子(e)和(f)中的“奇数”细分方法中的中间正方形)。

可参考图6-16描述示例细分方法。

图6是改进的细分方法的流程图。当补片(被称为输入补片)被输入到细分器内时,该方法开始。细分器(其可以是硬件细分器)接收输入补片(块602),其中这个输入补片可以是三角形补片702、四边形补片704或等值线补片706,如图7所示。虽然四边形补片706是在域空间中(具有在(0,0)、(1,0)、(0,1)和(1,1)处的顶点)的四边形,它在自然空间中(即在3D或2D环境内)代表的形状可以是不同的形状。如上所述,在域空间中而不是在自然空间中执行细分。

如果输入补片是三角形补片或四边形补片,则在细分算法递归地应用于在输入补片内的三角形补片(块606)之前补片经历“预处理”阶段(块604)。预处理阶段用于确保细分与方位无关,且作为结果,对等值线补片706是不需要的(因为算法对称地工作,且因此没有任何因而产生的细分的方位相关性)。

如果输入补片是三角形补片702,则预处理阶段(块604)输出一个三角形补片702(其与输入三角形补片相同,且其中不需要细分)或三个三角形补片708-710。如果输入补片是四边形补片704,则预处理阶段(块604)输出四个三角形补片712-715。如果输入补片是等值线补片,则(由于上面阐述的原因)不需要预处理且细分算法递归地应用于输入等值线补片(块608)。

图8-11更详细地示出改进的细分方法的阶段。如所述的该方法使用下面的标记:

·THRES–细分的阈值,其可例如被设置为0.0或0.5,其中顶点TF是使用以2为底的对数的细分的量的值。

·VERTEX.TF–顶点的细分因数,其可以是任何实数(虽然在各种例子中,任何负值可被强制限制到零,使得细分因数是非负实数)。在各种例子中,顶点TF是至少0.0(无细分)和至多6.0(最大细分),其中使用以2为底的对数的细分的量的值例如5.0的细分因数相应于32个再分。然而在其它例子中,最大顶点TF可超过6.0(或64,其中未使用以2为底的对数)。

·INTERVAL–在每次迭代之后VERTEX.TF减小的非零数量,其可例如被设置为0.5,其中顶点TF是使用以2为底的对数的细分的量的值。

·MEAN()–给出二、三或四个顶点细分因数的“平均值”的对称函数。这可以是算术平均或可选的函数,且下面更详细描述一个这样的可选函数。

为了下面的描述的目的,顶点TF是使用以2为底的对数的细分的量;然而,将认识到,它可以可选地被写为它的实际全值,且在这种情况下,下面阐述的顶点TF的计算以及参数THRES和INTERVAL的值将相应地被修改。然而,因为硬件实现在使用以2为底的对数的情况下快得多,在到细分器的输入包括实际顶点TF(而不是使用以2为底的对数)的例子中,输入顶点TF可在实现本文所述的改进的细分方法之前转换成以2为底的对数。

图8是三角形输入补片702的预处理阶段604的流程图,且如图7所示,三角形补片的顶点可被标记为“TOP”、“RIGHT”和“LEFT”。哪个顶点是“TOP”的选择是任意的,且这个预处理阶段确保算法是旋转和反射性地对称的(即,使得相同的细分结果被实现,而不考虑顶点在这个预处理阶段中被考虑的顺序)。

如图8所述,当三角形补片(TOP,RIGHT,LEFT)702被输入到细分器内且任何顶点细分因数大于阈值时,THRES(在块802中的“是”)细分出现。被表示为“MID”的新顶点716在三角形的中心处(例如在质量中心处)形成(块804),且新MID顶点的顶点TF被计算(在块806中)为:

MID.TF=MEAN(TOP.TF,LEFT.TF,RIGHT.TF) (9)

其中MID.TF是MID顶点的顶点TF,TOP.TF是TOP顶点的顶点TF,LEFT.TF是LEFT顶点的顶点TF,以及RIGHT.TF是RIGHT顶点的顶点TF。所有四个细分因数(即TOP.TF、LEFT.TF、RIGHT.TF和MID.TF)然后减小了参数INTERVAL(即通过减去INTERVAL,其中以2为底的对数表示法被使用),因为一些细分出现(块808)。

三个三角形补片(MID,RIGHT,LEFT)710、(MID,LEFT,TOP)709和(MID,TOP,RIGHT)708然后形成(块810),且正是这些三角形补片使用如下所述的细分算法被细分(在块606中)。

如果没有一个顶点细分因数大于阈值THRES(在块802中的“否”),则没有细分出现。在这种情况下,补片仅作为一个基元穿过细分器(块812),以便使该方法没有过度细分。

图9是四边形输入补片704的预处理阶段604的流程图,且如图7所示,四边形补片的顶点可被标记为“TLEFT(或左上)”、“TRIGHT(或右上)”、“BRIGHT(或右下)”和“BLEFT(或左下)”。哪个顶点是“上”和哪个是“下”的选择是任意的,且这个预处理阶段确保算法是旋转和反射性地对称的(即,使得相同的细分结果被实现,而不考虑顶点在这个预处理阶段中被考虑的顺序)。

如图9所述,当四边形补片(TLEFT,TRIGHT,BLEFT,BRIGHT)704被输入到细分器内时,被表示为“MID”的新顶点718在四边形的中心处、即在域空间坐标(0.5,0.5)处形成(块904),且新MID顶点的顶点TF被计算(在块906中)为:

MID.TF=MEAN(TLEFT.TF,TRIGHT.TF,BLEFT.TF,BRIGHT.TF) (10)

其中MID.TF是MID顶点的顶点TF,TLEFT.TF是TLEFT顶点的顶点TF。所有五个细分因数(即TLEFT.TF,TRIGHT.TF,BRIGHT.TF,BLEFT.TF和MID.TF)然后减小了参数INTERVAL(即通过减去INTERVAL,其中以2为底的对数表示法被使用),因为一些细分出现(块908)。

四个三角形补片(MID,TLEFT,TRIGHT)712、(MID,TRIGHT,BRIGHT)713、(MID,BRIGHT,BLEFT)714和(MID,BLEFT,TLEFT)715然后形成(块910),且正是这些三角形补片使用如下所述的细分算法被细分(在块606中)。

图10是将算法递归地应用于由预处理阶段输出的三个或四个三角形补片中的每个的流程图,且这可参考图11所示的三角形被描述。如图11所示,三角形补片是在顺时针方向上的三个顶点(TOP,RIGHT,LEFT)的有序集合。注意,第一顶点总是“TOP”顶点,且对于初始三角形补片(如由预处理阶段输出的),这个“TOP”顶点相应于在预处理期间添加的“MID”顶点708、718(块804、904)。

如图10所示,给定三角形补片1100(其在第一次迭代中是初始补片1000),当且仅当下式成立时细分出现:

LEFT.TF>THRES或RIGHT.TF>THRES (11)

其中LEFT.TF是LEFT顶点的顶点TF,且RIGHT.TF是RIGHT顶点的顶点TF(在块1002中的“是”)。

如果LEFT.TF>THRES或RIGHT.TF>THRES(在块1002中的“是”),则形成新顶点MID 1102(在块1004中),其将域空间中(由箭头1104指示)的边LEFT->RIGHT分成两个部分。新MID顶点的顶点细分因数然后被计算(在块1006中)为:

MID.TF=MEAN(LEFT.TF,RIGHT.TF) (12)

其中MID.TF是MID顶点的顶点TF,LEFT.TF是LEFT顶点的顶点TF,以及RIGHT.TF是RIGHT顶点的顶点TF。为了协定起见,定义MID再分的边的顶点LEFT和RIGHT被表示为MID的“父顶点”。

在很多例子中,新顶点MID作为在域空间中的边LEFT->RIGHT的二等分线添加。然而,在其它例子中,新顶点MID可被添加在一个位置处,该位置在域空间中的边LEFT->RIGHT上但不准确地平分它。在各种例子中,沿着边的MID的位置可例如使用父顶点的顶点TF被加权。

两个子三角形补片(MID,LEFT,TOP)1106和(MID,TOP,RIGHT)1108被形成(块1008和1010),且在每个三角形补片1106、1108中的所有细分因数减小了参数INTERVAL(块1012,即通过减去INTERVAL,其中以2为底的对数表示法被使用)。该方法然后在这些补片中的每个上递归。当对在块1008或块1010中创建的三角形补片执行该方法时,“TOP”顶点相应于被添加(在块1004)以创建补片的“MID”顶点1102,且这对父补片的“TOP”顶点将是不同的(例如补片1100可被考虑为补片1106和1108的父补片,且1100的“TOP”顶点1110与补片1106和1108中的每个的“TOP”顶点1102不同。

如果在任何阶段没有细分出现(在块1002中的“否”),则基元(其为补片)被添加到缓冲器(块1014),例如到索引缓冲器。

如上所述,图10的方法应用于由预处理阶段(块604)产生的三个或四个三角形补片中的每个并递归地应用于通过那些初始补片的再分而创建的任何补片。

因为顶点细分因数是有限的且INTERVAL是不变的和非零的,最终所有顶点细分因数(在所有三角形补片中)将至多是THRES且该过程将终止。

如可在图11中看到的,最新添加的MID顶点是在被形成(在块1008和1010中)的这两个补片中的顶点,且在这两个补片中,这个顶点被考虑为“TOP”顶点。当递归成两个子补片时,最新添加的MID顶点的顶点细分因数的当前值必须被使用。在可通过为每个子补片复制顶点TF或有对算法的最后步骤而确保的示例实现中,其中对于任何补片且在它的两个子补片上递归之后,每个顶点TF增加了参数INTERVAL。

在图10中使用的相同算法也可应用于等值线补片(在块608中),虽然如上所述,不需要预处理,且在等值线补片的情况下,算法应用于线(即等值线和子等值线)而不是如可参考图7所述的三角形。

如果等值线补片(LEFT,RIGHT)706被输入到细分器(作为初始补片1000),则如果LEFT.TF或RIGHT.TF高于THRES(在块1002中的“是”),线被再分。如果LEFT.TF或RIGHT.TF高于THRES(在块1002中的“是”),则添加在域空间中再分(例如平分)LEFT->RIGHT等值线706(块1004)的新MID顶点720。最新添加的MID顶点的顶点TF被计算(在块1006中)为:

MID.TF=MEAN(LEFT.TF,RIGHT.TF) (13)

其中MID.TF是MID顶点的顶点TF,LEFT.TF是LEFT顶点的顶点TF,以及RIGHT.TF是RIGHT顶点的顶点TF。

MID顶点720的添加将原始等值线706分成两个子等值线722、724(在块1008和1010中形式),且每个顶点TF减小了2*INTERVAL(在块1012中,即通过减去2*INTERVAL,其中以2为底的对数表示法被使用)——注意,这比针对三角形补片更快地减小顶点TF以产生再分的正确量。该方法然后在这些子等值线中的每个上递归并在所有顶点细分因数是至多THRES时终止。

上面所述的改进的细分方法使用MEAN()函数。虽然这在一些例子中可以是顶点细分因数的算术平均,这在从一个顶点移动到另一顶点时可导致几何结构的平稳引入,但这样的函数将常常导致T结出现和因而针对顶点TF的某些值而破坏(例如在整个补片上的顶点TF中的差异是相当极端的)。因此,在很多例子中,可选的函数如下用于MEAN():

MEAN(TF1,TF2,…)=MIN(AVG(TF1,TF2,…),MIN(TF1,TF2,…)+INTERVAL) (14)

其中AVG()是在括弧内的一系列值(例如在上面的例子中的顶点TF1、顶点TF2、…)中的算术平均值,且MIN()是在括弧内的一系列值(例如在上面的例子中的顶点TF1、顶点TF2、…)中的最小值。

上面给出的MEAN()函数是确保没有破裂的最接近算术平均值的函数,且这可如下面所阐述的被展示。

如上所述,在细分内的T结可导致破裂,且因此可能希望确保没有T结可在域的内部中或沿着由两个域共用的边产生。本文所述的改进的细分方法通过保证任何边的再分唯一地由边的端顶点的细分因数(且不由其它)定义来确保这个。因此,如果边被两个域(即两个相邻域)共用,则域共用它的两个端顶点(和它们的顶点细分因数),且相同的再分将产生。

如上所述,只有当端顶点细分因数超过阈值时,再分才出现,所以没有额外的再分可出现。唯一的可能问题是如果由于以前级别的再分未提前发生,再分在它应出现时不出现,且因此为了避免这个问题,必须满足下面的条件(其指具有如在图11中所示的标记的顶点的三角形补片1100):

在TOP->LEFT边上所需的细分暗示在LEFT->RIGHT边上发生的细分

即(TOP.TF>THRES或LEFT.TF>THRES)

=>(LEFT.TF+INTERVAL>THRES或RIGHT.TF+INTERVAL>THRES)

这个条件在不失去一般性的情况下由于对称性只考虑左手边。

可接着证明上面规定的MEAN()函数满足这个条件:

情况1:如果LEFT.TF>THRES则LEFT>TF+INTERVAL>THRES

情况2:TOP.TF>THRES具有下面的两个子情况:

情况2.1(TOP是如在图11中的补片1100中所示的补片的中间顶点,且这相应于在图7中的顶点716或718),即TOP.TF=MEAN(LEFT.TF,RIGHT.TF,…)),因此

THRES<TOP.TF

=MIN(AVG(LEFT.TF,RIGHT.TF,…),MIN(LEFT.TF,RIGHT.TF,…)+INTERVAL)

<=MIN(LEFT.TF,RIGHT.TF,…)+INTERVAL

<=LEFT.TF+INTERVAL

所以LEFT.TF+INTERVAL>THRES

情况2.2(TOP通过具有LEFT的再分产生,作为端顶点,如在图12中的补片1200中所示,其中TOP 1202通过边LEFT->OTHER的再分产生,即TOP.TF=MEAN(LEFT.TF,…)),所以

THRES<TOP.TF

=MIN(AVG(LEFT.TF,…),MIN(LEFT.TF,…)+INTERVAL)

<=MIN(LEFT.TF,…)+INTERVAL

<=LEFT.TF+INTERVAL

所以LEFT.TF+INTERVAL>THRES

在情况2.2中,同一逻辑可应用于TOP.TF=MEAN(RIGHT.TF,…)(其相应于在图12中所示的反射)以如所希望的得到RIGHT.TF+INTERVAL>THRES。也注意,函数的选择是最佳的,因为超过最小值加上INTERVAL的任何函数将不总是满足这些不等式。因此,MEAN()函数不能是更接近算术平均值的任何函数。

允许用户规定补片的中心TF有时可能是合乎需要的,该中心TF在LOD上不同于补片的角的顶点TF,特别是在动画中。例如,这可用于更好地近似与在四边形或三角形补片之上的纹理相关的高度图,例如,如果该图在动物的刺突的情况下具有在中间的非常快速的跳跃。图13示出添加另一可选的预处理阶段(块1302)的对图6(如上所述)的方法的变形,该预处理阶段实现四边形或三角形补片的中心TF的使用。如图13所示,(在块1302中的)这个额外的预处理阶段在上面所述的(在块604中的)预处理器阶段之前实现,并分割输入补片(其可以是四边形或三角形)。与原始预处理阶段(块604)不同,额外的预处理阶段(块1302)还可应用于等值线;然而它在这个上下文中较不有用。在等值线的情况下,等值线被再分,且最新添加的中间顶点被分配中心TF。然后再分如上所述在两个子等值线(例如LEFT-MID和MID-RIGHT)上继续进行。

可参考图14和15描述额外的预处理阶段(块1302)。图14示出阶段对四边形输入补片1402或三角形输入补片1404的应用的示意图,以及图15示出额外的预处理阶段的流程图。在中心细分因数被启用的情况下,用户必须向细分器提供每补片中心TF以及每个角顶点的顶点TF(对于三角形补片是三个且对于四边形补片是四个)。

如图14所示,额外的预处理阶段将四边形输入补片1402分成四个四边形补片1406-1409并将三角形输入补片1404分成三个四边形补片1410-1412。为了实现此,预处理四边形输入补片1402需要添加五个新顶点(块1502):具有中心TF的中心顶点1414(由所有四个子域1406-1409共用)、中上顶点1416、中右顶点1418、中下顶点1420和中左顶点1422。通过采用最新添加的顶点的相邻角TF的MEAN()对每个最新添加的顶点计算(在块1506中)它们的细分因数。在各种例子中,可使用由方程(14)给出的MEAN()函数,因为它导致更一致的细分模式;然而在其它例子中,可使用算术平均值。

预处理三角形输入补片1404需要添加四个新顶点(块1504):具有中心TF的中心顶点1424(由所有三个子域共用)、中右顶点1426、中下顶点1428和中左顶点1430。通过采用最新添加的顶点的相邻角TF的MEAN()对每个最新添加的顶点给出(如在块1506中计算的)它们的细分因数。如上所述,在各种例子中,可使用由方程(14)给出的MEAN()函数,因为它导致更一致的细分模式;然而在其它例子中,可使用算术平均值。

额外的预处理阶段的最后一个阶段(块1508)减小每个细分因数,且在各种例子中,每个TF减小了2*INTERVAL。TF的这个减小(在输入到块604的原始预处理阶段之前)确保在补片的每条边界边上做出正确数量的再分并指示那个细分已发生。

在将原始输入补片再分成三个或四个四边形补片后,在额外的预处理阶段(块1302)中,这三个或四个四边形补片(具有如在块1508中计算的其顶点TF)被输入到原始预处理阶段(块604),好像它们是原始输入补片一样,且该方法如上所述继续进行。图16示出可使用图13的方法得到的各种示例细分。

由于额外的预处理阶段(块1302和图15)将每个域边再分至少一次的事实,即使使用0.0的TF,任何单个所连接的网也应在完整地有或没有中心TF的情况下被细分,以确保没有破裂出现(即在单个所连接的网中的所有补片都应使用同一方法,即它们都应使用图6的方法或图13的方法,且没有使用图6的方法的一些输入补片和使用图13的方法的其它输入补片)。

在结合位移因数使用上面所述的示例细分方法(如上面参考图3-5所述的)的场合,组合方法可处理在已知的细分方法中产生的很多或所有下面的问题:

·无突然的移动(snapping)——使用第一示例细分方法,几何结构随细分因数增加而增加了小增量以产生平滑的过渡。这帮助渲染时间的预测。

·无爆裂——使用第一示例细分方法,新顶点被引入在正确的域空间坐标处,且位移因数可用于将它们缓慢地扰动成正确的目标状态,作为结果,没有由于在顶点成员值中的瞬时变化而引起的爆裂伪像。

·无破裂——如上面证明的,第一示例细分方法没有产生在域内或沿着域的边界的T结。

·无漂浮——当细分因数增加时,由细分器引入的每个顶点维持其域空间位置且因此没有“漂浮”伪像。

·无过/欠细分——在边的每端处的整数顶点细分因数t相应于2t个再分。此外,在四边形上的t的平均顶点细分因数大致相应于22t个顶点和多达两倍的基元(其为最小值)。类似地,三角形补片相应于个顶点和多达两倍的基元。

·无细三角形——如上所述,改进的细分方法每补片只产生四个(或更少)类别的三角形,且这限制每补片面积与周长比的平方根的最小值。

·空间/时间复杂度——算法是递归的(如图6所示),且每个子域/补片可独立地被处理,这提供相当大的并行性。输入顶点需要顶点细分因数的额外固定点值,且输出顶点可能需要额外的固定点位移因数以及它的两个“父”域空间坐标。

下面给出在示例实现中的组合方法的要求的例子:

在上面的表中,所提出的方法所需的额外顶点成员是每个输入顶点的固定点细分因数和每个输出顶点的五个固定点值(位移因数和两个域空间坐标)。M是输出顶点缓冲器的当前大小,且α()是M的某个函数,取决于缓冲器如何被构造。α()一般是在log(M)和M之间的某个数。

此外,本文所述的改进的细分方法在各种例子中具有下面的另外的质量:

·无冗余——高于阈值,没有两组顶点细分因数产生相同的网形状。这由位移因数保证。

·方位无关的——通过将补片分成三角形补片的扇,且使用中间顶点作为每个的顶(在预处理阶段中,块604),对三角形的方位不做出选择,所以将总是产生相同的细分。

·N边形——改进的细分方法可容易适合于通过将补片分成三角形的扇来支持具有N条边的任何多边形补片(在预处理阶段604的变形中)。在每种情况下,对于平均细分因数t,该方法将产生大约个顶点和多达两倍的基元。

在扩散和镜面照明下使用本文所述的改进的细分方法来渲染具有纹理、法线和高度图的四边形或三边形域,没有可见伪像被用户看到。例如,没有可使用已知的细分方法产生的镜面照明的闪烁。域通常从在一段距离处的完全未细分(其中法线图给出高度的幻影)逐渐增长到具有8000个基元的完全细分。用户很难看到任何变化,且在游戏设置中,根本没有什么被看到,且游戏者认为网在整个时间被细分。

示例细分方法(上面参考图6-16所述的)和位移因数的组合可在GPU管线1700例如图17所示的GPU管线中实现,其中缓冲器被示为具有虚线轮廓的框,且功能被示为具有实线轮廓的框。箭头展示在系统中的顶点/表面补片信息的流。在大虚线框1702之外的每个事物由用户定义,以及在大虚线框1702内部的每个事物从用户角度看是隐藏的。

用户输入顶点缓冲器1704和索引缓冲器1706(具有解释如何从索引构建补片/表面补片的拓扑)并定义顶点着色器1708和域着色器1710(例如,如在已知的系统中的)。

从用户角度看是隐藏的是可以都在硬件中实现的细分器1712和混合着色器1714。表面补片从输入索引缓冲器、拓扑和输出顶点缓冲器形成。细分器采用来自表面补片的角控制点的顶点细分因数(如由顶点着色器计算的)。它使用这些顶点细分因数细分在域空间中的域(由拓扑给出)。它输出具有位移因数的域空间坐标的完全列表,且每个新顶点在混合着色器中使用这些值连同表面补片和域着色器一起被构造。混合着色器输出附加到输出域缓冲器的每个新顶点。此外,细分器输出该输出索引缓冲器(三角形、顺时针或逆时针或线拓扑)以传递到光栅化阶段。

如上所述,顶点着色器1708对被输入到其内的当前顶点执行按顶点计算且不知道网拓扑。对于来自被输入的顶点缓冲器的每个顶点,顶点着色器将准确地输出一个顶点(不一定具有相同的形状)。在正常情况下,顶点着色器输入将包含成员例如本地位置、法线、切线和纹理坐标,且它的输出将通常包含自然位置、法线、切线和纹理坐标且必须包含将被传递到细分器1712的细分因数。首先,着色器将顶点转换到自然空间内并应用任何其它线性变换。然后它将例如根据它离摄像机的距离来计算按顶点细分因数。

在顶点着色器之后,将使用输出顶点缓冲器1716和输入索引缓冲器1706(连同其拓扑一起)形成表面补片。表面补片的顶点细分因数将被传递到细分器1712,且它将根据所给出的因数的数量(例如使用上面关于图6-16所述的方法)细分适当的域(“QUAD”、“TRI”或“ISOLINE”)。细分器将为每个新顶点产生域空间坐标和位移因数,并将它们传递到域着色器上。它也将产生确定将附加到输出索引缓冲器的每个基元(其必须偏移了输出域缓冲器的当前长度)的索引的列表。

域着色器1710从混合着色器1714被调用并采用域空间位置(u,v)作为输入。此外,域着色器采用所有表面补片信息作为输入并输出全顶点结构。域着色器使用表面补片控制点和域空间坐标来构建新顶点。对于正常细分,这将简单地是线性地内插补片的角顶点的值。可选地,贝塞尔表面可用于确定顶点的位置/法线,或可通过对纹理采样来使用位移映射。

混合着色器1714使用(也由细分器1712产生的)位移因数和上面参考图4和5所述的方法来“混合”由细分器1712产生的顶点。混合着色器1714使用域着色器1710,且域着色器1710告诉混合着色器1714顶点结构的每个成员应如何在域的内部中被计算。混合着色器1714在每一所产生的顶点被执行一次,并作为输入采用顶点的域空间位置u,v以及两个父域空间坐标(对于两个父顶点)和位移因数。此外,当前表面补片将被输入到混合着色器。混合着色器1714使用表面补片控制点和域空间坐标来构建顶点:子顶点和两个父顶点,且然后如上面参考图3-5(即通过在子顶点和两个父顶点的平均值之间内插)所述的计算输出顶点的每个成员。可选地,为了防止为了识别父顶点的重复计算,顶点可适当地被排序(例如使得具有DF<1的每个顶点跟随在缓冲器中的它的父顶点),且父顶点缓存在混合着色器1714内,使得它们的目标状态当子顶点被输入到混合着色器内时是可用的。然而,这将使用多得多的存储区。

在混合着色器1714对补片中的每个所产生的顶点运行之后,顶点被传递到光栅器连同输出索引缓冲器1718,其中每个基元将被处理。

虽然图17示出单个混合着色器1714,在一些实现中,可以有多于一个混合着色器,例如对于具有两个父顶点的所有顶点(即大部分顶点)有一个混合着色器而对于具有三个父顶点的那些顶点(即三角形补片的中间顶点,如在图7中所示的)有一个混合着色器。这两个混合着色器和一般混合着色器的差异是,它接收三个父域空间坐标(其在质量中心坐标中将是(0,0,1)、(1,0,0)和(0,1,0)),且内插是在这三个坐标中的每个的域着色器结果之间。内插参数在质量中心坐标中是(1/3,1/3)。

在位移因数是1的场合,混合着色器1714减小到域着色器1710,因为不需要内插,且实际上大部分顶点将具有df=1。通过在执行任何内插之前检查位移因数的值是否是1,计算时间可明显减小。如上所述,输入四边形补片的角顶点和中心顶点将具有固定的df=1。

图17所示的管线是高度并行的。顶点着色器1708不需要关于网的全局信息且只需要当前顶点。因此在输入顶点缓冲器604中的每个顶点可并行地被处理。类似地,一旦补片/表面-补片从输入索引缓冲器、拓扑1706和输出顶点缓冲器716形成,它就是完备的单元,且通过细分器1712和混合着色器1714的处理可独立地被完成。这明显减小执行时间。此外,每补片由细分器产生的每个顶点也可单独地通过混合着色器1714被输入,这提供另一级别的并行性。

示例细分方法本身是高度并行的(如上所述)。每个三角形补片可以被独立地细分,只要顶点的拷贝对每个线程被做出(以确保细分因数只被减小一次)。该方法从硬件中的物理空间方面来说也非常有效。在对三个域(硬件的三个小区域)中的每个设置(即上面所述的预处理步骤)之后,所产生的每个三角形补片或线被输入到硬件的同一(非常小的)块。如果这在没有并行结构的情况下实现,这将是在硬件上的总共五个小区域。

管线也不明显改变用户的接口,该管线如同已知的管线一样由实现顶点着色器1708和域着色器1710组成,且所以新管线1700可容易与现有的软件一起使用(只有对那个现有软件所需的最小变化,使得细分因数被分配到顶点着色器1708中的每个顶点)。此外,已知管线所需的一些着色器(例如Hull着色器)是不需要的,并可以被留下作为减少用户所需的努力的可选物。

如上所述,虽然以与顶点和域着色器相似的方式被提到,混合着色器1714不由用户实现,且替代地可在硬件中实现以提高性能。如上所述,细分器1712也可在硬件中实现。

上面所述的改进的细分方法可以可选地在软件(或软件和硬件的组合)中实现。图18示出可被实现为计算和/或电子设备的任何形式且可配置成实现上面所述的细分方法的示例性基于计算的设备1800的各种部件。

基于计算的设备1800包括一个或多个处理器1802,其可以是微处理器、控制器或用于处理计算机可执行指令以控制设备的操作以便执行上面描述的改进的细分方法的任何其它适当类型的处理器。在例如片上系统体系结构被使用的一些例子中,处理器1802可包括在硬件(而不是软件或固件)中实现改进的细分方法的一部分的一个或多个固定功能块(也被称为加速器)。可在基于计算的设备处提供包括操作系统1804的平台软件或任何其它适当的平台软件以使应用软件1806能够在设备上执行,且应用软件可包括细分模块1808和混合模块1810。

细分模块1808可例如包括预处理模块1812(其实现图6或13的块604)、递归细分模块1814(其实现图6或13的块606和/或608)和计算位移因数的位移因数模块1816(例如实现图3的块306)。细分模块1808可在各种例子中包括执行初始预处理的另一模块1818,其中初始预处理使用中心TF(其实现图13的块1302)。

混合模块1810使用位移因数(也由细分模块1808产生)和上面参考图4和5所述的方法“混合”由细分模块1808产生的顶点。

可使用由基于计算的设备1800可访问的任何计算机可读介质提供计算机可执行指令。计算机可读介质可包括例如计算机存储介质,例如存储器1810和通信介质。计算机存储介质(即非临时机器可读介质)例如存储器1810包括以任何方法或技术实现的用于存储信息例如计算机可读指令、数据结构、程序模块或其它数据的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其它存储技术、CD-ROM、数字通用盘(DVD)或其它光学储存器、盒式磁带、磁带、磁盘存储器或其它磁性存储设备或可用于存储由计算设备访问的信息的任何其它非传输介质。相反,通信介质可体现计算机可读指令、数据结构、程序模块或在已调制数据信号例如载波或其它传输机制中的其它数据。如在本文定义的,计算机存储介质不包括通信介质。虽然计算机存储介质(即非临时机器可读介质,例如存储器1810)被显示在基于计算的设备1800内,将认识到,储存器可远程地被分布或定位并经由网络或其它通信链路(例如使用通信接口1812)被访问。

基于计算的设备1800还可包括布置成向可与基于计算的设备1800分离或成一整体的显示设备显示信息的输入/输出控制器。显示信息可提供图形用户界面。输入/输出控制器也可布置成接收并处理来自一个或多个设备例如用户输入设备(例如鼠标或键盘)的输入。在实施方式中,显示设备也可充当用户输入设备,如果它是触敏显示设备的话。输入/输出控制器也可向除了显示设备以外的设备例如本地连接的打印设备输出数据。

术语“处理器”和“计算机”在本文用于指具有处理能力使得它可执行指令的任何设备或其部分。术语“处理器”可例如包括中央处理单元(CPU)、图形处理单元(GPU或VPU)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如通用GPU)、微处理器、设计成加速在CPU外部的任务等的任何处理单元。本领域中的技术人员将认识到,这样的处理能力合并到很多不同的设备内,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和很多其它设备。

本领域中的技术人员将认识到,用于存储程序指令的存储设备可分布在网络当中。例如,远程计算机可存储被描述为软件的过程的实例。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可按需要下载软件的片段或执行在本地终端处的一些软件指令和在远程计算机(或计算机网络)处的一些指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路例如DSP、可编程逻辑阵列等实现。

本文所述的方法可由配置有软件的计算机执行,软件是以存储在有形存储介质上的机器可读形式、例如以包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式或以包括适合于当程序在计算机上运行时执行本文所述的任何方法的所有步骤的计算机程序代码模块的计算机程序的形式,且其中计算机程序可体现在计算机可读存储介质上。有形(或非临时)存储介质的例子包括磁盘、拇指驱动器、存储卡等,且并不包括传播信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。

本文描述的硬件部件可由非临时计算机可读存储介质产生,非临时计算机可读存储介质具有在其上编码的计算机可读程序代码。

意图还包括“描述”或定义实现上面所述的模块、功能、部件或逻辑的硬件的配置的软件,例如HDL(硬件描述语言)软件,如对设计集成电路或对配置可编程芯片使用的,以实现期望功能。也就是说,可提供计算机可读存储介质,其具有存储在其上的用于产生配置成执行本文所述的任何方法的处理单元或用于产生包括本文所述的任何装置的处理单元的计算机可读程序代码。也就是说,计算机系统可配置成从电路元件的定义和用于定义组合那些电路元件的规则的数据产生数字电路的表示,其中非临时计算机可读存储介质可具有存储在其上的处理器可执行指令,其当在这样的计算机系统处被执行时使计算机系统产生如本文所述的处理单元。例如,非临时计算机可读存储介质可具有存储在其上的计算机可读指令,其当在用于产生集成电路的表现形式的计算机系统处被执行时使计算机系统产生如在本文的例子中所述的接收机的处理器的表现形式或产生配置成执行如在本文的例子中所述的方法的处理器的表现形式。处理器的表现形式可以是处理器本身或可用于产生处理器的处理器的表示(例如掩模)。

存储在实现所公开的方面时使用的机器可执行数据的存储器可以是非临时介质。非临时介质可以是易失性的或非易失性的。易失性非临时介质的例子包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的例子包括光学和磁性存储器技术、闪存、相变存储器、持久性RAM。

对“逻辑”的特定提及指执行一种或多种功能的结构。逻辑的例子包括布置成执行那些功能的电路。例如,这样的电路可包括晶体管和/或在制造过程中可用的其它硬件元件。作为例子,这样的晶体管和/或其它元件可用于形成实现和/或包含存储器例如寄存器、触发器或锁存器、逻辑运算器例如布尔运算、数学运算器例如加法器、乘法器或移位器和互连的电路或结构。这样的元件可作为定制电路或标准单元库、宏或在其它抽象级处被提供。可在特定的布置中使这样的元件互连。逻辑可包括固定功能的电路,且电路可被编程以执行一种或多种功能;这样的编程可从固件或软件更新或控制机制提供。被识别为执行一种功能的逻辑也可包括实现子过程的组成功能的逻辑。在例子中,硬件逻辑具有实现固定功能操作或多个操作、状态机或过程的电路。

本文给出的任何范围或设备值可扩展或改变而不失去所寻求的效应,如对技术人员将明显的。

将理解,上面描述的益处和优点可涉及一个实施方式或可涉及几个实施方式。实施方式不限于解决任何或所有所陈述的问题的那些实施方式或具有任何或全部所陈述的益处和优点的那些实施方式。

对“一个”项目的任何提及指那些项目中的一个或多个。术语“包括”在本文用于意指包括所标识的方法块或元件,但这样的块或元件并不包括排他列表,且装置可包含额外的块或元件,以及方法可包含额外的操作或元件。此外,块、元件和操作本身并不隐含地是封闭的。

本文描述的方法的步骤可在适当的场合以任何适当的顺序或同时被执行。在附图中的方框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或并行的多个步骤的执行。此外,单独的块可从任何方法删除而不偏离本文描述的主题的精神和范围。上面描述的任何例子的方面可与所描述的其它例子中的任一个的方面组合以形成另外的例子,而不失去所寻求的效应。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头示出在元件之间的通信(包括数据和控制消息)的仅仅一个示例流。在元件之间的流可以在任一方向上或在两个方向上。

将理解,优选实施方式的上述描述仅作为例子被给出,以及各种修改可由本领域中的技术人员做出。虽然上面以某个详细程度或参考一个或多个单独的实施方式描述了各种实施方式,本领域中的技术人员可对所公开的实施方式进行很多变更而不偏离本发明的精神或范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1