文章信息
- 魏勇, 丁雨淋, 龚桂荣, 杜莹, 周艳
- WEI Yong, DING Yulin, GONG Guirong, DU YING, ZHOU Yan
- 一种利用SSE2多重纹理混合的大范围虚拟地形可视化技术
- A SSE2 Based Multi-source Texture Blending Method for Large-scale Virtual Terrain Simulation
- 武汉大学学报·信息科学版, 2015, 40(4): 510-515
- Geomatics and Information Science of Wuhan University, 2015, 40(4): 510-515
- http://dx.doi.org/10.13203/j.whugis20130362
-
文章历史
- 收稿日期:2013-07-26
2. 四川省应急测绘与防灾减灾工程技术研究中心, 四川 成都 6100412;
3. 西南交通大学地球科学与环境工程学院, 四川 成都, 611756;
4. 香港中文大学太空与地球信息科学研究所, 香港, 999077;
5. 电子科技大学资源与环境学院, 四川 成都, 610000
2. Sichuan Engineering Research Center for Emergency Mapping & Disaster Reduction, Chengdu 610041, China;
3. Faculty of Geosciences and Environmental Engineering, Southwest Jiaotong University, Chengdu 611756, China;
4. Institute of Space and Earth Information Science, The Chinese University of Hong Kong, Hong Kong 999077, China;
5. School of Resources and Environment, University of Electronic Science and Technology of China, Chengdu 610000, China
虚拟战场地形作为虚拟战场实现的基础,其构建和动态显示效果直接影响战场仿真过程和仿真结果的逼真度和可信度。如何构建一个高实时性、高逼真度的三维地形环境,成为目前战场环境仿真研究的重点[1, 2]。在虚拟战场地形环境中,纹理发挥着重要的作用。一方面,地形纹理能够丰富形象地表达地貌特征,从可视化的角度弥补了DEM数据的精度问题,使得较低精度的DEM数据能表达丰富的地形起伏;另一方面,战场态势图等作为特殊的地形纹理,能够丰富虚拟战场内容。虚拟战场环境中纹理数据的来源广泛,包括各种遥感卫星的影像数据,传感器获取的态势数据,栅格化的矢量数据,扫描地图和战场态势图等。如何高效集成并展示这些多源纹理数据,有效表达战场环境和态势信息,已经成为虚拟战场环境信息系统成功与否的关键[3]。
多源纹理数据集成可视化的前提是对多源纹理数据进行混合[4]。目前多层纹理混合的实现方法主要有两种:使用OpenGL或D3D等图形引擎提供的多重纹理映射机制[5]和使用着色语言方法[6, 7]。使用多重纹理映射的方法易于实现,只需调用图形引擎提供的多重纹理混合API即可,其不足之处在于无法即时调整多层图像的透明度,且OpenGL的纹理组合器函数只能从三种来源接受颜色和alpha数据[5, 8],当纹理层数大于三层时,纹理组合器的使用极其不便。使用着色语言方法进行混合能够实现良好的纹理混合效果,但该方法对显卡要求较高,程序的移植性较差,不利于在瘦客户端实现。这两种方法的纹理混合操作均在GPU端完成,其中多层纹理数据从内存发送至显存时会占用较大显存及带宽[9, 10]。在显卡位宽和显存资源有限的情况下,大量的多重纹理融合操作往往会导致GPU和带宽负载过大,从而出现绘制画面不流畅、渲染效率低等问题[11]。
针对上述问题,本文提出了一种基于SSE2多重纹理混合的大范围虚拟战场地形可视化方法,将GPU端进行的纹理混合工作转移到CPU端,使用CPU的并行处理方法在内存中先对纹理数据进行混合,从而减少对显存的占用,降低对显卡硬件的要求。
1 虚拟战场地形环境可视化系统中的分层纹理设计
虚拟战场涵盖了多种来源、多种格式的数据,这些数据包括两种类型:一种是目标数据,例如敌我双方重要目标的位置信息,这类数据可以直接在虚拟战场地形环境中以点状或三维实体表达;另一种是环境数据,例如进攻防御图、战场态势信息等,这些数据通常与地理环境相关,数据量较大,表达范围较广,不利于在虚拟环境中直接绘制,常用的策略是将其转换为图像并作为地形纹理来叠加显示。 多层纹理数据的混合操作需解决两个问题,首先是图像纹理本身的透明区域和图层透明度的关系,其次是纹理混合的先后顺序。接下来分别阐述解决这两个问题的思路。
为了表达纹理的透明区域,本文将不同格式的图像数据采用32位RGBA色彩模式进行统一描述,RGBA各波段采样深度为8 bit,值域为0~255。在进行不同图像的统一描述操作时,对不含透明通道的源图像的处理方式是:默认增加一个alpha通道,且缺省值均设为255,以此表示该图像没有透明区域。此外,纹理颜色混合的常见处理方式是采用加法混合,为了避免加法混合操作中产生的色彩亮度增加问题,本文添加了图层透明度参数a,以此控制当前层纹理数据在混合过程中所占的比例。在进行两层纹理的混合操作时,上层纹理为混合前景色,下层纹理为混合背景色,混合公式如下:
式中,(RGBA)u、Au为上层纹理的像素值和alpha值;(RGBA)d、Ad分别为下层纹理的像素值和alpha值;a为上层纹理的透明度参数。
多层纹理混合的结果不仅受限于图层的透明度,还与图层的层次混合顺序有关。对于虚拟战场环境系统,本文提出纹理分层设计原则如下:① 基础纹理作为底层数据放在第一层;② 分辨率低的纹理数据放在下层,分辨率高的纹理数据放在上层;③ 地理范围小的纹理数据放在下层,地理范围大的纹理数据放在上层;④ 带透明通道的纹理数据放在无透明通道数据的上层;⑤ 战场态势图等态势信息数据放在地形数据的上层。 2 基于SSE2的多重纹理混合算法 2.1 SSE2
SSE2(Streaming SIMD Extensions2)指令集被Intel官方称为SIMD流技术扩展2或数据流单指令多数据扩展指令集2,是Intel公司在SSE指令集的基础上发展起来的一种IA-32架构的SIMD(单一指令多重数据)指令集[12]。SSE2中包括_m64、_m64i、_m128、_m128i等多种打包数据类型,每种打包数据类型均对应一个数学指令,可使用单一指令并行地处理打包数据[12]。相比于数据流单指令多数据扩展指令集SSE,SSE2新增了144指令和5种新的数据类型,支持128位整数和双精度浮点数运算,其对更高精度浮点数的处理能力使其成为加速多媒体程序的基础配置,从而大幅度提高了对影像、语音、图像和图片处理等软件的优化支持[13]。
2.2 SSE2多重纹理混合算法
对于多层级纹理数据,基于SSE2的多重纹理混合算法步骤如图 1所示,每次混合操作的核心步骤为:首先,将各层纹理数据的每4个像素数据打包成两个16位_m128i类型的数据;然后,将前景色和背景色上下两层纹理数据对应的_m128i类型数据进行混合;最后,将_m128i类型的混合结果数据转换成对应的像素数据。理论上讲,一个_m128i类型数值刚好能够表达4个像素,但这种打包结果在进行乘法运算时会产生数值溢出问题,因此本文采用每两个像素打包成一个_m128i类型数据的方式,其中每个像素的RGBA值分别采用两个字节来表示。为了进一步优化SSE2指令运算,提高效率,本文设计了两个优化策略。
策略一 将浮点数运算转换为整数运算。整数运算代替浮点数运算,既可节省打包空间,又能够提高运算效率。因此,在本研究中,浮点数类型的透明度参数a即通过乘以255转换为_m128i整型类型,以此提高运算效率。
策略二 将除法运算转换为位移运算。在SSE2指令集中,除法运算占用的CPU运算周期较长,因此本文采用位移运算来近似模拟除法。除数为255的近似位移公式有两种:
计算可知,式(2)的误差为3.91%,式(3)的误差为0.389%。在实际应用中,式(2)和式(3)都能很好地混合无透明通道的纹理数据,但对于包含透明区域的纹理图像,例如矢量数据切片,式(2)的计算效果较差,多层混合后误差累积,造成透明度降低,纹理较模糊;因此,本文选用式(3)作为除法的近似运算。
基于上述两个策略,优化后的纹理融合公式如式(4)所示,式中 Tu和Td为byte类型数据,值域范围为0~255;a为浮点类型,值域范围为0~1:
3 实验与分析本文设计了两个实验验证该算法的有效性。实验一对比分析本文方法与基于GPU的纹理混合方法在进行大范围地形浏览操作时计算机的CPU使用率、内存使用量、GPU负荷和GPU使用量;实验二对比分析基于SSE2的纹理混合方法与普通混合方法的算法效率。
3.1 实验一 3.1.1 实验数据及环境
地形实验数据共包括三层地形纹理,其中一层为基础纹理数据,另外两层为不同区域的细节纹理数据。实验环境为Intel(R) 酷睿双核T6600、2 GB DDRIII内存、NVIDIA GeForce GT 240 M显卡、512 MB显存、Windows XP操作系统。实验中,CPU负荷和内存使用量使用Windows系统的任务管理器来记录,GPU负荷和显存使用量通过GPU-Z记录。GPU-Z是硬件网站TechPowerUp推出的一款轻量级显卡测试软件,能够显示GPU核心、运行频率、带宽以及GPU负荷、显存占用量等信息。
为了保证实验结果的正确性,实验一首先制定了一段地形浏览路径,且路径中包含视点拉近、推远、旋转、俯仰等常用地形操作;然后分别使用基于SSE2的纹理混合模式和基于GPU的纹理混合模式加载同一地形浏览路径,记录地形浏览过程中相同时刻的各项实验数据。战场地形可视化系统使用运行状态与空闲状态下系统内存和显存使用量差值来表示内存与显存的使用量,系统空闲状态下CPU使用率为1%,GPU负荷为0,因此可以近似将可视化运行时的CPU和GPU负荷作为系统耗用的负荷。
3.1.2 实验结果和分析实验记录了一段约30 s的地形浏览路径,然后采用GPU纹理混合模式与SSE2纹理混合模式分别启动三维地形浏览系统,记录1、5、10、15、20、25、30 s时刻的各项数值,具体结果如表 1所示。由表 1可知,基于SSE2的纹理混合方法能够使GPU使用率降低约17%左右,减少显存使用量约240 MB;同时CPU使用率从15.7%增加到26%,而内存使用量的增加量仅为10.7 MB。由于虚拟战场环境数据在渲染地形纹理之外还需要渲染大量实体目标数据,占用较大显存量,因此,对于瘦客户机用户,减少显存占用量能够有效降低GPU负荷。基于SSE2的多重纹理混合能够有效减少GPU负荷和显存使用量,通过增加CPU计算量来平衡CPU和GPU的负载。
1 | 5 | 10 | 15 | 20 | 25 | 30 | ||
GPU纹理混合模式 | CPU使用率/% | 17 | 13 | 15 | 18 | 14 | 17 | 16 |
内存使用量/MB | 198 | 202 | 211 | 198 | 205 | 212 | 210 | |
GPU使用率/% | 35 | 24 | 36 | 38 | 31 | 36 | 35 | |
显存使用量/MB | 465 | 465 | 467 | 487 | 511 | 512 | 471 | |
SSE2纹理混合模式 | CPU使用率/% | 26 | 24 | 27 | 31 | 24 | 26 | 24 |
内存使用量/MB | 214 | 216 | 228 | 214 | 221 | 217 | 221 | |
GPU使用率/% | 13 | 8 | 14 | 8 | 9 | 7 | 8 | |
显存使用量/MB | 223 | 225 | 232 | 223 | 223 | 225 | 223 |
实验二对比使用SSE2的纹理混合方法与普通基于CPU的纹理混合方法的效率,通过一组不同纹理块的样本数据进行混合,记录两种方法的混合时间。
3.2.1 实验数据及环境实验二选用了某地区处理后的地形块纹理数据来进行纹理混合,每块地形纹理的分辨率为256像素×256像素,数据格式为32位BMP图像;共进行10次实验,每次混合纹理块的数量分别为1、4、9、16、25、36、49、64、81、100,详细实验结果如表 2所示。
数据名称 | 纹理块数 | 数据大小/字节 | 普通方法混合时间/ms | SSE2方法混合时间/ms |
样本1 | 1 | 262 200 | 1.42 | 0.77 |
样本2 | 4 | 1 048 800 | 4.68 | 2.83 |
样本3 | 9 | 2 359 800 | 10.56 | 6.54 |
样本4 | 16 | 4 195 200 | 28.92 | 11.52 |
样本5 | 25 | 6 555 000 | 29.49 | 17.25 |
样本6 | 36 | 9 439 200 | 46.97 | 28.36 |
样本7 | 49 | 12 847 800 | 57.82 | 34.91 |
样本8 | 64 | 16 780 800 | 75.53 | 45.99 |
样本9 | 81 | 21 238 200 | 94.38 | 58.10 |
样本10 | 100 | 26 220 000 | 118.24 | 72.83 |
实验结果表明,对于不同分辨率的混合纹理数据,混合的时间与图像像素大小之间近似于指数增长关系;使用基于SSE2的混合算法与普通 混合算法相比,能够节省约2/5的混合时间。基于SSE2的纹理混合算法的实质是将两个像素进 行打包,然后对打包后的数据进行混合,因此,从理论上来看,基于SSE2的纹理混合算法所用时间是普通混合算法的一半,实际测量的结果是普通混合算法耗时的61%,产生这种情况的原因是纹理数据打包和解包也会占用一定的时间,因此该算法的实际测量效率比理论效率略低。 3.3 具体应用
基于SSE2的多重纹理混合技术在“XX综合应用系统”中得到了具体应用。为了灵活地对多源
数据进行配置,系统提供了三维数据集设置工具,该工具可以读取本地、数据库以及网络上的不同格式数据,并实时调整影像图层号、设置图层对应的LOD级别。图 2展示了全球低精度纹理数据、25万仿真纹理数据、25万影像数据以及5万影像数据4层纹理数据的三维地形仿真环境在不同比例尺下的纹理数据混合效果。
由图 2可以看出,使用基于SSE2的优化算法进行纹理混合具有良好的纹理混合效果,能够满足虚拟战场环
境的视觉要求。在该系统的纯地形环境中,使用SSE2进行纹理混合优化后,系统帧数由优化前的43帧提高到62帧,满足了虚拟战场地形可视化系统的流畅性需求,添加三维模型数据和战场态势数据之后,系统帧数也能保持在35帧以上。 4 结 语
本文设计并实现了一种基于SSE2的多重纹理混合算法。实验结果表明,该方法能够有效读取多种来源不同格式的纹理数据,并能实时地解码和混合。基于SSE2的多重纹理混合算法在对预处理过的地形块纹理混合时有着良好的表现,然而在虚拟战场环境中,还有很多纹理是实时动态生成的,这种纹理的内容和范围都是动态变化的,适合使用GPU来处理。因此,在大范围虚拟战场环境中,将基于CPU与基于GPU的纹理数据处理方法合理有效地结合起来,使得系统既能降低GPU负荷,提高CPU的利用率,实现CPU和GPU的负载均衡,又能高效处理多种类型纹理,是下一步的研究方向。
[1] | Sun Kai, Xu Xiaogang.Study of Satellite Cloud Image Simulation Technology Based on WorldWind[J]. Science Technology and Engineering, 2011, 11(22):5 328-5 330, 5 339(孙恺, 徐晓刚. 基于WorldWind平台的卫星云图模拟技术研究[J]. 科学技术与工程, 2011, 22:5 328-5 330, 5 339) |
[2] | Jiang Jie. Research on Key Technologies in Global Virtual Geographic Environment Construction[D]. Changsha:National University of Defense Technology, 2010(蒋杰. 全球大规模虚拟地理环境构建关键技术研究[D]. 长沙:国防科学技术大学, 2010) |
[3] | Sun Siliang, Chen Ren, Sun Li, et al. Modelling and Simulation of Virtual Earth Scene[J]. Journal of System Simulation, 2010, 11(12):2 877-2 881(孙嗣良, 陈韧, 孙力, 等. 虚拟地球场景的可视化建模与仿真[J]. 系统仿真学报, 2010, 12:2 877-2 881) |
[4] | 刘星明, 刘晓利, 殷永凯, 等. 真实感三维模型的纹理融合[J]. 计算机辅助设计与图形学学报, 2012, 24(11):1 440-1 446 |
[5] | OpenGL Architecture Review Board. OpenGL Programming Guide[M].Beijing:Mechanical Industry Press, 2010(OpenGL体系结构审核委员会. OpenGL编程指南(第7版)[M]. 北京:机械工业出版社, 2010) |
[6] | Bushnell J, Mitchell J. Advanced Multitexture Effects with Direct3D and OpenGL[J]. Pyramid Peak Design & ATI Research, 1999 |
[7] | Tomas M E H. Real Time Rendering[M]. USA:A.K.Peters, Ltd, 2000 |
[8] | Zhu Guozhong, Zhang Fan, Bu Hui. Real-Time Rendering for the Phong-Specular Surface by Multitexture[J]. Computer Engineering and Science, 2011, 7(33):85-88(朱国仲, 张帆, 布辉. 使用多重纹理实时绘制Phong高光表面[J]. 计算机工程与科学, 2011, 7(33):85-88) |
[9] | H R M, Karuppiah, S M S. Comparison of CPU and GPU Implementation of Computing Absolute Difference[C]. IEEE International Conference, Penang, 2011 |
[10] | R K J M. Comparison of FPGA and GPU Implementations of Real-time Stereo Vision[C]. IEEE Computer Society Conference, Los Alamitos, 2010 |
[11] | Xu Xiaogang, Ma Lizhuang. Texture Mixing and Texture Transfer[J]. Journal of Computer-aided Design and Computer Graphics, 2003, 15(1):59-64(徐晓刚, 马利庄. 纹理混合与纹理传输[J]. 计算机辅助设计与图形学学报, 2003, 15(1):59-64) |
[12] | Skoglund J, Felsberg M. Fast Image Processing Using SSE2[OL]. http://www2.cvl.liu.se/scout/Publications/Papers/ssbao5_sf.pdf, 2005 |
[13] | Intel. Intel 64 and IA-32 Architectures Optimization Reference Manual[OL]. http://www.intel.com/conteut/dam/www/public/us/en/documents/manuals/64-ia-32-architcctanes-optimization manual.pdf, 2012 |