一种基于分形层次树的过程式地形快速绘制方法

文档序号:6556654阅读:226来源:国知局
专利名称:一种基于分形层次树的过程式地形快速绘制方法
技术领域
本发明涉及一般的地形数据处理或产生,尤其涉及一种基于分形层次树的过程式地形快速绘制方法。
背景技术
分形最早由法国数学家Mandelbrot提出,可参考[Mandelbrot1975],Mandelbrot,B.B.On the Geometry of Homogeneous Turbulence,with Stress on theFractal Dimension of Iso-Surfaces of Scalars.Journal of Fluid Mechanics.1975,72(2)401-416。这是一门以非规则几何形态为研究对象的几何学,具有无限以及统计自相似性的特点,它用递归算法使复杂的景物可用简单的规则来生成。因为自然界中普遍存在自相似的不规则现象,所以分形为研究者提供了一个很好地描述自然现象的数学模型。分维布朗运动(fractional Brownian motion,fBm)作为一种分形噪声,可以有效地表示地形、云彩、雪花等具有随机自相似性的自然景物。
fBm函数计算复杂度很高,因此需要对fBm进行简化,减少计算量。早在1982年,Fournier等人提出了一个迭代剖分算法来近似fBm,称作中点置换方法(Midpoint Displacement),可以生成具有自相似性的地形,可参考[Fournier1982],Alain Fournier,Don Fussell and Loren Carpenter.Computer Rendering ofStochastic Models.Communications of the ACM.1982,25(6)371-384。他们首先构造了基于线段的一维fBm模型,然后推广到二维的地形,从而生成山脉的分形细节。该方法把fBm的计算复杂度从O(nlog(n))降为线性,计算简单。但中点置换不是一个严格的fBm算法,统计特性不是稳态的,会降低生成地形的真实感。
Musgrave等人从fBm的频域角度进行分析,提出了带限噪声累积算法(Summing Band-Limited Noises),利用Perlin噪声作为基函数生成地形网格。该方法生成地形的统计特性是稳态的,因此生成质量比中点置换算法好,但计算复杂度为O(nlog(n)),比中点置换算法大,比较耗时。可参考[Musgrave1989]F.Kenton Musgrave,Craig E.Kolb and Robert S.Mace.The Synthesis and Renderingof Eroded Fractal Terrains.Computer Graphics.Jul.1989,23(3)41-50。
为了更精确地模拟自然界地形,Kaplan等人提出了扩展的自相似性(extended self-similar,ESS)概念,可参考[Kaplan1995]Lance M.Kaplan andC.-C.Jay Kuo.Texture Roughness Analysis and Synthesis via Extended Self-Similar(ESS)Model.IEEE Transactions on Pattern Analysis and Machine Intelligence.Nov.1995,17(11)1043-1056。并以此为基础,给出一个一般的fBm模型,称作渐进式分维布朗运动(asymptotic fBm,afBm),允许粗糙度因子随着采样间距变化而变化,从而生成地形的起伏程度也会随之变化。
以上介绍的方法都是研究如何离线式生成地形,并没有考虑地形绘制问题。过程式的地形绘制方法是把地形生成和绘制相结合,在绘制过程生成视点依赖的地形网格,实现地形的按需生成和绘制。Losasso和Hoppe把地形几何看作纹理,提出了Geometry Clipmap技术,把地形分成中空的矩形网格进行绘制,可参考[Losasso2004]Frank Losasso and Hugues Hoppe.Geometry ClipmapsTerrainRendering Using Nested Regular Grids.Proceedings of Siggraph 2004.2004,769-776.。他们也通过分形噪声生成地形的细节信息,但是对整个地形仅使用一组分形参数,因此生成的地形难以令人满意。

发明内容
针对现有技术的不足,本发明的目的在于提供一种基于分形层次树的过程式地形快速绘制方法,有效地逼近原始地形模型,可以快速绘制大规模的地形场景,并且数据量较小。
为实现上述的目的,本发明采用的技术方案如下1)建立地形的分形层次树结构给定一个地形模型,对地形进行四叉剖分,建立四叉树结构,每个结点对应一块地形区域,记录着分形信息,包含afBm信息与重要的高度值,这种分形层次树结构称作afBm-tree;2)根据阈值获取afBm子树在绘制前,根据用户设定的阈值,从afBm-tree中抽取出afBm子树,阈值表示原始地形和生成地形之间允许的差异。
3)根据误差精度估计结点的生成级数首先根据用户设定的随机概率值,确定分形盒的最小、最大高度值;然后计算累加高度值在屏幕上的投影误差;接着根据该投影误差,确定结点的生成级数;4)对绘制结点进行五队列的优化调度首先初始化五队列;然后在绘制的每一帧,调整五个队列中所有结点;接着分别对Qg和Qm中的结点交替进行处理,直到Qr中的结点达到所需要的绘制要求;5)通过GPU生成与绘制分形块首先通过GPU的象素着色器生成分形块,然后通过GPU的顶点着色器构造地形网格。
对绘制结点进行五队列的优化调度的方法可以是首先把afBm-tree的根结点送入Qr,并清空其余的队列;然后在绘制的每一帧,调整五队列中所有的结点;接着取出Qg中最高优先级的结点,并移入到Qr或Qp中,它的子结点按照同样方法进行处理;随后取出Qm中最低优先级的结点,并移入到Qr或qp中;对Qg和Qm中的结点交替进行处理,直到Qr中的结点达到所需要的绘制要求。
通过GPU生成与绘制分形块的方法可以是首先通过GPU的象素着色器生成分形块,并使用三张纹理,分别是上一级别的分形块纹理、掩码表和高斯噪声图纹理;然后通过GPU的顶点着色器构造地形网格,从分形块中取出顶点的高度值,并从连接模板中确定顶点的二维位置,组合成实际的三维空间点,最后构造出绘制地形网格并进行地形的绘制。
本发明与背景技术相比具有的有益效果是本发明通过记录原始地形的分形信息,构造出分形层次树结构,称作afBm-tree。afBm-tree是对地形的一种逼近表示,通过调整其生成阈值,可获得不同的生成精度与压缩率。通过afBm-tree,可在绘制时生成视点依赖的地形网格,从而跳过庞大的地形层次细节模型数据的创建过程。与传统的地形绘制算法相比,同样数据大小的afBm-tree覆盖的范围更广,可以有效降低多级调度的代价,在单CPU的机器上更有优势。此外,afBm-tree应用领域更广,允许用户进行编辑,就可以直接用于绘制。本发明可应用于地理信息仿真、虚拟场景漫游、游戏引擎等领域中。


下面结合附图和实施例对本发明作进一步说明。
图1是本发明方法的流程图;图2是分形层次树afBm-tree的构造过程;图3是根据误差精度估计结点的生成级数;图4是分形块的生成与绘制的流程图。
具体实施例方式
本发明提出的一种基于分形层次树的过程式地形快速绘制方法,包括建立地形的分形层次树结构、根据阈值获取afBm子树、根据误差精度估计结点的生成级数、对绘制结点进行五队列的优化调度和通过GPU生成与绘制分形块五个步骤。流程如图1所示首先根据原始的地形高程值,建立地形的分形层次树结构afBm-tree;然后根据阈值获取afBm子树;根据视点与误差精度估计结点的生成级数,并选择合适的afBm结点;接着对绘制结点进行五队列的优化调度;最后通过GPU生成与绘制分形块。
现具体介绍本方法的五个步骤1)建立地形的分形层次树结构为了表示地形不同位置的不同起伏状态,对整个地形建立afBm-tree结构,每个结点记录着一块地形区域的分形信息。设原始地形的大小为(2M+1)×(2M+1),对地形进行递归剖分,建立四叉树结。层次索引为0的根结点对应整个地形高程,层次索引为i的结点对应的地形区域大小为(2M-i+1)×(2M-i+1),最小的地形区域大小记为(2m+1)×(2m+1),其中1≤m<M。需要计算层次索引为i的四叉树结点,i取值范围i=0,1,...,M-m。
渐进式分维布朗运动(afBm),允许粗糙度因子随着采样间距变化而变化,从而生成地形的起伏程度也会随之变化。设函数Var(x)是一组随机数x的统计方差,σ2是一个常量。F(x,y)可以看成是在位置(x,y)处的地形高度值。与二维fBm模型类似,afBm模型的方差可写成Var[F(x+dx,y+dy)-F(x,y)]=σ2f(dt) (1)函数f(t)称作结构函数,当f(t)=|dt|2H时,式(1)为fBm模型的方差公式。afBm的结构函数表示为f(t)=(1-A)ρ|t|-1ρ-1+A|t|2H----(2)]]>这里0≤ρ<1,常量A是平滑因子。
每个afBm结点的基高度值用于控制生成地形的轮廓形状,包含四个对应地形区域边界上的角点高度值1,如图2中的实圈3所示,需要计算afBm的四个参数值2,分别是H,σ2,ρ和A,首先使用统计方法求出H和σ2。使用E(t)表示数学期望函数,根据afBm的分形统计属性,可得到logE([F(x+dx,y+dy)-F(x,y)]2)=logσ2+(2log|dt|)H (3)由此可得到点对{log|dt|,logE([F(x+dx,y+dy)-F(x,y)]2)},H和σ2可以通过线性回归算法得到,所对应的回归线如图2中4所示。获得这两个参数后,可以按照文献[Kaplan1995]Lance M.Kaplan and C.-C.Jay Kuo.Texture RoughnessAnalysis and Synthesis via Extended Self-Similar(ESS)Model.IEEE Transactionson Pattern Analysis and Machine Intelligence.Nov.1995,17(11)1043-1056的方法计算出系数ρ和A。
当按照自上而下的顺序处理完所有的地形区域后,就构建出了afBm-tree,如图2中的5。
σ2表示了生成地形和原始地形之间的统计差异,σ2越大,它们之间的差异越大,因此可以用σ2来控制生成地形的逼近精度。为了正确选择afBm结点,进一步把σ2调整为饱和模式。
σTi2=σTi2,i=M-mmax(σTi2,σTi+12),Ti+1⋐Ti,0≤i<M-m-----(4)]]>这里Ti+1Ti表示Ti+1是Ti的子结点。
2)根据阈值获取afBm子树在绘制前,首先根据用户设定的阈值Ω,从afBm-tree中抽取出afBm子树,阈值Ω表示原始地形和生成地形之间允许的差异。
对afBm-tree从上向下进行遍历,对每个结点T,如果它的统计方差σT2≤Ω,]]>则T满足生成精度的要求,否则对它的子结点进行递归访问。完成所有的遍历访问后,就构造出afBm子树。下面,将在绘制中使用afBm子树创建视点依赖的地形网格。
3)根据误差精度估计结点的生成级数如图3所示,为了控制生成地形块高度的范围,对结点T定义一个盒子,称作分形盒(为1),要求所有顶点的高度值均落在该盒子中。分形盒的二维投影等于T所对应的地形区域大小。分形盒与传统的包围盒很相似,不同的是,包围盒是衡量物体的空间横跨范围,大小保持不变,而分形盒是为了限制生成高度的范围,其大小可以受用户控制改变。设T的基高度值为F(xi,yj),(i,j=0,1),T的某一顶点记为(xp,yq),0≤p,q≤1,则根据afBm的概念,该位置的高度值为F(xp,yq)=F‾(xp,yq)+Σk=0kmaxΔk·Ngauss-----(5)]]>这里F(xp,yq)是基高度值的双线性插值,如果使用afBm模型,则从式(1),可得到Δk为Δk=σ2[f(2-k)-14f(2-k+1)]------(6)]]>Ngauss是均值为0,方差为1的高斯随机变量。由于高斯随机数主要分布在一定区域内,所以可以预先设定某一概率值a,确定高斯随机数的分布范围,从而估计出生成高度值的横跨范围。如图3所示,如果大部分高斯随机数落在阴影区域的概率值为a(图3(b)中的2),则可以通过下式得到它的分布范围[-G0,G0],见图2中的3与4。
P{|x|<G0}=a→P{x<G0}=(a+1)/2 (7)P表示一组随机数的概率值,x是高斯随机变量。例如,如果a等于95%,则大部分随机数都会落在区域为[-2,2]的范围内。得到G0后,就能够控制生成高度的范围,设分形盒的最小、最大高度值为F‾T±G0Σk=0kmaxΔk,]]>这里FT是T的基高度的均值。通过这个设定,所有生成的高度值都可以保证落在分形盒中。
接下来,需要确定结点T所要生成的分形块的级数。分形块的高度值是以递增式的方式创建,每增加一级的分形块,新创建的高度值增加ΔkNgauss。当给定概率值a时,增加值实际上小于ΔkG0,如图3(a)中的5,因此,把该值投影到屏幕上,并与预先设定的屏幕误差Escr进行比较,从而确定分形块的级数k。对于视点vp,如图3(a)中的6,设w和h是视域屏幕的宽度7和高度8,fov是用于绘制的摄像机广角,dv是T的地形区域中点和当前视点的距离9。投影误差PrjT可以通过下式计算prjT=max(w,h)2tan(fov/2)·ΔkG0dv<Escr-----(8)]]>如果当前视点位于分形盒内部,则将生成最大级的分形块,即kmax。如果在外部,则使用式(8)检测k级的分形块是否满足要求,如果不能符合式(8),那么同样地再检测(k+1),如果k+1>kmax,则需要访问T的子结点。
4)对绘制结点进行五队列的优化调度在绘制阶段,当视点以较小的间距移动时,存在帧与帧之间的连贯性,也就是说,两帧的绘制网格实际上变化不大。因此,在选择用于绘制的afBm结点时,不必每帧都自顶向下遍历afBm子树。把前一帧的结果作为本帧的初始值,进行调整得到当前帧的绘制结点,从而加速了结点的调度操作。
采用五队列的调度算法来管理afBm结点和生成分形块,这五个队列称作Qr,Qp,Qg,Qd和Qm。Qr记录用于绘制的afBm结点,Qp保存Qr中绘制结点的所有父结点。Qg中的结点将会生成更高级别的分形块,Qd中的结点将丢弃当前的分形块,转而使用更粗糙的分形块。把较小级别的分形块缓存在fBm结点中,因此不需要再次进行生成操作。Qm记录可以合并四个子结点的父结点。Qg和Qm需要按照优先级进行排序,其它三个队列则不需要排序。
在绘制的初始化阶段,把afBm-tree的根结点送入Qr,并清空其余的队列。在绘制的每一帧,首先利用前面介绍的误差估计公式(8),处理五个队列中所有结点,并调整到合适的队列中。然后取出Qg中最高优先级的结点T,通过式(8)决定将要生成分形块的级数k。如果k≤kmax,把T移入到队列Qr中;否则,将T分裂成四个子结点,同时把T移入到队列Qp。它的子结点按照同样方法进行处理。接着,取出Qm中最低优先级的结点T,并检测T的所有子结点是否都在队列Qr或者Qd中。如果是的,则执行合并子结点操作,过程为,移走T的所有子结点,并把T移到队列Qr。如果不是,那么对于在队列Qd中的子结点,降低它们当前正在使用的分形块级数,并转移到队列Qr,然后把T移到队列Qp中。对Qg和Qm中的结点交替进行处理,直到Qr中的结点达到所需要的绘制要求。
5)通过GPU生成与绘制分形块为了利用帧与帧的连贯性,根据每个绘制结点的生成级别,递增式地生成需要的分形块,并通过GPU加速这个过程。在生成新的分形块之前,需要把afBm参数和前一级的分形块保存在显存中供GPU使用。但是,如果分形块生成后再从显存中读回到主存,则传输代价会很高,甚至高于生成代价,反而会降低整体的性能。在最新的图形处理器中,允许在GPU中的顶点着色器(Vertex Shader,VS)访问纹理,因此可以把生成的分形块以纹理方式保存在显存中,然后在顶点着色器中读出数据进行操作,避免了传送到内存的代价。
如图4所示,使用两步法来生成和使用地形分形块通过GPU的象素着色器(Pixel Shader,PS)1生成分形块;通过顶点着色器2构造地形网格并绘制。具体描述如下在生成分形块阶段,共需要三张纹理来生成级数为(k+1)的分形块3,第一张纹理是第k级的分形块4,用于计算第(k+1)级的分形块的高度平均值。可以通过双线性插值计算均值,为了让图形处理器自动完成,只需要把OpenGL的纹理放大参数设置成GL_LINEAR即可。因为只需要对(k+1)级分形块中新的顶点生成高度值,已有顶点的高度值可以从k级的分形块中获得,所以第二张纹理是一张掩码表5。如果掩码表上某个象素值为1,则在目标分形块上相应位置处需要生成新的高度值;如果为0,则不需要生成新的高度值,只需要从第k级分形块取出相应值即可。第三张纹理是一张预处理的高斯噪声图6,用于计算分形噪声。在绘制前,根据预先定义的概率值a,计算出一个高斯随机值数组,并存储成二维纹理的形式。生成分形块时,使用地形网格顶点的坐标值在高斯噪声图中查找随机值。
基于afBm的生成方法可以在以下两种方法中选择中点置换算法(MidpointDisplacement,MD)和带限噪声累积算法(Summing Band-Limited Noises,SBLN)。MD算法要比SBLN快得多,但是生成的质量不如SBLN。在MD算法中,使用F+Δk·Ngauss计算新的高度值,这里是F相邻高度值的平均值,Δk与公式(6)定义一致。SBLN算法实际上是一种频谱合成,对一组噪声函数相加而得,这些噪声函数的频率依次增大,振幅依次减小。如果需要计算高度值的顶点为vx,y,那么可以通过F‾+σ2Σi=0Octavew-iHn(wivx,y)]]>计算得到,这里w是个常数,通常取为2。Octave也是一个常数,控制着相加的噪声函数的个数。n(t)是噪声基函数,这里使用基于高斯噪声的Perlin函数。
分形块生成之后,将和相应的连接模板7一起通过顶点着色器构造地形网格,并进行绘制8。在顶点着色器中从分形块中取出顶点的高度值,并从连接模板中确定顶点的二维位置,组合成实际的三维空间点,最后构造出绘制地形网格。
为了提高绘制质量,可采用两种纹理映射技术,一种是预处理的纹理四叉树技术,另一种是过程式纹理映射技术。纹理四叉树技术的基本思路是,给定一个很大的纹理,在预处理阶段,建立一个纹理四叉树结构,每个结点对应原始纹理的一块区域,所有四叉树结点使用相等分辨率的纹理块。把纹理四叉树组织成Out-of-Core的形式,在绘制阶段,将选择合适的纹理结点,并把数据从硬盘中调入主存,再送入显存用于纹理贴图。纹理四叉树技术的更多细节可参见[Cline 1998]David Cline and Parris K.Egbert.Interactive Display of Very LargeTextures.Proceedings of IEEE Visualization 1998.1998,343-350。
纹理映射的另一个方案是在绘制时过程式获得纹理信息,这一技术已广泛应用于虚拟绘制引擎中。首先,在预处理阶段创建一张地形的材质类型图,包含草地、砂石、雪地等类型。绘制地形时,把类型图和各种材质纹理通过多纹理映射方式,传输给GPU,计算出绘制时地形表面颜色。也可以预先计算好地形的光照和阴影图,作为纹理送入GPU,进行地形的明暗处理。
权利要求
1.一种基于分形层次树的过程式地形快速绘制方法,其特征在于包括以下五个步骤1)建立地形的分形层次树结构给定一个地形模型,对地形进行四叉剖分,建立四叉树结构,每个结点对应一块地形区域,记录着分形信息,包含afBm信息与重要的高度值,这种分形层次树结构称作afBm-tree;2)根据阈值获取afBm子树在绘制前,根据用户设定的阈值,从afBm-tree中抽取出afBm子树,阈值表示原始地形和生成地形之间允许的差异。3)根据误差精度估计结点的生成级数首先根据用户设定的随机概率值,确定分形盒的最小、最大高度值;然后计算累加高度值在屏幕上的投影误差;接着根据该投影误差,确定结点的生成级数;4)对绘制结点进行五队列的优化调度首先初始化五队列;然后在绘制的每一帧,调整五个队列中所有结点;接着分别对Qg和Qm中的结点交替进行处理,直到Qr中的结点达到所需要的绘制要求;5)通过GPU生成与绘制分形块首先通过GPU的象素着色器生成分形块,然后通过GPU的顶点着色器构造地形网格。
2.根据权利要求1所述的一种基于分形层次树的过程式地形快速绘制方法,其特征在于所述的对绘制结点进行五队列的优化调度方法可以是,首先把afBm-tree的根结点送入Qr,并清空其余的队列;然后在绘制的每一帧,调整五队列中所有的结点;接着取出Qg中最高优先级的结点,并移入到Qr或Qp中,它的子结点按照同样方法进行处理;随后取出Qm中最低优先级的结点,并移入到Qr或Qp中;对Qg和Qm中的结点交替进行处理,直到Qr中的结点达到所需要的绘制要求。
3.根据权利要求1所述的一种基于分形层次树的过程式地形快速绘制方法,其特征在于所述的通过GPU生成与绘制分形块的方法可以是,首先通过GPU的象素着色器生成分形块,并使用三张纹理,分别是上一级别的分形块纹理、掩码表和高斯噪声图纹理;然后通过GPU的顶点着色器构造地形网格,从分形块中取出顶点的高度值,并从连接模板中确定顶点的二维位置,组合成实际的三维空间点,最后构造出绘制地形网格并进行地形的绘制。
全文摘要
本发明公开了一种基于分形层次树的过程式地形快速绘制方法。该方法包括建立地形的分形层次树结构、根据阈值获取afBm子树、根据误差精度估计结点的生成级数、对绘制结点进行五队列的优化调度和通过GPU生成与绘制分形块五个步骤。通过记录地形的分形信息,构造出分形层次树结构afBm-tree。它是对原始地形的一种逼近表示,通过调整生成阈值,可获得不同的生成精度与压缩率。afBm-tree可在绘制时生成视点依赖的地形网格,跳过庞大的地形层次细节模型数据的创建过程。与传统算法相比,同样数据大小的afBm-tree覆盖范围更广,多级调度代价更低,在单CPU的机器上更有优势。本发明可应用于地理信息仿真、虚拟场景漫游、游戏引擎等领域中。
文档编号G06T15/20GK1932884SQ20061005360
公开日2007年3月21日 申请日期2006年9月26日 优先权日2006年9月26日
发明者华炜, 鲍虎军, 张淮声, 何治 申请人:杭州镭星科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1