APP下载

虚拟战场环境程序化地形细节生成方法

2013-10-08姚凡凡

装甲兵工程学院学报 2013年4期
关键词:程序化分形纹理

杜 君,梁 强,姚凡凡

(装甲兵工程学院装备指挥与管理系,北京100072)

虚拟战场环境中地形可视化的数据通常来自于真实地形采样的数据,以满足模拟训练和虚拟对抗对虚拟环境的逼真性要求。目前,基于场景图系统的虚拟战场环境,在足够硬件的支持下理论上可以处理全球规模的高分辨率地形数据,但是海量数据的存储、传输和预处理仍将给系统带来沉重的负担。此外,真实采样数据源分辨率固定,提供的细节程度有限,远不能满足视点近距离观察地表时对细节表现的要求。为此,在基于真实数据的地形可视化方法的基础上,引入实时程序合成的方法来增加表面细节、表现任意精细的地表特征是一种有效的方法[1-3]。

1 程序化地形细节生成原理

虚拟地形的构成要素主要有地形网格、地表纹理、植被、道路、水域以及诸如岩石、碎块等细小特征,如图1所示,虚拟地形的逼真度主要取决于这些要素的完备性和分辨率。目前,在真实地形数据采集方面,受获取手段和成本因素的制约,不论从类型还是精度,获取的地形数据都不能满足全要素高分辨率地形的可视化需求,突出表现在3个方面:1)DEM(Digital Elevation Model)数据分辨率固定,提供的细节程度有限,无法描述地形的局部细节特征;2)影像数据量巨大,大范围高分辨率的影像数据将给图形系统带来沉重的数据存储和处理负担,严重影响系统的实时性;3)数据描述能力有限,缺乏对一些具有随机散布特性的地表细小物体的描述。

图1 虚拟战场环境地形的构成要素

基于以上问题,采用真实地形数据与程序化地形细节生成相结合的方式是提高虚拟地形逼真度的主要手段。由于计算机的硬件处理能力还无法满足大规模复杂场景的实时渲染,因此在对地形细节进行生成时,需要控制细节合成的范围与计算的复杂度,以确保渲染的实时性。目前,多分辨率 LOD(Level Of Detail)算法被证明是解决大规模高精度虚拟地形实时可视化行之有效的方法,它充分利用了场景的复杂度与人眼的视觉感知规律之间的内在联系,动态自适应地调节地形不同区域、不同要素的细节表现程度,实现了渲染逼真性与实时性的均衡。程序化地形细节生成的实质是:在多分辨率LOD绘制框架下,通过程序化方法生成局部地形细节,并与真实数据构造的地形模型进行融合,实现视相关的地表细节可控生成,如图2所示。

图2 LOD地形渲染框架下程序化地形细节生成框架

由图2可知:在整个多分辨率LOD绘制过程中,程序化地形细节生成可分为地形几何细节生成、地形纹理动态合成以及细小地物散布3个部分,地形几何、地形纹理以及地表细小物体的配合就能表现更为逼真的地形细节。

2 基于fBm模型的几何细节实时生成

分形和基于物理侵蚀是计算生成几何细节常用的2种方法。相对于物理侵蚀的仿真方式,分形不仅能够表现自然界中具有不规则形状的物体模型,而且更易于实时实现,是虚拟战场环境中细节合成的主要方法。对于分形,目前还没有一个严格统一的数学定义,粗略地讲,分形是具有任意小尺度比例细节的,某种意义下自相似的图形或结构的总称[4]。分形的这种自相似性能够代表一种有规律的随机现象或过程,非常适合对自然界中存在的不规则景物进行状态描述。

2.1 分数布朗运动模型

分数布朗运动(fractional Brownian motion,fBm)最初是分形几何的创始人Mandelbrot基于高斯随机过程提出的[5],是布朗运动数学模型的拓展。在此基础上,Fournier等[6]提出了通过估计随机分布的期望和方差来近似获得任意布朗运动的随机中点位移法,进一步简化了fBm模型的程序化采样点解算。该方法的核心思想是在经典的精确图元基础上,通过叠加随机的分形扰动以生成分形图形。基于此,可将地形网格细节合成过程分为网格细分和细节扰动2个阶段,其中:前者用于增加新数据点,以扩充地形网格的分辨率;后者用于为新数据点计算细节扰动,以随机分形的方式增加表面的几何细节。

2.2 地形网格细分

地形网格细分是以真实的地形采样点为基础,通过局部细分来增加模型的顶点数目,为随机分形提供表面基础。在多分辨率LOD绘制框架下,对于规则的四叉树结构,地形网格应以二倍率的方式实现扩充。最简单的方法是:在运行期间,根据网格精度的需要,动态地对层次细分数据结构的局部叶节点进行逐次扩充,并通过线性插值获得新增网格的高程值,直到达到所需的网格精度。对于规则的网格,只要相邻网格的分辨率之差大于1,就会造成网格间T连接的问题。相邻网格分辨率之差越大,T连接点就越多。为了消除相邻网格间的T连接,需要建立一个从高分辨率到低分辨率的过渡区域,如图3中的灰色区域,它是用于将低分辨率网格与高分辨率网格进行匹配的特殊网格,可用的构建方法通常有2种:1)对过渡区内所有的顶点进行局部重新构网,生成的网格通常是不规则的;2)采用限制四叉树的方式将较高的分辨率向过渡区进行扩展。

图3 不同分辨率网格之间的过渡区域构建方法

在多分辨率LOD绘制框架下,网格细分过程是由视相关精化判断准则控制的,网格的细分需要满足渐进性和可逆性,方法1)显然不满足上述要求,因而不适用于几何细节的实时生成。

2.3 细节扰动计算

在网格细分扩充地形分辨率的基础上,采用程序化的方法为新增的数据点计算随机扰动,以生成几何细节。基于高斯随机分布的扰动量生成是分形计算中广泛采取的一种方法,其计算的扰动量可视为包含不自然的高频分量的高斯白噪声。而Perlin噪声是一种高频受限的自然噪声生成方法,可视为一种平滑的伪随机数生成器,能够根据指定的输入产生较为自然的一致性较好的随机量。

将不同频率的经典噪声函数迭代叠加,可构成具有分形几何特征的分形 Perlin噪声函数。设Noise()为经典Perlin噪声函数,则

式中:p为指定的采样点;k0为起始噪声函数的频率;N为分形迭代的次数,反映细节的精细程度。图4(b)中的二维分形面即由图4(a)中的6个频率依次提高、振幅依次递减的Perlin噪声面叠加合成。不同频率、振幅的Perlin噪声面组合将导致生成不同类型的分形面,因而基于Perlin分形面的细节扰动计算可以模拟不同地貌、细分等级的几何细节,使合成的细节在整体上与自然的分形特征保持一致。

2.4 分形细节与视相关LOD的集成

针对多分辨率LOD算法的自适应特性,细节合成与视相关LOD算法框架的集成,可采用动静结合的双层自适应层次结构来实现,其基本思路是将原始高程数据集构成的层次地形块作为静态节点常驻内存。当视点位置更新时,以视相关精化判断准则为依据对静态节点进行判断,当其网格分辨率无法满足细节表现要求时,递归执行网格细分和细节扰动计算,实时扩展四叉树层次结构。这些新生成的节点作为动态节点以缓存机制进行管理,与原始静态节点层次共同构成地形的网格数据层次结构。

图4 二维Perlin分形面合成

在构建双层自适应层次结构中,关键的问题是确定细节合成的判断准则,同时,为了控制场景的复杂度,这一准则也需要与地形的LOD控制策略相兼容。在多分辨率LOD算法中,一般将地形网格的空间误差作为判断依据,但对于合成的地形,其空间误差必然与生成细节时的扰动计算相关,而扰动是随机的,因此,较为精确地计算动态地形块的误差是相当困难的。考虑到细节扰动的随机特性,动态地形块的误差值可由估计的方式获得,具体的方法根据具体的应用进行灵活设置。

3 基于样本的实时纹理合成

纹理模型是真实感场景不可或缺的一个组成部分。对于大规模的地形场景,纹理数据量通常是网格模型的数10倍。鉴于庞大的纹理数据管理比较困难,同时多分辨率纹理间的拼接很难在算法效率和拼接效果上达到很好的平衡,近年来很多学者提出了地形纹理合成技术[7-9],其中,多样本纹理合成技术由于其简单高效,且能够依据地表特征分布实时生成地形纹理,因而得到了广泛的应用。

3.1 基于样本的纹理合成基本原理

纹理投射技术是实现基于样本的纹理合成的关键技术,其可以简单地理解为:在渲染过程中将多个不同纹理的颜色依次混合,最终渲染到同一物体表面的技术。该技术可以充分发挥当前图形卡的多纹理渲染能力,其过程如图5所示。

图5 纹理投射过程

各样本纹理是按次序逐层混合的,并且都是独立进行的,纹理颜色的混合过程可表示为

式中:Pn为第n层纹理的像素值;P0为默认的样本纹理,一般表示地形表面分布最广的纹理成分;n为第An层样本纹理像素的透明度,当An=1时,样本纹理的像素被完全映射到平面上,而当An=0时,纹理像素将被完全过滤。

为简单起见,可定义若干个Alpha图作为样本纹理的蒙版,用Alpha图的4个通道(R,G,B,A)分别表示4种样本纹理的显示透明度,通过在[0,255]之间设置不同的混合比例,可以实现样本纹理之间的平滑过渡。对一定区域的地形而言,纹理的构成成分通常是有限的几种,如草地、泥土、沙石、岩石等,通过其分布绘制Alpha图,然后与采用的纹理样本进行匹配,由下而上逐层进行叠加投射,即可得到最终的细节纹理图。

3.2 纹理实时合成策略

在视相关多分辨率LOD地形渲染中,细节纹理的合成也需要依据观察距离和方向合成多级的、不同精度的细节纹理,确保与几何细节层次的一致性,同时减少系统资源的消耗。在整个绘制流水线中,基于样本的纹理合成处于光栅化阶段,可从几何阶段获取当前像素映射的顶点位置和法线方向,可采用基于放射状和椭圆采样的方法实时合成纹理细节,归纳起来,主要包括2个合成策略:1)限定局部区域进行合成;2)基于LOD的稀疏点集采样合成。

3.3 基于GPU编程的纹理动态合成

基于样本的纹理合成计算非常适合在GPU(Graphic Processing Unit)中进行实现,它既可以通过传统的固定渲染方式来实现,也可以运用可编程渲染管线技术来实现,相比而言,后者更为灵活,效果更好。下面是利用高级着色语言(High Level Shader Language,HLSL)在顶点着色器和像素着色体中进行多样本纹理合成及局部光照计算的程序实现。

1)VertexShader。根据顶点与视点的距离计算原始地形纹理与合成地形纹理的融合因子;根据光照信息计算纹理的明暗度。

2)PixelShader。根据Alpha图对所有的样本纹理进行像素颜色值的叠加计算,根据顶点着色器输出的融合因子,将合成的纹理与底图纹理进行融合计算,输出最终的颜色值。

如图6所示,程序中共使用了5幅样本纹理、1幅底图纹理和1幅Alpha通道图,其中底图纹理根据观察距离与样本纹理进行动态融合,以消除样本纹理重复采用产生的重复感。

图6 基于GPU编程的纹理动态合成

基于样本的纹理合成是一个功能强大的、灵活的纹理合成技术,它在底图纹理和样本纹理之间创建了光滑的融合,避免了细节的重复感,主要不足之处在于过多像素填充会产生较大运算消耗,但是随着显卡功能及PS(Pixel Shader)支持的急剧提升,在当前及以后的图形显卡中,这样的运算只是一个微不足道的问题[10]。

4 植被程序化生成

在虚拟战场环境中,除了准确描述地理信息外,对地形表面的植被模拟也是必不可少的,其逼真程度将直接影响战场的沉浸感。而自然界中植被的种类和数量都是十分庞大的,再加上实时光影和动态模拟等计算,使得现有的硬件远不能满足大尺度植被的真实感绘制。在虚拟战场环境中,植被模拟并不需要对个体的描述与真实地形环境相一致,而只需要在种类、分布和季节形态上相匹配,因而更适宜采用动态的程序化生成方式进行模拟。

4.1 植被的描述和表达

自然界中的植被主要分为乔木、灌木和草体3种类型,其形体依次减小,数量依次增多,分布形态主要有单株、群落和多群落3种,因此,很难采用形式化的语言对其进行全面描述,通常采用简化的方法定义其关键的特性,如分布区域、分布密度、刚度系数、外观颜色以及模型的表达等,其中模型的表达是植被动态模拟的基础,过于简单的表达影响场景的真实感,而过于复杂的表达又会造成系统的实时性降低。为了解决这一问题,植被的表达通常采用多层次表达,主要分为以下3种类型。

1)多边形表达。按照植被的形态将其划分为若干节,建立多边形模型,分节数决定模型的精细程度。利用纹理映射机制将枝、干、叶的纹理分别映射到相应的多边形上,实现对植被外观细节的表现。

2)广告牌表达。采用2个四边形映射植被整体纹理后,代替其多边形模型,其中一个垂直于水平面,用于平视,另一个平行于水平面,用于俯视,大小与植被包围体在该方向上的投影一致。该方法不仅有效减少了多边形数目,而且通过一定的纹理动画和顶点变形,也能够实现植被的简单动态模拟。

3)2D纹理表达。采用凹凸贴图的方式来描述视点远处细节特征难以辨析、动态效果难以察觉,只能表现出颜色特征的以群落形式分布的草体。

在虚拟场景中,植被的表达方式会随着视点的移动而逐级切换,为了避免切换时出现视觉突变,需要制定LOD的切换策略,通常采用在相邻层次间设置过渡区域,通过权值函数控制不同表达方法在过渡区域中所占的比重和顶点透明度的方式来解决。

4.2 植被的动态分布

植被的分布实质上是在地形模型的表面上依据一定的规则对植被模型进行动态生成和删除的过程,其核心问题主要有以下2个方面。

1)可控性。包括分布可控和数量可控,确保只在视点观察的一定范围之内的、固定的植被分布区域生成相应的植被,且能够随着视点的移动平滑地动态更新植被分布,使场景内植被的总数保持在一定的范围之内。

2)随机性。包括属性随机性和分布随机性,通过引入随机变量使植被的大小、方向、颜色和位置分布上具有一定的随机性,实现植被在形态和分布上的不规则性。

植被程序化生成的数量可控性主要通过多分辨率LOD层次结构来实现。当地形网格分辨率由粗到细达到一定的阈值时,动态生成植被,并建立其与地形层次结构相对应的层次结构;当地形网格由细变粗超过阈值时,删除对应层次结构中的植被。由于植被的加载和删除是以一定分辨率的地形块为单位进行的,如图7中阴影部分所示,为了避免出现以块为单位的植被整体出现和消失带来的“跳跃”感,需要在边界块内进行单个植被的可见性判断。同时,植被的分布可控性可以通过地形纹理的Alpha图中的分层信息实现,对于场景中所有的植被,建立其与纹理层次的对应关系,在植被程序化生成过程中,除了满足网格分辨率外,还需要保持与细节纹理分布的一致性。岩石等地表上随机分布的细小物体也可以采用与植被相同的方法进行程序化生成,最终的地形细节合成效果如图8所示。

5 结论

在基于真实数据的多分辨率LOD地形可视化框架中引入实时程序化地形细节合成的方法,一方面,减弱了真实地形场景渲染对高精度地形数据的依赖性,另一方面,充分利用了多分辨率LOD算法在场景细节与复杂度均衡方面的优势,实现了地形几何细节、纹理细节和植被的实时、可控生成,在增强地形场景的丰富程度和真实性的同时,合理控制了地形场景的复杂度,对虚拟战场环境的生成和应用具有很强的指导意义。

[1] Boubekeur T,Schlick C.A Flexible Kernel for Adaptive Mesh Refinementon GPU[J].Computer Graphics Forum,2008,27(1):102-113.

[2] Dachsbacher C,Stamminger M.Rendering Procedural Terrain by Geometry Image Warping[EB/OL].[2012-11-20].http://www.docin.com/P-438257091.html

[3] Losasso F,Hoppe H.GPU Gems 2:Terrain Rendering Using GPU-based Geometry Clipmaps[M].New Jersey:Addison-wesley,2005:27-47.

[4] 张燕燕.飞行模拟器大规模真实地形实时可视化技术的研究与实现[D].哈尔滨:哈尔滨工业大学,2010.

[5] Mandelbrot B B,Van Ness J W.Fractional Brownian Motions,Fractional Noises and Applications[J].SIAM Review,1968,10(4):422-437.

[6] Fournier A,Fussell D,Carpenter L.Computer Rendering of Stochastic Models[J].Communications of the ACM,1982,25(6):371-384.

[7] Dollner J,Baumann K,Hinrichs K.Texturing Techniques for Terrain Visualization[C]∥Proceedings of the Conference on Visualization’00.Washington DC:IEEE Computer Society Press,2000:227-234.

[8] Bloom C.Terrain Texture Compositing by Blending in the Framebuffer[EB/OL].(2000-11-02)[2012-12-15].http://www.cbloom.com/3d/techdocs/splatting.txt

[9] Hardy A.Blend Maps:Enhanced Terrain Texturing[C]∥Bishop J,Kourie D.Proceedings of the 2006 Annual Research Conference of the South African Institute of Computer Scientists and Information Technologists on IT Research in Developing Countries.Republic of South Africa:South African Institute for Computer Scientists and Information Technologists,2006:61-70.

[10] 韩元利.基于GPU编程的虚拟自然环境技术研究[D].武汉:武汉大学,2007.

猜你喜欢

程序化分形纹理
程序化镇静镇痛护理干预对颅脑损伤术后护理的临床效果
柞蚕茧系统分形研究
程序化操作在调度运行中的应用
基于Houdini的VEX程序化建模高效搭建数字孪生虚拟工厂
感受分形
基于BM3D的复杂纹理区域图像去噪
分形之美
使用纹理叠加添加艺术画特效
分形空间上广义凸函数的新Simpson型不等式及应用
TEXTURE ON TEXTURE质地上的纹理