一种海量地形影像数据的快速漫游算法

马柳青,宋关福,郭会,周芹

( 1 中国科学院地理科学与资源研究所, 北京 100101; 2 中国科学院研究生院, 北京 100039; 3 北京超图地理信息技术公司, 北京 100085)

论文来源:地球信息科学学报

摘要:海量地形影像数据的快速浏览是 G IS、虚拟现实、数字地球等领域应用的关键技术与难点之一。计算机硬件技术的发展特别是 G PU技术的发展, 使得当前 LOD技术朝着硬件友好的方向发展; 海量影像数据的不断出现,使得 LOD 技术越来越多地考虑纹理数据的显示效果。本文结合 LOD 和计…

关键词: 海量数据; 硬件友好; 异步加载; LOD; skirt

1 引言

随着航空摄影测量与卫星遥感技术的发展,海量地形影像数据的三维浏览已经成为研究的热点。然而, 受计算机内存和操作系统管理能力的限制, 把所有的数据放入内存直接渲染显然是行不通的。LOD 技术根据一定的规则来简化物体的细节, 选择不同细节程度的物体表达方式, 是解决大规模地形影像数据快速渲染的有效手段。如离观察者近的选择较高的细节程度, 反之选择较低的细节程度。在地形渲染中, 也称为多分辨率地形(M uti-Resolution T errain)渲染技术。

LOD据其网格生成的方法和针对数据结构的不同, 可以分为规整网格 ( RSG, Regular Square Grid)的算法和不规则三角网的算法( T IN, T riangular Irregu lar Netw orks)两大类[ 1 - 2 ] 。T IN 的渲染算法以更少的三角形来描述地物, 但由于 T IN 的数据结构比较复杂, 并且每调整一次分辨率都要涉及到大量的三角剖分工作, 计算量较大。RSG 算法与 T IN 的算法相比有以下特点[ 3 ] : 更加紧缩的数据表示; 高效的数据访问; 快速的 LOD 三角剖分和渲染和更容易实现。

RSG 的算法大致上可以分为 P re-GPU 方法、 Post-GPU 方法两类[ 4] 。为了解决显卡没有足够的能力对大量的三角形进行矩阵变换和光影的计算, P re-GPU 利用 CPU 的计算能力逐个对三角形进行处理, 并逐个送到渲染管道中利用较弱的渲染硬件实现对大型数据的处理。P re-GPU 方法中有较著名的连续层次细节技术 CLOD ( C ontinuous Leve l of Deta ils) [ 5] , ROAM ( Real- tim e optim a lly adapting m e-shes) , 渐进格网[ 7] 等, 其中, ROAM 算法应用最为广泛。随着计算机硬件的发展, 特别是 GPU技术的发展, 渲染通道的吞吐量得到了极大地提高, 渲染更多的三角形所致效率的损失大大低于CPU 严格计算删除三角形带来的损失, 为了平衡GPU 和 CPU 的负载, 进一步提高渲染的效率, 出现了 Post-GPU 方法, 也称为硬件友好的方法(H ardw are- friendly m ethods)。Post-GPU 方法中, SOAR[ 8] 方法、Chunked-LOD[ 4] 方法都是常用的方法, 特别是 ChunkedLOD方法, 近年来越来越受到人们的关注。Chunked-LOD方法旨在尽可能地提高三角形的吞吐量而降低 CPU 的负载。渲染过程中, 层次细节不需要像其他 LOD算法那样精确, 属于离散层次细节, 视点的优化是针对某一数据块进行, 而不是像 CLOD中对每一个点进行处理。

伴随着 Post-GPU 方法成为 LOD技术的发展趋势, 纹理数据的展示也成为当前 LOD 技术研究的热点。以往 LOD 算法只重视地形数据的展示, 而对纹理数据没有足够的讨论, 很多试验针对大规模的地形数据展开, 而地形上匹配的纹理只是一张很小的没有真实地理意义的图片。随着遥感和摄影测量技术的发展, 海量影像数据不断出现,影像提供的信息丰富直观, 人们甚至更关注这部分信息, 而地形此时只起到辅助显示的作用。针对这种状况, 考虑纹理数据的 LOD 不断出现[ 4, 9- 10 ] , ChunkedLOD就是其中比较著名的算法,

它考虑了几何数据和纹理数据的 LOD, 提出了综合评价因子, 但在预处理中, 纹理数据与地形数据要求严格匹配, 而且其评价因子也比较复杂。本文在研究以往 LOD 技术, 特别是 ChunkedLOD算法的基础上, 遵循 Post-GPU 方法的思想, 以高效展示大规模影像数据为主要目的, 提出一种快速漫游海量地形影像数据的算法。

2 模型实现原理与方法

对于海量的影像和地形数据, 目前, 比较流行的方法是分块加载[ 11] 。所以, 本文首先根据影像、地形数据的地理范围和分辨率, 将它们按照四叉树的方式分层、分块, 构建金字塔。接着,系统开辟两个线程: 更新线程和渲染线程。采用异步加载的思路, 随着视点的移动, 更新线程由LOD算法计算出需要合并和分裂的四叉树节点进行数据更新, 并将结果提交给渲染线程渲染。通过合理的数据划分和数据调度策略, 使得内存中待渲染的数据只与视点位置和当前渲染细节层次有关, 而与整体数据量无关, 从而大大提高漫游速度。为了更加有效地展示纹理数据, 本文提出了用纹理分辨率来控制 LOD的方法, 给出了一种简单有效的评价因子。另外, 本文借鉴了 Chunked-LOD的裂缝处理方法, 通过添加 skirt来填充裂缝,节省了 CPU 的计算时间, 提高了显示效率。

更多内容请查看pdf