基于可編程渲染管線的雷達(dá)圖像分層模型設(shè)計(jì)與實(shí)現(xiàn)
摘 要:高分辨率雷達(dá)圖像顯示是雷達(dá)計(jì)算機(jī)模擬的重要環(huán)節(jié),對(duì)圖像的逼真度和實(shí)時(shí)性有著極高的要求。采用可編程渲染管線技術(shù)進(jìn)行雷達(dá)顯示系統(tǒng)模擬,能有效實(shí)現(xiàn)雷達(dá)圖像的分層模型,充分利用CPtJ和GP[J的并行處理能力,大幅降低CPU的運(yùn)算復(fù)雜度。在生成高質(zhì)量雷達(dá)圖像的同時(shí)滿足系統(tǒng)實(shí)時(shí)性要求。
關(guān)鍵詞:雷達(dá)仿真;可編程渲染管線;余輝;著色器;雷達(dá)圖像
0 引 言
雷達(dá)顯示系統(tǒng)用于顯示接收機(jī)輸出的回波圖像,以及信息處理機(jī)產(chǎn)生的二次信息和符號(hào),是雷達(dá)操作員獲取信息的主要途徑。雷達(dá)的計(jì)算機(jī)模擬是雷達(dá)設(shè)計(jì)、分析以及訓(xùn)練的有效方法。而顯示系統(tǒng)的模擬作為雷達(dá)計(jì)算機(jī)模擬的最終輸出結(jié)果,其逼真度、實(shí)時(shí)性直接影響著系統(tǒng)的整體性能。顯示系統(tǒng)模擬的主要任務(wù)包括:對(duì)接收機(jī)輸出的回波數(shù)據(jù),信息處理機(jī)產(chǎn)生的ARPA信息,以及各種符號(hào)等進(jìn)行轉(zhuǎn)換,合成為顯示器2D光柵圖像;對(duì)生成的回波圖像模擬余輝效果;控制合成圖像的亮度、對(duì)比度等。
對(duì)顯示系統(tǒng)的模擬一般方法:在雷達(dá)圖像刷新過程中對(duì)全屏像素逐一進(jìn)行坐標(biāo)變換(光柵圖像的直角坐標(biāo)轉(zhuǎn)換為回波數(shù)據(jù)的極坐標(biāo))以查找對(duì)應(yīng)的回波脈沖幅值,形成屏幕像素顏色值;衰減像素亮度,模擬顯示器余輝效果(涉及到色飽和計(jì)算);設(shè)置像素顏色,生成逼真度非常高的雷達(dá)圖像。但這種方法需要存取大量的像素,難以滿足實(shí)時(shí)性的要求。例如,雷達(dá)顯示器分辨率為1 000×1 000,則每幀需存取3.14×5 002=785 000個(gè)像素。而要保持畫面流暢,幀速率應(yīng)保持在30 f/s以上,即每秒需要進(jìn)行23 550 000次像素存取。而這才僅僅模擬了雷達(dá)的顯示系統(tǒng)。
為了提高效率,一些改進(jìn)的算法被提出:預(yù)先建立坐標(biāo)映射表,利用查表方法減少坐標(biāo)變換的運(yùn)算;嵌入MMX指令減暗顏色;利用DirectX等圖形API直接存取顯存等。這些方法減少了單個(gè)像素的處理時(shí)間,但由于像素存取次數(shù)多,仍然占用大量的CPU時(shí)間。
要大幅提高雷達(dá)顯示系統(tǒng)模擬的效率,必須降低幀間隔內(nèi)需要處理的像素總數(shù)。本文提出的方法基于現(xiàn)代顯卡的可編程管線技術(shù),將回波圖像更新、余輝效果仿真、ARPA符號(hào)繪制與最終的圖像合成過程隔離開來,并充分利用cPU和GPU并行處理。在幀間隔內(nèi)由CPU完成對(duì)掃描線轉(zhuǎn)過的區(qū)域進(jìn)行圖像更新和少量的余輝亮度計(jì)算,GPU完成圖像合成,避免了對(duì)全屏海量像素的存取,極大地提高了顯示模擬的效率。以某艦載導(dǎo)航搜索雷達(dá)為例,顯示器分辨率為1 000×1 000,天線轉(zhuǎn)速為20 r/m,模擬程序幀速率為30 f/s,天線旋轉(zhuǎn)一周產(chǎn)生4 096條方位刻線。則模擬程序每幀需要存取785 000×20/(60×30)△8 700個(gè)像素。再加上設(shè)置4 096條方位刻線余輝亮度,總計(jì)存取次數(shù)不到原先的1%,效果十分顯著。
1 可編程渲染管線與Direct3D 9
可編程管線(Programmable Pipeline)是現(xiàn)代高性能顯卡的一個(gè)重要技術(shù)特征。所謂可編程管線,是指可以編寫一段運(yùn)行于GPU(圖像處理單元)的代碼,對(duì)輸入顯卡的原始數(shù)據(jù)進(jìn)行加工處理后再輸出到顯示器上。這樣的代碼稱為著色器(shader),包括頂點(diǎn)著色器(vertex shader)和像素著色器(pixel shader),分別用于對(duì)要繪制模型的頂點(diǎn)和紋理進(jìn)行變換和混合。由于著色器代碼獨(dú)立運(yùn)行在顯卡中,不占用CPU時(shí)間,而且GPU專門針對(duì)圖像計(jì)算進(jìn)行了優(yōu)化,因此代碼的運(yùn)行效率高,圖像處理的速度快。盡管可編程渲染管線設(shè)計(jì)的目的是滿足日益復(fù)雜的3D應(yīng)用環(huán)境,但由于其結(jié)構(gòu)靈活,采用適當(dāng)?shù)姆椒ň帉懘a,在2D環(huán)境中仍然能發(fā)揮出顯卡的繪圖能力。
Direct3D是微軟提供的基于組件對(duì)象模型(COM)的底層繪圖API,它建立在硬件抽象層(HAL)之上。Direct3D檢查顯卡的能力,并以標(biāo)準(zhǔn)的COM接口將顯卡功能暴露給開發(fā)人員,從而使其能夠安全地直接訪問顯卡硬件,提高應(yīng)用程序的渲染速度。Direct3D 9全面支持可編程渲染管線,并引入高級(jí)著色語言(HLSL)來編寫著色器代碼。利用Direct3D 9 SDK來編寫雷達(dá)模擬器的顯示系統(tǒng)代碼,可充分發(fā)揮顯卡硬件的能力。
為了能夠在雷達(dá)顯示的2D環(huán)境中使用Direct3D,只需要做如下處理:將雷達(dá)圖像繪制在紋理上,用三角形扇來模擬圓形,將三角形頂點(diǎn)的紋理坐標(biāo)設(shè)置成雷達(dá)圖像紋理的對(duì)應(yīng)數(shù)值。將紋理和頂點(diǎn)告知Direct3D,便可渲染出雷達(dá)顯示器圖像來。如圖1所示。
關(guān)于Direct3D和著色器編程就不再贅述,下面介紹雷達(dá)顯示系統(tǒng)模擬中的一些關(guān)鍵技術(shù)。
2 雷達(dá)圖像分層與紋理混合
雷達(dá)顯示器圖像根據(jù)其產(chǎn)生的方法和特點(diǎn)可分為兩種:一種是來自接收機(jī)輸出的回波圖像(其中也包括噪聲),其特點(diǎn)包括:圖像隨天線轉(zhuǎn)動(dòng)邊掃描邊刷新,像素的繪制基于極坐標(biāo)系;圖像亮度隨時(shí)間衰減,即具有余輝效果。另一種是來自信息處理系統(tǒng)的ARPA符號(hào),如動(dòng)標(biāo)、點(diǎn)目標(biāo)符號(hào)、目標(biāo)航跡線等,其特點(diǎn)是:符號(hào)的變化隨ARPA信息變化,且無余輝效果。
為了避免全屏像素存取,必須將回波圖像刷新、余輝效果仿真、ARPA符號(hào)繪制與最終的圖像合成隔離??删幊啼秩竟芫€的像素著色器能夠在顯卡內(nèi)利用進(jìn)行多重紋理的自由混合。由于在圖像合成被獨(dú)立了出來,CPu僅完成必要的繪制即可。如圖2所示,將合成雷達(dá)圖像的紋理分為3層:回波圖像層、余輝效果層和ARPA符號(hào)層,前2個(gè)紋理在幀間隔內(nèi)進(jìn)行刷新,后一個(gè)紋理僅在ARPA信息發(fā)生變化時(shí)進(jìn)行繪制。這些任務(wù)都由CPU來完成。
GPU負(fù)責(zé)紋理的合成。渲染雷達(dá)顯示器時(shí),這3層紋理在像素著色器中進(jìn)行混合,產(chǎn)生最終的雷達(dá)圖像?;旌洗a如下:
此外利用像素著色器,還非常容易實(shí)現(xiàn)亮度控制、顏色反轉(zhuǎn)等特殊顯示效果。由于CPU和GPU可并行處理,代碼的執(zhí)行效率非常高。
3 雷達(dá)回波圖像更新與直接像素存取
幀間隔內(nèi)更新回波圖像,就是利用接收機(jī)輸出的脈沖序列來更新回波圖像紋理中的掃描扇面區(qū)。脈沖序列存放在回波緩存區(qū)數(shù)組內(nèi)。由于脈沖幅值與像素顏色數(shù)據(jù)格式不同、緩存區(qū)數(shù)組與像素矩陣維度不同,不能用直接位塊傳送(Blt)來繪制回波圖像。需要繪制單個(gè)像素來更新。Direct3D通過IDirect3DTexture9::LockRect()方法鎖定紋理上的一塊矩形區(qū)域,該矩形區(qū)域被映射成類似于DIB/DDB的像素?cái)?shù)組。利用函數(shù)返回的指針,可以對(duì)數(shù)組中的像素進(jìn)行直接存取。通過紋理鎖定來存取顯存,能夠達(dá)到GDI函數(shù)無法達(dá)到的高性能。
鎖定的矩形區(qū)越大,則存取的次數(shù)就越多。在鎖定前根據(jù)掃描區(qū)域首先計(jì)算需要鎖定的矩形范圍,便可大幅減少存取像素的數(shù)量。這也正是雷達(dá)圖像分層所帶來的好處。如圖3所示,A中需要對(duì)全屏像素進(jìn)行存取,而B中只需要訪問掃描扇面包圍矩形中的像素。在進(jìn)行像素存取時(shí),采用查表法實(shí)現(xiàn)直角坐標(biāo)與極坐標(biāo)的轉(zhuǎn)換,還能進(jìn)一步提高存取的效率。
4 余輝效果與渲染到紋理
在繪制余輝效果圖層時(shí),采用渲染到紋理技術(shù)(RTT),將紋理設(shè)置成渲染目標(biāo),用D3D繪圖函數(shù)直接在紋理上繪圖,形成顏色漸變且動(dòng)態(tài)變化的余輝效果。要實(shí)現(xiàn)渲染到紋理,在創(chuàng)建紋理時(shí),用參數(shù)D3DUSAGE RENDERTARGET指定紋理的用途,并調(diào)用GetSurfaceLevel()方法獲取紋理的表面接口指針。在渲染時(shí),用SetRenderTarget()方法將該表面設(shè)置成渲染目標(biāo)。
為了繪制出圖4中的余輝效果紋理,可用N條射線來組成余輝效果紋理中的圓,N等于天線方位刻線的數(shù)量,每條射線的顏色由其端點(diǎn)顏色決定。N條射線需要用2N個(gè)頂點(diǎn)來描述,頂點(diǎn)除含有坐標(biāo)外,還包括顏色值。創(chuàng)建了這些頂點(diǎn)后,Direct3D在渲染管線中自動(dòng)將其繪制成圖像。
要形成隨時(shí)間變化的動(dòng)態(tài)效果,模擬程序需要在幀間隔內(nèi)根據(jù)頂點(diǎn)坐標(biāo)和當(dāng)前掃描線的位置,重新設(shè)置每個(gè)頂點(diǎn)的顏色。Direct3D重新渲染便產(chǎn)生了亮度漸變且動(dòng)態(tài)變化的圓。
采用這種方法,幀間隔內(nèi)CPU僅需要存取2N個(gè)頂點(diǎn)的顏色。在前面的例子中,雷達(dá)掃描一周形成4 096個(gè)方位,需要繪制4 096條射線,即設(shè)置8 192個(gè)頂點(diǎn)顏色。在大幅減少了像素存取次數(shù)的情況下,增加的這部分頂點(diǎn)顏色存取時(shí)間并不會(huì)影響整體性能的改善。
5 ARPA符號(hào)繪制與GDI繪圖
ARPA信息與符號(hào)的繪制不隨掃描變化,而與雷達(dá)信息處理機(jī)的狀態(tài)有關(guān),即由描述雷達(dá)信息處理機(jī)的狀態(tài)數(shù)據(jù)表以及點(diǎn)目標(biāo)跟蹤表等數(shù)據(jù)表生成,比較適合用GDI函數(shù)繪制。為了能夠在紋理上采用GDI函數(shù)繪圖,需要獲取紋理的表面(Surface)接口指針,然后利用表面的GetDC()方法得到該表面設(shè)備上下文(DC)。這樣就可以調(diào)用win32的GDI函數(shù)進(jìn)行符號(hào)文字等輸出了。由于這部分繪圖代碼內(nèi)容少且更新率低,因此其CPU占用率幾乎可以不計(jì)。
6 結(jié) 語
在某型艦載導(dǎo)航搜索雷達(dá)中,采用上述方法對(duì)雷達(dá)模擬器的顯示部分進(jìn)行了改進(jìn)。模擬器的計(jì)算機(jī)平臺(tái)配置為:PentiumXXXXXXXXXⅣ2.8 GHz,ASUS Extreme AX550顯卡。模擬程序運(yùn)行的幀速率從15 f/s提高到50 f/s以上,效果明顯。結(jié)果表明,采用可編程渲染管線技術(shù),可以實(shí)現(xiàn)回波圖像更新與余輝效果計(jì)算的分離,充分發(fā)揮顯卡的渲染能力,能夠滿足大分辨率雷達(dá)顯示系統(tǒng)仿真的需求。
實(shí)際上,雷達(dá)顯示器余輝效果紋理的繪制基本上獨(dú)立于雷達(dá)的脈沖數(shù)據(jù)處理等過程,如果能夠把描述余輝效果的4 096個(gè)亮度數(shù)值完全置于可編程渲染管線的頂點(diǎn)著色器中,由頂點(diǎn)著色器來完成亮度衰減及更新計(jì)算,將進(jìn)一步降低CPU的計(jì)算負(fù)擔(dān)。但由于余輝仿真是一個(gè)迭代過程,當(dāng)前幀亮度是前一幀亮度的衰減,這需要對(duì)每次迭代后的結(jié)果進(jìn)行保存。然而在目前的Direct3D版本中,還不支持渲染到頂點(diǎn)(RTV),頂點(diǎn)著色器也難以支持大容量的數(shù)組變量,迭代運(yùn)算的結(jié)果難以保存。目前,模擬余輝效果頂點(diǎn)顏色動(dòng)畫仍然由CPU來完成。隨著顯卡技術(shù)和Direct3D技術(shù)的發(fā)展,這部分代碼還能得到進(jìn)一步的優(yōu)化。