三维可视化技术在地震数据建模和分析过程中具有重要作用,能够有效降低油气勘探的风险和不确定性[1]。随着地震勘探技术的不断成熟,地震数据采集的速度与精度越来越高,地震体模型的数据量也提高到百GB甚至TB级别。而在地震采集设计等领域,考虑到作业现场使用的便携性,目前使用的硬件设备仍基于普通计算平台,内存一般只有几个GB,显存也只有1 GB到2 GB,直接存储和处理如此大规模的体数据,将变得非常缓慢,以至于不能接受[2]。因此许多国内外学者和技术人员针对海量体数据模型的三维可视化进行了相关研究[3-5]。
为了解决在普通计算平台上进行大规模地震体可视化的问题,通常采用八叉树结构对原始地震体数据进行重新组织。空间中的体数据经过三个维度的递归抽稀,依次将数据按照空间划分成八个部分,最终形成基于多分辨率空间排列的体块结构。在绘制过程中,根据缓存容量通过遍历八叉树选取合适分辨率的体块进行加载和绘制。
基于三维纹理的体绘制技术早在1989年就被Cullip等[6]提出。在该方法中,充分利用了图形处理器(Graphic Processing Unit, GPU)的并行计算能力和浮点运算能力,相对光线投射算法在复杂度和绘制效率上都有很大的提高。
Lamar等[7]则在此基础上通过在八叉树中创建分层细节(Level Of Detail, LOD)的体块,实现了基于八叉树的多分辨率体绘制技术。通过在八叉树中对体块的快速索引,可实现对体数据的不同层次分辨率显示,以及细化切片时体块数据的快速查找。使用LOD和多分辨率技术来对三维地震体进行管理,根据一定的体块选取策略选择合适的体块组成体块列表进行绘制,能够显著提高地震体的显示效率[8-11]。
随后Lamar等[7]又引入了基于视点的动态多分辨率切片显示技术,该方法根据视点的位置,确定切片哪些部分分辨率更高,哪些分辨率可以更低。这个方法假设人们对离视点越近的点越感兴趣,也就赋予该点周围更高的分辨率,离该点的位置越远则切片分辨率越低。
针对大规模体数据的缓存调度问题,文献[2]根据数据流向,分别设计了从外存到内存和从内存到显存的调度策略,并在使用多分辨率技术筛选所需体块时,通过限制一次性载入显存的体块数量来提高交互的流畅性。
文献[12]为实现大规模体数据在普通计算平台上的可视化,提出了半适应的分块方法,得到不同尺寸的数据分块,并对某些空数据块进行剔除,提高了体绘制效率,但仍然难以进行实时交互。
在上述研究中,体块的缓存与调度通常采用基于时间相关联的最近最少使用(Least Recently Used, LRU)算法,但是,在多切片应用场景下,切片交互操作的随机性较大,对时间的关联性较弱,使得缓存中体块的命中率较低。另外,仅采用视点与地震体的空间位置关系进行体块分辨率选择以确定生成最终图像的体块工作集,在该过程中没有考虑到体块数据所蕴含的信息量对可视化效果的影响,使得最终的绘制质量不高。
针对上述问题,本文面向普通计算平台,设计了基于距离度量的从外存到内存再到显存的数据缓存与调度策略,将候选体块与切片的空间距离作为计算置换优先级的重要因素,有效提高大规模地震体切片交互绘制时的体块命中率;为进一步平衡大规模地震体可视化在交互效率与显示质量间的矛盾,提出了面向两阶段的切片实时交互与渐进绘制策略,并通过计算体块的信息熵优化体块的细化等级,在保证交互实时性的同时提高最终图像绘制质量。
1 基于距离度量的体块缓存调度策略由于内存和显存空间的限制,绘制时体块数据不能全部载入,为了有效利用有限的存储空间,需要解决外存、内存和显存之间频繁数据交换导致的绘制效率较低的问题。
1.1 从外存到内存的体块缓存调度体绘制中常用基于时间度量的缓存数据置换算法,如LRU算法,即当缓存区全部被使用时,新加载体块将最久未被使用的体块置换出内存。
当场景中只有一个切片时,由于切片交互的连续性,最久未使用的体块距离切片也最远。如图 1所示,当拖动切片从位置A到位置B时,越久未使用的体块(如图中区域一所示),距离B越远,被再次访问的概率也越低(由于访问区域一的体块必须经过AB中间的区域二,访问区域二概率高于区域一),因此将距离切片最远的区域一中的体块作为无用块置出。
然而在多切片应用场景下,由于切片选择和移动方向的不确定性,基于访问时间的LRU算法可能导致缓存的命中率降低。如图 2所示,开始时A、B两个切片分别在虚线A1,B1处,之后先把A切片从A1移动到A2,再将B切片从B1移动到B2。此时内存占用如图 3(a)所示。当B切片继续从B2移动到B3时,根据LRU策略,最久未使用的为A1,此时A1将被置出,缓存区如图 3(b)所示。此后,当用户向上移动切片A时,将再次使用到A1,然而此时A1已经被置换出缓存区。
如果按照体块到切片的距离进行体块的调度,距离切片最远的B1将优先被置出缓存区,缓存区如图 3(c)所示。此时,若用户移动切片A到A1位置时,依旧可以命中缓存。
根据上述对数据调度过程的分析,提出基于距离度量的体块内外存调度策略——最大距离先出(Maximum Distance First Out, MDFO),MDFO策略的计算模型如下所示:
$ {P_{{\rm{mdfo}}}} = {k_{\rm{d}}} \times \min \{ s \times {d_{{\rm{stand}}}}, m \times {d_{{\rm{mov}}}}\} + {k_{{\rm{l}}}} \times L + {k_{\rm{t}}} \times T $ | (1) |
在每次进行切片交互时,使用式(1) 计算缓存中各个体块的置出优先级。其中,dstand和dmov分别为当前体块中心到静止切片和移动切片的距离,s、m分别为静止距离系数与移动距离系数,距离切片越远则再次被用到的几率越小。在切片交互过程中,考虑到交互操作的连续性,静止切片附近的体块应该被优先置出,通过实验测试,本文设置s=1.5,m=1.0;L为体块的分辨率级别,L值越大体块的分辨率越高,体块的空间跨度越小,使用的概率也越小;T为体块最近一次被用到的时间到当前帧的时间,T值越大则说明最近一次使用该体块的时间点越久,再次被用到的概率也越小。Kd、Kl、Kt分别为距离、分辨率级别、时间跨度的系数,根据切片到体块的距离和体块的分辨率级别以及时间跨度对体块置出优先级的贡献度不同,经过实验测试,设置参数Kd=5,Kl=10,Kt=1。Pmdfo为体块调出缓存的优先级度量,Pmdfo值越大,则体块越被优先置出缓存区。
1.2 GPU纹理对象的缓存调度策略在体绘制过程中,需要将体块列表中对应体块的纹理数据加载到显存中生成对应的纹理对象。在普通计算平台上,显存资源更为稀缺,其能够存储的纹理对象数量更为有限,因此也需要更加精细的管理和调度。有效利用显存空间来缓存纹理对象,同时使用合理的缓存调度策略,可以有效地减少从内存到显存的数据加载次数,提高绘制效率。
根据以上对多切片交互的讨论,本文设计了一种基于距离度量的GPU纹理对象缓存与调度策略。如图 4所示,将显存空间划分为三个区域:StableArea、ActiveArea和UnusedArea。StableArea存放连续几帧被使用的纹理对象,该区域较为稳定,可以减少常用纹理对象换入换出的次数;ActiveArea存放当前帧刚加载的纹理对象;ActiveArea中在当前帧未被使用到的纹理对象被移动到UnusedArea。
切片绘制根据体块选取阶段产生的体块列表进行三维纹理的生成与加载。在加载纹理时,首先扫描显存的三个缓存区,判断体块纹理是否命中。如果所需的纹理对象在UnusedArea区域命中,则将该纹理对象从UnusedArea移动到ActiveArea;如果在ActiveArea命中,则计算该纹理对象在最近几帧中命中的次数,若命中次数达到阈值N则将该纹理对象从ActiveArea移动到StableArea,否则依然存放在ActiveArea中,并更新命中次数;如果在StableArea区域命中,则更改该纹理对象的优先级Pgpu;如果没有命中任何区域,则将纹理从内存加载到ActiveArea。
当某个区域的存储空间被占满,又有新的纹理对象加载时需要一个合理调度策略进行置换。本文通过计算纹理对象的置出优先级来进行纹理对象的调度,优先级高的则被优先置出。优先级Pgpu的计算模型如下:
$ {P_{{\rm{gpu}}}} = {k_{\rm{d}}} \times \min \{ s \times {d_{{\rm{stand}}}}, m \times {d_{{\rm{mov}}}}\} + {k_{\rm{l}}} \times L $ | (2) |
上述计算模型(2) 考虑了纹理对象所对应体块与切片的空间位置关系以及其自身分辨率对缓存和调度策略的影响。其中,Kd和Kl分别为空间位置关系与分辨率级别的影响因子,dstand和dmov分别为当前纹理对象所对应体块到静止切片和移动切片的距离,s、m分别为静止距离系数与移动距离系数。通过与1.1节类似的参数实验,设置Kd=1,Kl=2,s=1.5,m=1。由于纹理对象优先级的比较分别在StableArea、ActiveArea和UnusedArea内部进行比较,同一区域内部的纹理对象被访问时间大致相同,因此,没有将时间因素纳入纹理对象的优先级计算模型。
当上述某个分区空间被占满并且有新的纹理对象加入该区域时,则选取该区域中Pgpu值最大的纹理对象置出。如图 4所示,从StableAre区域置出的纹理对象被放入ActiveArea,从ActiveArea置出的纹理对象被移动到UnusedArea,而从UnusedArea置出的纹理对象将被从显存中移除。
2 两阶段切片实时交互与渐进绘制在大规模地震体可视化中,始终存在绘制效率与显示质量的矛盾,该矛盾在计算资源有限的普通计算平台上尤为突出。为了平衡绘制效率与显示质量之间的矛盾,本文设计了面向两阶段的切片实时交互与渐进绘制策略,并且针对渐进细化阶段应用信息熵对体块的细化过程进行优化,有效地提高了绘制质量。
2.1 两阶段绘制策略面向两阶段的切片实时交互与渐进绘制策略将切片的交互绘制分为两个阶段——交互阶段与渐进细化阶段,处理流程如图 5所示。首先,在交互阶段为了满足交互的实时性,适应性地预留部分内存作为常驻内存来使用:即根据系统内存大小,分配一定比例空间来存放整个体数据相应层次的体块数据(例如用系统20%的内存来存放第3级分辨率的数据块)。当切片移动时,使用该层次体块数据进行切片的绘制与显示,从而可以减少输入/输出(Input/Output, I/O)操作带来的消耗,保证交互的流畅性。
其次,为了得到更高的绘制质量,在切片交互停止之后,启动渐进细化线程,根据切片绘制所使用的体块与视点的空间位置关系,逐渐完成切片的细化,得到更高分辨率的图像。如图 6所示,根据体块与视点的距离,优先细化距离视点更近的区域,图中区域一为细化完成部分,区域二正在细化的区域,区域三为待细化的区域。如果在切片渐进细化过程中,再次进行切片交互操作,则立即暂停细化线程,响应用户的交互操作,使用常驻内存的较低分辨率的体块进行绘制。
上述两个绘制阶段侧重点有所不同。交互阶段注重提高绘制效率保证实时交互,渐进绘制阶段则着重于绘制更高分辨率图像以提高显示效果。该策略可以有效地平衡交互效率与绘制质量之间的矛盾,使得在普通计算平台上可以更高效地进行大规模地震体交互操作并得到较高的绘制质量。
2.2 基于信息熵的体块细化尽管地震体的八叉树结构中包含大量体块,但从应用角度看它们的“价值”是不同的,其中某些是“低价值”体块,例如体块数据中地质属性值单一的体块。如图 7所示,在地层1与地层5中被虚线框包围的体块即为“低价值”体块。这些体块所蕴含的信息量较少,对其进行细化会占用大量的存储空间并且对最终的可视化效果提升不明显。而用户会更多地关注位于地层交界区域蕴含信息较多的体块。
信息论中用“信息熵”来描述一个系统所蕴含的信息量。“信息熵”越大,系统所包含的信息量也越大。用户对含有信息量较大即“信息熵”较大的体块更“感兴趣”。梁荣华等[13]在基于统一划分的分块策略中,采用香农熵进行自适应分块的多分辨率选择,得到了较好的绘制质量。本文运用信息熵对八叉树体块的细化过程进行优化,面向应用降低“低价值”体块的细化级别,可以减少系统资源的占用,使含有较多信息的用户感兴趣区域能够得到更充分细化,从而获得更高的绘制质量。“信息熵”的计算模型为:
$ H = - \sum\limits_{i = 1}^n {p({x_i}){\rm{lb}}(p({x_i}))} $ | (3) |
上述计算模型(3) 中,p(xi)为属性值xi在系统中出现的概率。在地震体数据的预处理阶段,统计体块中每个体素的属性值xi出现的概率p(xi),再对p(xi)进行对数运算,最后进行加权平均计算得到体块信息熵的值H,并将体块的信息熵保存下来。
在体块细化过程中,根据设置的信息熵下限阈值(如Hmin=0.1),进行以下处理:
1) 首先根据体块与视点的空间位置关系判断该体块是否需要进行细化;
2) 如果该体块需要进行细化,则从外存中读取该体块信息熵的值H,并与阈值Hmin进行比较;
3) 若H > Hmin则对该体块进行细化;
4) 否则,认为该体块所蕴含的信息量过少,不对其进行细化。
基于信息熵的体块细化调优可以有重点地对用户感兴趣区域进行细化,在内存资源有限的普通计算平台上得到更高的绘制质量。如图 8所示,优化后与优化前相比,在地层交界处有更高的分辨率,有效提高了切片的显示质量。
本文针对数据量为500 MB、4 GB、38 GB的sgy数据进行预处理,得到数据量分别为771 MB、5.26 GB、46.3 GB的八叉树结构文件,在此基础上作为测试数据进行实验与分析。实验所用计算机为普通便携式PC,配置如下:CPU为Intel Core i5-2410 M(双核四线程),主频为2.3 GHz,4 GB内存,NVIDIA GeForce GT520M独立显卡(1GB显存),750 GB硬盘(7 200 转/min)。
在三切片交互显示场景下,除应用LRU算法外,还使用最不经常使用(Least Frequently Used, LFU)算法和先进先出(First In First Out, FIFO)算法这两种基于时间度量的调度算法与本文算法作对比测试,如图 9所示为不同数据规模下4种算法对体块平均命中率的影响。实验中缓冲区大小设置为400块(每块的大小为64×64×64),在三个方向上的切片交互顺序随机,分别进行30次交互操作。从图中可以看出,在不同的数据集上MDFO调度策略均有较高命中率,而前三种算法的命中率没有太大区别。在不同数据集上,MDFO算法与其他三种算法相比,体块的命中率提升均在10%以上,并且随着数据规模的增大体块命中率提升的比例逐渐提高,在38 GB的数据集上提升比例可以达到60%以上。平均命中率的具体数值如表 1所示。
图 10展示了基于距离度量的GPU纹理对象调度策略与GPU默认的LRU调度策略在多切片交互时纹理对象命中率的对比。图中纵轴为纹理对象的命中率,横轴为纹理对象缓存空间与绘制一帧所使用纹理对象占用的存储空间的比值(记为R)。由测试结果可以发现,R减小导致纹理对象的命中率不断下降。当R为1.5:1即显存容量与绘制所需的显存空间接近时,基于距离的纹理对象缓存调度算法依旧可以保持12%左右的命中率,而GPU默认的调度策略仅有不到5%的纹理对象命中率。
图 11为面向两阶段绘制策略的交互阶段与渐进绘制完成后的显示效果对比。可以看出在交互阶段切片的绘制质量不高,并且没有针对地层交界区域进行细化。而经过渐进细化阶段后得到的图像绘制质量明显提高,并且针对地层交界区域也进行了细化。
表 2记录了针对不同数据集所进行的单阶段绘制与两阶段绘制效率对比。
实验中使用八叉树中第3层节点对应的体块数据作为缓存进行交互阶段的绘制。从结果可以看出,随着数据集规模的不断增长,交互阶段依旧可以保持较高的绘制效率;而渐进细化绘制阶段的耗时有所增加,但该过程可以随时终止。单阶段绘制在交互绘制过程中需要进行频繁的数据加载,导致交互绘制效率较低,而两阶段绘制在交互阶段使用缓存进行绘制,因而可以达到较高的绘制效率。传统的单阶段绘制由于工作集中体块数量的限制,在38 GB数据集上进行交互绘制时只能细化到八叉树的第6层。在应用信息熵进行优化后,两阶段绘制的细化阶段则可以细化到八叉树的第7层(最精细层),因此可以实现更高的绘制质量。
4 结语针对在内存和显存等资源有限的通用计算机平台上进行大规模地震体切片实时交互与高质量显示存在的问题,本文采用多层多分辨率的八叉树结构对原始地震体数据进行重新组织,设计了基于距离度量的体块缓存与调度机制以及GPU纹理对象的缓存与调度策略。与传统调度策略相比,该方法有效提高了体块数据与纹理对象的命中率,减少了外存到内存以及内存到显存的数据加载次数,提高了可视化交互与显示的效率。同时设计了面向两阶段的切片实时交互与渐进绘制策略,进一步平衡了在计算资源有限的普通计算平台上进行大规模地震体可视化时绘制效率与显示质量之间的矛盾,并且通过信息熵优化了体块的细化过程,保证了用户关心区域以更高的分辨率进行绘制。
进一步研究将结合领域特点和用户需求优化体块多分辨率筛选机制,即用户通过设定部分高优先级体块作为兴趣区域,根据选定的兴趣区平滑选择剩余体块,通过这种可定制的多分辨率显示机制,使切片交互显示在效率和质量上更适合于大规模地质勘探数据的应用。
[1] | CHAMBERS H, BROWN A L. 3D visualization continues to advance integrated interpretation environment[J]. First Break, 2003, 21(5): 67-70. |
[2] | PLATE J, TIRTASANA M, CARMONA R, et al. Octreemizer:a hierarchical approach for interactive roaming through very large volumes[C]//Proceedings of the 2002 Symposium on Data Visualisation. Aire-la-Ville, Switzerland:Eurographics Association, 2002:53-60. |
[3] | 原达, 刘日晨, 袁晓如. 探地数据可视化研究[J]. 计算机辅助设计与图形学学报, 2015, 27(1): 36-45. (YUAN D, LIU R C, YUAN X R. Seismic visualization[J]. Journal of Computer-Aided Design & Computer Graphics, 2015, 27(1): 36-45.) |
[4] | WONG P C, SHEN H W, CHEN C, et al. Top ten interaction challenges in extreme-scale visual analytics[J]. IEEE Computer Graphics and Applications, 2012, 32(4): 197-207. |
[5] | LIU B, CLAPWORTHY G J, DONG F, et al. Octree rasterization:accelerating high-quality out-of-core GPU volume rendering[J]. IEEE Translations on Visualization and Computer Graphics, 2013, 19(10): 1732-1745. DOI:10.1109/TVCG.2012.151 |
[6] | CULLIP T J, NEUMANN U. Accelerating volume reconstruction with 3D texture hardware[EB/OL].[2017-01-02]. http://graphics.usc.edu/cgit/publications/papers/Volume_textures_93.pdf . |
[7] | LAMAR E, HAMANN B, JOY K. Multiresolution techniques for interactive texture-based volume visualization[C]//VIS'99:Proceedings of the 10th IEEE Visualization 1999 Conference. Washington, DC:IEEE Computer Society, 1999:355-361. |
[8] | BOADA I, NAVAZO I, SCOPIGNO R. Multiresolution volume visualization with a texture-based octree[J]. The Visual Computer, 2001, 17(3): 185-197. DOI:10.1007/PL00013406 |
[9] | GUTHE S, WAND M, GONSER J, et al. Interactive rendering of large volume data sets[C]//VIS'02:Proceedings of the 2002 Conference on Visualization. Washington, DC:IEEE Computer Society, 2002:53-60. |
[10] | SCHNEIDER J, WESTERMANN R. Compression domain volume rendering[C]//VIS'03:Proceedings of the 200314th IEEE Visualization. Washington, DC:IEEE Computer Society, 2003:293-300. |
[11] | 魏嘉, 唐杰, 武港山, 等. 三维地震数据体多分辨率数据组织与管理技术研究[J]. 石油物探, 2010, 49(3): 240-244. (WEI J, TANG J, WU G S, et al. Multi-resolution organization and management of massive 3D seismic data volume[J]. Geophysical Prospection for Petroleum, 2010, 49(3): 240-244.) |
[12] | XUE J, KE L. Volume visualization for out-of-core 3D images based on semi-adaptive partitioning[C]//Proceedings of the 2015 IEEE International Conference on Image Processing. Piscataway, NJ:IEEE, 2015:1503-1507. |
[13] | 梁荣华, 薛剑锋, 马祥音. 自适应分块细节水平的多分辨率体绘制方法[J]. 计算机辅助设计与图形学学报, 2012, 24(3): 314-322. (LIANG R H, XUE J F, MA X Y. Multi-resolution volume rendering based on adaptive bricking LOD[J]. Journal of Computer-Aided Design & Computer Graphics, 2012, 24(3): 314-322.) |