基于可编程渲染管线的雷达图像分层模型设计与实现
2009-05-12刘强刘忠义杨泽刚刘平
刘 强 刘忠义 杨泽刚 刘 平
摘 要:高分辨率雷达图像显示是雷达计算机模拟的重要环节,对图像的逼真度和实时性有着极高的要求。采用可编程渲染管线技术进行雷达显示系统模拟,能有效实现雷达图像的分层模型,充分利用CPU和GPU的并行处理能力,大幅降低CPU的运算复杂度。在生成高质量雷达图像的同时满足系统实时性要求。
关键词:雷达仿真;可编程渲染管线;余辉;着色器;雷达图像
中图分类号:TP391.9文献标识码:B
文章编号:1004-373X(2009)05-050-03
Design and Realization of Radar Image Delaminaton Based on Programmable Render Pipline
LIU Qiang,LIU Zhongyi,YANG Zegang,LIU Ping
(Navy Submarine Academy,Qingdao,266071,China)
Abstract:The simulation of radar′s high resolution display system is one of the most important procedures in radar simulation,requiring high-fidelity and real-time feature.The programmable render pipeline technique,by that it can effectively realize the delamination model of radar image,take advantage of CPU and GPU′s parallel processing,and reduce the computational complexity.With the programmable render pipeline technique,the simulation of radar′s display system can achieve real-time requirement while producing high-quality radar image.
Keywords:radar simulation;programable render pipline;intensity persistense;shader;radar image
0 引 言
雷达显示系统用于显示接收机输出的回波图像,以及信息处理机产生的二次信息和符号,是雷达操作员获取信息的主要途径。雷达的计算机模拟是雷达设计、分析以及训练的有效方法。而显示系统的模拟作为雷达计算机模拟的最终输出结果,其逼真度、实时性直接影响着系统的整体性能。显示系统模拟的主要任务包括:对接收机输出的回波数据,信息处理机产生的ARPA信息,以及各种符号等进行转换,合成为显示器2D光栅图像;对生成的回波图像模拟余辉效果;控制合成图像的亮度、对比度等。
对显示系统的模拟一般方法:在雷达图像刷新过程中对全屏像素逐一进行坐标变换(光栅图像的直角坐标转换为回波数据的极坐标)以查找对应的回波脉冲幅值,形成屏幕像素颜色值;衰减像素亮度,模拟显示器余辉效果(涉及到色饱和计算);设置像素颜色,生成逼真度非常高的雷达图像。但这种方法需要存取大量的像素,难以满足实时性的要求。例如,雷达显示器分辨率为1 000×1 000,则每帧需存取3.14×5 002=785 000个像素。而要保持画面流畅,帧速率应保持在30 f/s以上,即每秒需要进行23 550 000次像素存取。而这才仅仅模拟了雷达的显示系统。
为了提高效率,一些改进的算法被提出:预先建立坐标映射表,利用查表方法减少坐标变换的运算;嵌入MMX指令减暗颜色;利用DirectX等图形API直接存取显存等。这些方法减少了单个像素的处理时间,但由于像素存取次数多,仍然占用大量的CPU时间。
要大幅提高雷达显示系统模拟的效率,必须降低帧间隔内需要处理的像素总数。本文提出的方法基于现代显卡的可编程管线技术,将回波图像更新、余辉效果仿真、ARPA符号绘制与最终的图像合成过程隔离开来,并充分利用CPU和GPU并行处理。在帧间隔内由CPU完成对扫描线转过的区域进行图像更新和少量的余辉亮度计算,GPU完成图像合成,避免了对全屏海量像素的存取,极大地提高了显示模拟的效率。以某舰载导航搜索雷达为例,显示器分辨率为1 000×1 000,天线转速为20 r/m,模拟程序帧速率为30 f/s,天线旋转一周产生4 096条方位刻线。则模拟程序每帧需要存取785 000×20/(60×30)8 700个像素。再加上设置4 096条方位刻线余辉亮度,总计存取次数不到原先的1%,效果十分显著。
1 可编程渲染管线与Direct3D 9
可编程管线(Programmable Pipeline)是现代高性能显卡的一个重要技术特征。所谓可编程管线,是指可以编写一段运行于GPU(图像处理单元)的代码,对输入显卡的原始数据进行加工处理后再输出到显示器上。这样的代码称为着色器(shader),包括顶点着色器(vertex shader)和像素着色器(pixel shader),分别用于对要绘制模型的顶点和纹理进行变换和混合。由于着色器代码独立运行在显卡中,不占用CPU时间,而且GPU专门针对图像计算进行了优化,因此代码的运行效率高,图像处理的速度快。尽管可编程渲染管线设计的目的是满足日益复杂的3D应用环境,但由于其结构灵活,采用适当的方法编写代码,在2D环境中仍然能发挥出显卡的绘图能力。
Direct3D是微软提供的基于组件对象模型(COM)的底层绘图API,它建立在硬件抽象层(HAL)之上。Direct3D检查显卡的能力,并以标准的COM接口将显卡功能暴露给开发人员,从而使其能够安全地直接访问显卡硬件,提高应用程序的渲染速度。Direct3D 9全面支持可编程渲染管线,并引入高级着色语言(HLSL)来编写着色器代码。利用Direct3D 9 SDK来编写雷达模拟器的显示系统代码,可充分发挥显卡硬件的能力。
为了能够在雷达显示的2D环境中使用Direct3D,只需要做如下处理:将雷达图像绘制在纹理上,用三角形扇来模拟圆形,将三角形顶点的纹理坐标设置成雷达图像纹理的对应数值。将纹理和顶点告知Direct3D,便可渲染出雷达显示器图像来。如图1所示。
关于Direct3D和着色器编程就不再赘述,下面介绍雷达显示系统模拟中的一些关键技术。
2 雷达图像分层与纹理混合
雷达显示器图像根据其产生的方法和特点可分为两种:一种是来自接收机输出的回波图像(其中也包括噪声),其特点包括:图像随天线转动边扫描边刷新,像素的绘制基于极坐标系;图像亮度随时间衰减,即具有余辉效果。另一种是来自信息处理系统的ARPA符号,如动标、点目标符号、目标航迹线等,其特点是:符号的变化随ARPA信息变化,且无余辉效果。
为了避免全屏像素存取,必须将回波图像刷新、余辉效果仿真、ARPA符号绘制与最终的图像合成隔离。可编程渲染管线的像素着色器能够在显卡内利用进行多重纹理的自由混合。由于在图像合成被独立了出来,CPU仅完成必要的绘制即可。如图2所示,将合成雷达图像的纹理分为3层:回波图像层、余辉效果层和ARPA符号层,前2个纹理在帧间隔内进行刷新,后一个纹理仅在ARPA信息发生变化时进行绘制。这些任务都由CPU来完成。
GPU负责纹理的合成。渲染雷达显示器时,这3层纹理在像素着色器中进行混合,产生最终的雷达图像。混合代码如下:
sampler2D EchoTex;//回波图像纹理采样器
sampler2D SymbolTex;// 符号图像纹理采样器
sampler2D FaderTex;// 余辉效果纹理采样器
…
vector colorEcho=tex2D(EchoTex,input.echo);
vector colorSymbol=tex2D(SymbolTex,input.symbol);
vector colorFader=1.0f-tex2D(FaderTex,input.fader);
output.color=max(
saturate(colorEcho-colorFader),colorSymbol);
此外利用像素着色器,还非常容易实现亮度控制、颜色反转等特殊显示效果。由于CPU和GPU可并行处理,代码的执行效率非常高。
3 雷达回波图像更新与直接像素存取
帧间隔内更新回波图像,就是利用接收机输出的脉冲序列来更新回波图像纹理中的扫描扇面区。脉冲序列存放在回波缓存区数组内。由于脉冲幅值与像素颜色数据格式不同、缓存区数组与像素矩阵维度不同,不能用直接位块传送(Blt)来绘制回波图像。需要绘制单个像素来更新。Direct3D通过IDirect3DTexture9::LockRect()方法锁定纹理上的一块矩形区域,该矩形区域被映射成类似于DIB/DDB的像素数组。利用函数返回的指针,可以对数组中的像素进行直接存取。通过纹理锁定来存取显存,能够达到GDI函数无法达到的高性能。
锁定的矩形区越大,则存取的次数就越多。在锁定前根据扫描区域首先计算需要锁定的矩形范围,便可大幅减少存取像素的数量。这也正是雷达图像分层所带来的好处。如图3所示,A中需要对全屏像素进行存取,而B中只需要访问扫描扇面包围矩形中的像素。在进行像素存取时,采用查表法实现直角坐标与极坐标的转换,还能进一步提高存取的效率。
4 余辉效果与渲染到纹理
在绘制余辉效果图层时,采用渲染到纹理技术(RTT),将纹理设置成渲染目标,用D3D绘图函数直接在纹理上绘图,形成颜色渐变且动态变化的余辉效果。要实现渲染到纹理,在创建纹理时,用参数D3DUSAGE_RENDERTARGET指定纹理的用途,并调用GetSurfaceLevel()方法获取纹理的表面接口指针。在渲染时,用SetRenderTarget()方法将该表面设置成渲染目标。
为了绘制出图4中的余辉效果纹理,可用N条射线来组成余辉效果纹理中的圆,N等于天线方位刻线的数量,每条射线的颜色由其端点颜色决定。N条射线需要用2N个顶点来描述,顶点除含有坐标外,还包括颜色值。创建了这些顶点后,Direct3D在渲染管线中自动将其绘制成图像。
要形成随时间变化的动态效果,模拟程序需要在帧间隔内根据顶点坐标和当前扫描线的位置,重新设置每个顶点的颜色。Direct3D重新渲染便产生了亮度渐变且动态变化的圆。
采用这种方法,帧间隔内CPU仅需要存取2N个顶点的颜色。在前面的例子中,雷达扫描一周形成4 096个方位,需要绘制4 096条射线,即设置8 192个顶点颜色。在大幅减少了像素存取次数的情况下,增加的这部分顶点颜色存取时间并不会影响整体性能的改善。
5 ARPA符号绘制与GDI绘图
ARPA信息与符号的绘制不随扫描变化,而与雷达信息处理机的状态有关,即由描述雷达信
息处理机的状态数据表以及点目标跟踪表等数据表生成,比较适合用GDI函数绘制。为了能够在纹理上采用GDI函数绘图,需要获取纹理的表面(Surface)接口指针,然后利用表面的GetDC()方法得到该表面设备上下文(DC)。这样就可以调用Win32的GDI函数进行符号文字等输出了。由于这部分绘图代码内容少且更新率低,因此其CPU占用率几乎可以不计。
6 结 语
在某型舰载导航搜索雷达中,采用上述方法对雷达模拟器的显示部分进行了改进。模拟器的计算机平台配置为:Pentiumk Ⅳ 2.8 GHz,ASUS Extreme AX550显卡。模拟程序运行的帧速率从15 f/s提高到50 f/s以上,效果明显。结果表明,采用可编程渲染管线技术,可以实现回波图像更新与余辉效果计算的分离,充分发挥显卡的渲染能力,能够满足大分辨率雷达显示系统仿真的需求。
实际上,雷达显示器余辉效果纹理的绘制基本上独立于雷达的脉冲数据处理等过程,如果能够把描述余辉效果的4 096个亮度数值完全置于可编程渲染管线的顶点着色器中,由顶点着色器来完成亮度衰减及更新计算,将进一步降低CPU的计算负担。但由于余辉仿真是一个迭代过程,当前帧亮度是前一帧亮度的衰减,这需要对每次迭代后的结果进行保存。然而在目前的Direct3D版本中,还不支持渲染到顶点(RTV),顶点着色器也难以支持大容量的数组变量,迭代运算的结果难以保存。目前,模拟余辉效果顶点颜色动画仍然由CPU来完成。随着显卡技术和Direct3D技术的发展,这部分代码还能得到进一步的优化。
参考文献
[1]韩瑞新.基于光栅扫描的雷达显示系统仿真[J].系统仿真学报,2005,22(11):24-27.
[2]程玉荣.基于动态数据表的实时高分辨率雷达回波显示[J].系统仿真学报,2008,20(4):882-884.
[3]漆先虎.Windows操作系统下雷达操控终端的开发[J].火控雷达技术,2006,31(2):27-31.
[4]方伟.机载雷达模拟器设计中的DirectDraw和多线程技术[J].海军航空工程学院学报,2003,18(2):213-216.
[5]王宏,樊世友,陈再旺,等.基于OpenGL的雷达显示器计算机仿真的实现[J].计算机系统应用,2006(6):55-57,60.
[6]徐宏宇,陶然,单涛,等.一种实时雷达显示控制终端软件的设计[J].火控雷达技术,2002(1):7-9.
[7]樊世友,杨作宾,孙书鹰.基于余辉模型的P型雷达显示器计算机仿真.计算机仿真,2003,20(4):6-8.
[8]雷达技术编写组.雷达显示器[M].上海:上海科学技术出版社,1998.
[9]Wolfgang F Engel.Direct3D游戏编程入门教材[M].北京:人民邮电出版社,2005.
[10]Peter J Kovach.Direct3D技术内幕[M].北京:清华大学出版社,2001.
作者简介
刘 强 男,1976年出生,四川成都人,硕士研究生,讲师。研究方向为电子对抗系统仿真。
刘忠义 男,1969年出生,山东潍坊人,硕士研究生,副教授。研究方向为电子对抗系统仿真。
杨泽刚 男,1968年出生,江西九江人,硕士研究生,高级工程师。研究方向为雷达设备测试与维修。
刘 平 男,1980年出生,湖南长沙人,博士研究生,讲师。研究方向为嵌入式测试与诊断设备。