我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>行业知识

利用SSE2多重纹理混合的大范围虚拟地形可视化技术

文章来源:第三维度 作者: 发布时间:2015年07月18日 点击数: 字号:

    来源:第三维度
    作者:魏勇,丁雨淋,龚桂荣,杜莹,周艳
    单位:信息工程大学地理空间信息学院
          四川省应急测绘与防灾减灾工程技术研究中心
          西南交通大学地球科学与环境工程学院
          香港中文大学太空与地球信息科学研究所
          电子科技大学资源与环境学院

    摘要:大规模三维地形的真实感可视化对于表现战场自然环境具有重要意义,OpenGL、D3D等主流三维图形引擎需要将多层纹理数据发送到GPU端进行多重纹理融合操作。对于瘦客户机,在显卡位宽和显存有限的资源下,大量的多重纹理融合操作常会导致GPU和带宽负载过大,出现绘制画面不流畅、渲染效率低等问题。为此,提出了一种基于SSE2的多重纹理混合技术,通过在CPU端进行混合纹理混合操作,降低GPU负载,减少数据传送时间。实验证明,该方法在保证CPU计算效率的前提下,有效地降低了大范围虚拟战场环境可视化过程中GPU和带宽负载,显著提升了瘦客户机中大范围虚拟战场数据的渲染效率。

    虚拟战场地形作为虚拟战场实现的基础,其构建和动态显示效果直接影响战场仿真过程和仿真结果的逼真度和可信度。如何构建一个高实时性、高逼真度的三维地形环境,成为目前战场环境仿真研究的重点[1,2]。在虚拟战场地形环境中,纹理发挥着重要的作用。一方面,地形纹理能够丰富形象地表达地貌特征,从可视化的角度弥补了DEM数据的精度问题,使得较低精度的DEM数据能表达丰富的地形起伏;另一方面,战场态势图等作为特殊的地形纹理,能够丰富虚拟战场内容。虚拟战场环境中纹理数据的来源广泛,包括各种遥感卫星的影像数据,传感器获取的态势数据,栅格化的矢量数据,扫描地图和战场态势图等。如何高效集成并展示这些多源纹理数据,有效表达战场环境和态势信息,已经成为虚拟战场环境信息系统成功与否的关键[3]。

    多源纹理数据集成可视化的前提是对多源纹理数据进行混合[4]。目前多层纹理混合的实现方不足之处在于无法即时调整多层图像的透明度,且OpenGL的纹理组合器函数只能从三种来源接受颜色和alpha数据[5,8],当纹理层数大于三层时,纹理组合器的使用极其不便。使用着色语言方法进行混合能够实现良好的纹理混合效果,但该方法对显卡要求较高,程序的移植性较差,不利于在瘦客户端实现。这两种方法的纹理混合操作均在GPU端完成,其中多层纹理数据从内存发送至显存时会占用较大显存及带宽[9-10]。在显卡位宽和显存资源有限的情况下,大量的多重纹理融合操作往往会导致GPU和带宽负载过大,从而出现绘制画面不流畅、渲染效率低等问题[11]。

    针对上述问题,本文提出了一种基于SSE2多重纹理混合的大范围虚拟战场地形可视化方法,将GPU端进行的纹理混合工作转移到CPU端,使用CPU的并行处理方法在内存中先对纹理数据进行混合,从而减少对显存的占用,降低对显卡硬件的要求。

    1 虚拟战场地形环境可视化系统中的分层纹理设计

    虚拟战场涵盖了多种来源、多种格式的数据,这些数据包括两种类型:一种是目标数据,例如敌我双方重要目标的位置信息,这类数据可以直接在虚拟战场地形环境中以点状或三维实体表达;

    另一种是环境数据,例如进攻防御图、战场态势信息等,这些数据通常与地理环境相关,数据量较大,表达范围较广,不利于在虚拟环境中直接绘制,常用的策略是将其转换为图像并作为地形纹理来叠加显示。多层纹理数据的混合操作需解决两个问题,首先是图像纹理本身的透明区域和图层透明度的关系,其次是纹理混合的先后顺序。

    接下来分别阐述解决这两个问题的思路。

    为了表达纹理的透明区域,本文将不同格式的图像数据采用32位RGBA色彩模式进行统一描述,RGBA各波段采样深度为8bit,值域为0~255。在进行不同图像的统一描述操作时,对不含透明通道的源图像的处理方式是:默认增加一个alpha通道,且缺省值均设为255,以此表示该图像没有透明区域。此外,纹理颜色混合的常见处理方式是采用加法混合,为了避免加法混合操作中产生的色彩亮度增加问题,本文添加了图层透明度参数a,以此控制当前层纹理数据在混合过程中所占的比例。在进行两层纹理的混合操作时,上层纹理为混合前景色,下层纹理为混合背景色,混合公式如下:

    式中,(RGBA)u、Au为上层纹理的像素值和alpha值;(RGBA)d、Ad分别为下层纹理的像素值和al-pha值;a为上层纹理的透明度参数。

    多层纹理混合的结果不仅受限于图层的透明度,还与图层的层次混合顺序有关。对于虚拟战场环境系统,本文提出纹理分层设计原则如下:

    ① 基础纹理作为底层数据放在第一层;

    ② 分辨率低的纹理数据放在下层,分辨率高的纹理数据放在上层;

    ③ 地理范围小的纹理数据放在下层,地理范围大的纹理数据放在上层;

    ④带透明通道的纹理数据放在无透明通道数据的上层;

    ⑤战场态势图等态势信息数据放在地形数据的上层。

    2 基于SSE2的多重纹理混合算法

    2.1 SSE2

    SSE2(Streamin gSIMD Extensions 2)指令集被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类型数据的方式,其中每个像素的RG-BA值分别采用两个字节来表示。为了进一步优化SSE2指令运算,提高效率,本文设计了两个优化策略。


图1 基于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:

首页 上一页 1 2下一页尾页 共2页

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料