宋 歌,潘衛(wèi)軍
(中國(guó)民用航空飛行學(xué)院空中交通管理學(xué)院,四川 廣漢 618307)
大氣散射是地球表面大氣層中一種重要的自然現(xiàn)象,由陽(yáng)光與空氣中的微粒相互作用形成,如在地面上觀察到的藍(lán)天、紅日、霧霾等都是大氣散射產(chǎn)生的效果[1]。在飛行模擬機(jī)、塔臺(tái)視景模擬機(jī)等航空仿真系統(tǒng)中,大氣散射效果的仿真十分重要。大氣散射現(xiàn)象的仿真技術(shù)最早出現(xiàn)于20世紀(jì)80年代,當(dāng)時(shí)由于大氣散射物理模型比較復(fù)雜和計(jì)算機(jī)硬件速度的限制,無(wú)法應(yīng)用于實(shí)時(shí)性較高的航空仿真系統(tǒng)中。早期的大氣散射模擬通常采用天空紋理貼圖結(jié)合基于屏幕空間或粒子系統(tǒng)的霧效進(jìn)行實(shí)時(shí)實(shí)現(xiàn),這種方式的仿真結(jié)果真實(shí)性較差。Nishita[2]等根據(jù)瑞利散射和米氏散射方程,提出一種適用于地表范圍的大氣散射計(jì)算方程,奠定了當(dāng)今大氣散射模擬的基礎(chǔ);2002年,Dobashi[3]等首次提出基于圖形處理器(GPU)的大氣散射渲染算法;此后,O’Neil提出一種基于CPU的實(shí)現(xiàn)方法[4],其利用投射線技術(shù)計(jì)算散射積分,通過(guò)使用代表大氣外部和內(nèi)部的兩個(gè)球體模型,避免耗時(shí)的體渲染。后O’Neil又使用GPU改進(jìn)了該算法[5];Bruneton[6]等基于Nishita的大氣散射模型,提出一種CPU與GPU相結(jié)合的渲染方法,以球面模型為基礎(chǔ),通過(guò)預(yù)先計(jì)算的3D紋理在GPU中確定紋理坐標(biāo),得到了真實(shí)度較高的大氣散射模擬結(jié)果。然而,針對(duì)地球橢球模型的特點(diǎn),以上算法在坐標(biāo)精度要求較高的航空仿真中容易出現(xiàn)局部效果失真的現(xiàn)象。
本文提出一種針對(duì)航空仿真的宏觀大規(guī)模場(chǎng)景,基于大氣散射物理模型的實(shí)時(shí)渲染方法。算法首先根據(jù)瑞利散射和米氏散射構(gòu)建大氣散射的數(shù)學(xué)模型進(jìn)行離線渲染,渲染結(jié)果保存至3D紋理,以供實(shí)時(shí)渲染時(shí)調(diào)用;在此基礎(chǔ)上,以地球?qū)嶋H尺寸構(gòu)建橢球體的渲染模型;其次,使用密度積分的方法進(jìn)行霧霾效果模擬,利用柏林噪聲實(shí)現(xiàn)霧霾的動(dòng)態(tài)變化效果;最后,使用高動(dòng)態(tài)范圍技術(shù)優(yōu)化渲染圖像,形成最終實(shí)時(shí)渲染畫(huà)面。
本文渲染算法的基礎(chǔ)源自經(jīng)典的瑞利(Rayleigh)散射和米氏(Mie)散射模型。
大氣層中的空氣分子直徑大約是入射光波波長(zhǎng)的十分之一,其發(fā)生的散射現(xiàn)象稱之為瑞利散射。根據(jù)瑞利散射,相位方程βr(θ)描述了某一波長(zhǎng)的光波在特定方向θ上的總量,其公式如下
(1)
其中,θ是光線和視線方向的的夾角,n是空氣散射系數(shù),λ是光波長(zhǎng),N是空氣分子密度。
由式(1)可知,βr(θ)和光波長(zhǎng)的4次方成反比,因此短波光(紫光、藍(lán)光等)的散射能力比較強(qiáng)。這也是晴朗天空呈藍(lán)色的原因。
對(duì)式(1)進(jìn)行積分,便可得到總的散射系數(shù)βR
(2)
其中,R為參考球面模型的半徑,h為當(dāng)前點(diǎn)的海拔高度。βR表示一條光束由散射形成的總光線量。
當(dāng)大氣中粒子的直徑與輻射的波長(zhǎng)相當(dāng)時(shí)發(fā)生的散射稱之為米氏散射。米氏散射主要由大氣中的微粒,如煙、塵埃、小水滴及氣溶膠等引起。米氏散射的散射強(qiáng)度與波長(zhǎng)的二次方成反比,并且散射在光線向前方向比向后方向更強(qiáng),方向性比較明顯。米氏散射方程可以寫(xiě)成
(3)
這里c是根據(jù)濁度T變化的濃度因子,它的計(jì)算公式是
c=(0.6544T-0.6510)·10-16
(4)
米氏散射比瑞利散射復(fù)雜,在實(shí)際應(yīng)用中,通常使用近似的Henyey-Greenstein相位方程進(jìn)行實(shí)時(shí)計(jì)算
(5)
其中,g是方向因子。
綜合瑞利散射和米氏散射,便可得到大氣散射的綜合數(shù)學(xué)模型
β(θ)=βR(θ)+αφHG(θ)
(6)
其中α表示米氏散射的強(qiáng)度。當(dāng)α較大時(shí),即表示大氣中大直徑微粒的散射作用較強(qiáng),即可用來(lái)模擬現(xiàn)實(shí)中霧霾天氣的顯示效果。
根據(jù)大氣散射的綜合數(shù)學(xué)模型便可進(jìn)行大氣散射的渲染計(jì)算。首先給出光程(如圖1所示)的定義。記L(x,v,s)為從方向v射向點(diǎn)x的總光量,其中s為太陽(yáng)方向,x0(x,v)在光線x+tv的末端,可知x0位于地表和大氣頂部之間。
圖1 光程的定義
光程T在x0和x之間,定義如下
(7)
其中βi(y)是根據(jù)式(6)計(jì)算得來(lái)的散射系數(shù)。
將x0處的直接太陽(yáng)光記為L(zhǎng)0,當(dāng)v≠s或者陽(yáng)光被地形遮擋時(shí)L0=0。在x0處的反射光記為R[L](x,v,s),可知當(dāng)x0位于大氣頂部時(shí)R[L]=0。從任意方向散射到由x到x0方向的光記為S[L](x,v,s),它們的表達(dá)式分別為
L0(x,v,s)=T(x,x0)Lsun或0
(8)
(9)
(10)
則最終得到L(x,v,s)的計(jì)算公式
L(x,v,s)=L0(x,v,s)+R[L](x,v,s)+S[L](x,v,s)
(11)
上述表達(dá)式表示:任意空間一點(diǎn)向任意方向發(fā)射射線,假定射線撞擊到了地表或是大氣層的邊緣(假定大氣是漸進(jìn)衰減的一個(gè)過(guò)程),那么在這條路程上,進(jìn)入攝像機(jī)的散射光照包含了地面被照亮的部分R[L](x,v,s)在該方向的散射分量以及路程中所有采樣點(diǎn)被照亮部分S[L](x,v,s)在該方向的散射分量,如圖2所示。其中,R[L](x,v,s)部分被考慮為以地表法線為中心方向的180°的半球區(qū)域的積分,而S[L](x,v,s)部分由于沒(méi)有任何阻攔,被考慮為球心積分模型。計(jì)算方法是預(yù)先求出發(fā)生一次散射以后在任意點(diǎn)任意方向的進(jìn)光量,再以此為基準(zhǔn)進(jìn)行迭代,假定某一方向上所有采樣點(diǎn)的進(jìn)光量是上一次一次散射的結(jié)果,搜集這些結(jié)果進(jìn)行累加最后得到二次散射的結(jié)果,再進(jìn)行下一次迭代。在本文提到的模型中,使用了三次迭代,最后得到了逼真的仿真結(jié)果。
由于GPU的限制,上述計(jì)算十分耗時(shí),因此需借助渲染到紋理技術(shù)(Render-to-Texture),將一部分計(jì)算內(nèi)容預(yù)先渲染保存至紋理,以節(jié)約渲染時(shí)間。然而,紋理過(guò)大也存在占用顯存的問(wèn)題,這也會(huì)影響渲染效率。因此,本文定義了多張紋理文件,在實(shí)時(shí)渲染過(guò)程中根據(jù)需要進(jìn)行紋理查找。
由于實(shí)時(shí)計(jì)算每個(gè)點(diǎn)的最終光照L(x,v,s)非常耗時(shí),因此可以將不依賴于當(dāng)前位置數(shù)據(jù)的計(jì)算結(jié)果進(jìn)行預(yù)處理。例如光程,瑞利散射及米氏散射等,它們的結(jié)果可以預(yù)先計(jì)算并存儲(chǔ)在紋理中。在預(yù)處理的時(shí)候,提供了幾個(gè)索引作為自變量:攝像機(jī)所在的位置x(x,y,z),視點(diǎn)方向向量v(x,y,z),太陽(yáng)相對(duì)于視點(diǎn)向量的夾角向量s(x,y,z)。上面九個(gè)變量可以縮減為4個(gè)自由度,它們依次為相機(jī)距離地心的高度,視線和相機(jī)離地心連線的夾角,太陽(yáng)和視線方向的夾角(需要兩個(gè)自由度的夾角即可確定太陽(yáng)位置)。這些自變量映射到0到1的定義域內(nèi),即可應(yīng)用到紋理坐標(biāo)上,從而達(dá)到離線渲染的目的。
利用上述計(jì)算方法容易得到基于球面模型的大氣散射渲染結(jié)果。然而,在航空仿真的實(shí)際應(yīng)用中,坐標(biāo)位置信息都是嚴(yán)格按照基于橢球面的大地坐標(biāo)系解算的,球面模型的渲染結(jié)果必然會(huì)導(dǎo)致坐標(biāo)精度損失,造成視覺(jué)效果的偏差。因此,在計(jì)算中考慮橢球模型是非常必要的。
本文采用WGS84坐標(biāo)系,將地球連同周邊大氣層看作一個(gè)橢球面模型,設(shè)赤道半徑為Re,兩極半徑為Rp,地球某點(diǎn)所在緯度為θlat,則該點(diǎn)所在半徑長(zhǎng)(即橢球心與該點(diǎn)的距離)為
(12)
其中f=(Re-Rp)/Re。
利用以上結(jié)果,代入式(2),便可得
(13)
其中r為當(dāng)前點(diǎn)距離地球球心(參考橢球心)的距離。
利用式(13)的結(jié)果繼續(xù)上節(jié)所述計(jì)算,便可得到基于橢球體模型的大氣散射光照渲染結(jié)果。
霧霾是由于大氣散射作用下的一種常見(jiàn)天氣現(xiàn)象。其基本原理是大氣中大顆粒物質(zhì)發(fā)生米氏散射導(dǎo)致的視覺(jué)效果變化。而霧與霾本身也有區(qū)別:霧主要是由空氣中懸浮的小水滴造成的,而霾則是由空氣中懸浮的固體微粒(如灰塵、硫酸、硝酸等各種化合物)造成的。霧霾視覺(jué)效果也有不同:霧的顏色呈乳白色或青白色,且對(duì)能見(jiàn)度的影響較大(一般在1公里內(nèi));而霾的顏色多呈灰色、黃色或橙灰色,對(duì)能見(jiàn)度影響不太大(一般在10公里內(nèi))。
利用大氣散射的數(shù)學(xué)模型能夠模擬霧霾的基本視覺(jué)效果,而針對(duì)霧霾的不同特點(diǎn),則需進(jìn)行額外的計(jì)算以準(zhǔn)確表示能見(jiàn)度的不同與顏色的不同。
在航空仿真中,需要從不同高度和角度模擬霧效:如在飛行模擬的起飛降落階段需觀察霧霾在地面的視覺(jué)效果,而在飛行階段則需模擬從空中俯瞰霧霾以及在霧霾中飛行時(shí)穿梭霧霾的效果。此外,根據(jù)塔臺(tái)模擬機(jī)或飛行模擬機(jī)的訓(xùn)練要求,仿真系統(tǒng)需能進(jìn)行能見(jiàn)度距離的量化設(shè)置。這就需要霧霾的數(shù)學(xué)模型盡可能貼近真實(shí)情況,并能通過(guò)參數(shù)控制效果的變化。因此,在上章大氣渲染模型的基礎(chǔ)上,本文建立一個(gè)基于地球橢球體模型、密度逐漸變化的霧霾模型,通過(guò)計(jì)算密度積分,確定每個(gè)渲染片元的實(shí)際顯示顏色。
同基本大氣散射模型相同,霧霾模型同樣是基于橢球面的橢球體(如圖2所示)。該模型以地球表面為霧底,霧的高度以變量形式傳入GPU著色器,以便進(jìn)行參數(shù)調(diào)節(jié)。此外,霧霾密度隨高度增加而減小。
圖2 霧霾渲染模型
對(duì)每一個(gè)片元(像素),霧霾密度可通過(guò)極坐標(biāo)積分計(jì)算
(14)
其中,l是霧霾高度;r1是視點(diǎn)高度;r2是當(dāng)前片元所處目標(biāo)位置點(diǎn)的高度(這里的高度均表示和球心間的距離),d表示當(dāng)前的能見(jiàn)度距離,dmax表示最大能見(jiàn)度距離。
霧霾顏色和大氣的顏色密切相關(guān),其顏色可在大氣散射光照顏色的基礎(chǔ)上混合計(jì)算。在式(7)的基礎(chǔ)上,便有
Colorbase=T(x,x0)·Colorsun
(15)
其中Colorsun表示陽(yáng)光的顏色,在仿真中用來(lái)模擬一天不同時(shí)刻的陽(yáng)光光照的顏色變化。
考慮到霧霾的顏色區(qū)別,在上述結(jié)果中還需混合一個(gè)顏色使霧與霾的效果在仿真場(chǎng)景中予以區(qū)分,即
Colorfinal=α·Colorfog/haze+(1-α)·Colorbase
(16)
其中,α合系數(shù)。
通過(guò)以上計(jì)算,能夠得到較為逼真的靜態(tài)霧霾的渲染效果,而在實(shí)際飛行仿真應(yīng)用中,由于飛機(jī)高速運(yùn)動(dòng)以及風(fēng)速的影響,霧并非是靜態(tài)的,其密度是不均勻的,且能隨時(shí)間變換。本文采用柏林噪聲(Perlin Noise)[5]來(lái)實(shí)現(xiàn)動(dòng)態(tài)霧效。
由于飛行仿真是在三維空間中進(jìn)行的,為模擬霧霾的動(dòng)態(tài)效果,理論上霧霾密度是可能在三個(gè)維度方向上均發(fā)生變化的。而實(shí)際過(guò)程中飛機(jī)的飛行高度變化是十分緩慢的,因此,動(dòng)態(tài)變化效果只需考慮水平兩個(gè)維度的效果變化即可。因此,可將柏林噪聲以二維紋理的方式讀入即可。
為避免出現(xiàn)動(dòng)態(tài)效果變化過(guò)快出現(xiàn)閃爍等走樣問(wèn)題,在笛卡爾坐標(biāo)系下,應(yīng)根據(jù)世界坐標(biāo)系中的(x,y)作為紋理坐標(biāo)以循環(huán)取余的方式讀取噪聲紋理。由于本文場(chǎng)景所采用的坐標(biāo)系為球坐標(biāo)系,為簡(jiǎn)便,可直接使用經(jīng)緯值代替(x,y)進(jìn)行紋理取值。在飛機(jī)飛行速度的限制下,球坐標(biāo)于笛卡爾坐標(biāo)系間的誤差是可忽略不計(jì)的。最后生成的噪聲為一個(gè)(0,1)間的浮點(diǎn)值,將其與霧霾密度相乘,便可表現(xiàn)出密度變化的效果。
雖然場(chǎng)景渲染是根據(jù)大氣散射物理模型計(jì)算出來(lái)的,最終由投影顯示設(shè)備輸出的視景畫(huà)面與真實(shí)場(chǎng)景效果仍存在一定差距。在真實(shí)的室外場(chǎng)景中,由于自然光的亮度范圍較大,人眼對(duì)的不同光照強(qiáng)度的視覺(jué)效果感知十分敏感。如同一場(chǎng)景在晴天和陰天時(shí)的視覺(jué)效果是截然不同的。而由于顯示設(shè)備的局限性,是無(wú)法直接模擬這樣的視覺(jué)效果差異。
為解決上述問(wèn)題,本文使用高動(dòng)態(tài)范圍(HDR)技術(shù)對(duì)渲染畫(huà)面進(jìn)行處理。高動(dòng)態(tài)范圍的實(shí)現(xiàn)原理簡(jiǎn)單說(shuō),是使場(chǎng)景中亮的地方更亮,暗的地方更暗。這樣則在有限的亮度范圍內(nèi),提升畫(huà)面的對(duì)比度。設(shè)ColorHDR為渲染計(jì)算后的像素顏色,則有
(17)
其中c=0.4Colororiginal。
圖3給出了高動(dòng)態(tài)范圍圖像優(yōu)化前后的場(chǎng)景渲染效果對(duì)比。針對(duì)陰天的室外場(chǎng)景,左圖效果過(guò)于明亮,效果失真;而右圖在優(yōu)化后,整體亮度趨于均衡,更能準(zhǔn)確反映真實(shí)場(chǎng)景的效果。
圖3 高動(dòng)態(tài)范圍圖像優(yōu)化前后效果對(duì)比
實(shí)驗(yàn)硬件配置為:CPU Intel Core i7-2600K 3.4GHz,8.00GB RAM,NVIDIA GeForce GTX 590顯卡;軟件環(huán)境為:Windows 7 64位旗艦版,Visual Studio 2012,OpenGL 4.3,著色器語(yǔ)言為GLSL。
首先,為了測(cè)試本章渲染方法的效率和穩(wěn)定性,選取我國(guó)某山區(qū)復(fù)雜地形區(qū)域的場(chǎng)景進(jìn)行模擬飛行漫游,統(tǒng)計(jì)使用本章渲染方法前后的幀率,并進(jìn)行比較;其次,針對(duì)陸地場(chǎng)景,在飛行漫游中觀察和比較不同時(shí)刻、不同地點(diǎn)的大氣散射效果以及低能見(jiàn)度天氣的效果;最后,在不同能見(jiàn)度和不同視點(diǎn)高度條件下觀察霧的渲染效果。
5.2.1 渲染方法的效率與穩(wěn)定性
模擬飛行漫游路徑如圖4所示。
圖4 實(shí)驗(yàn)漫游路徑
圖5為利用本文場(chǎng)景建模方法開(kāi)啟渲染效果前后的幀率對(duì)比圖。
圖5 場(chǎng)景渲染幀率比較
由實(shí)驗(yàn)結(jié)果可知,本文渲染方法對(duì)最終渲染幀率的影響非常低,可以忽略不計(jì)。這是由于本文方法是將場(chǎng)景作為整體進(jìn)行渲染計(jì)算的,因此與場(chǎng)景復(fù)雜度無(wú)關(guān)。此外,由于復(fù)雜的大氣散射模型計(jì)算是預(yù)先進(jìn)行的,在實(shí)時(shí)渲染時(shí)只需進(jìn)行紋理查找操作和少量的GPU著色計(jì)算,解決了場(chǎng)景渲染實(shí)時(shí)性與逼真度間的矛盾。
5.2.2 渲染結(jié)果
圖6給出了開(kāi)啟大氣散射與關(guān)閉大氣散射的實(shí)際效果對(duì)比圖。由圖看出,開(kāi)啟大氣散射的場(chǎng)景模擬圖像明顯更加真實(shí)。
圖6 大氣散射效果對(duì)比圖
圖7給出了霧和霾的渲染效果區(qū)別。
圖7 霧和霾的渲染效果對(duì)比圖
圖8和圖9分別給出地面和空中不同能見(jiàn)度下霧的渲染效果。
圖8 地面不同能見(jiàn)度的霧效渲染結(jié)果
圖9 空中不同能見(jiàn)度的霧效渲染結(jié)果
本文首先針對(duì)航空仿真的場(chǎng)景數(shù)據(jù)系統(tǒng)資源占用量大、渲染效率低的問(wèn)題,提出了一種高效的渲染優(yōu)化方法,其次提出了一種高效穩(wěn)定的大氣散射渲染方法,解決了航空仿真對(duì)場(chǎng)景渲染實(shí)時(shí)性與逼真度兼顧要求的問(wèn)題。該方法能將場(chǎng)景作為一個(gè)整體進(jìn)行基于真實(shí)物理模型的渲染,效果逼真,幀率穩(wěn)定,并且與場(chǎng)景復(fù)雜度無(wú)關(guān),適用于對(duì)場(chǎng)景分辨率較高的航空仿真場(chǎng)景實(shí)時(shí)渲染。
本文的下一步研究方向是航空視景仿真的另一個(gè)重要仿真對(duì)象:高真實(shí)感云的繪制渲染。