吳巍屹 古 平 劉 潔 劉 彬
(陸軍工程大學(xué)石家莊校區(qū) 石家莊 050091)
自然景物建模仿真是計算機圖形學(xué)重要研究方向之一,作為自然景觀最為常見的云景模擬也越發(fā)具有挑戰(zhàn)性,對于增強虛擬現(xiàn)實場景真實感和飛行模擬視景仿真具有重要作用。
在3D虛擬環(huán)境中,兩個領(lǐng)域的工作非常重要:云的建模和繪制。云的建模是處理用來在計算機中顯現(xiàn)云的數(shù)據(jù)并掌管產(chǎn)生和組織這些數(shù)據(jù)的任務(wù)。1985年,Geoffrey提出將云紋理映射到本體為橢球體模型進而生成三維云圖,開創(chuàng)了一種使用噪聲擾動來模擬復(fù)雜物體體過程的建模方法,但實驗證明這種方法難以生成較強真實感的流動圖像[1];Nishita等提出了分形建模靜態(tài)精細云的方法[2];Yeshinori等于2000年提出細胞自動機建模方法用于產(chǎn)生真實感較強云圖形,但因組元及變化規(guī)則略微簡單致使云狀態(tài)變化不連續(xù)[3];Matthias Unbes?cheiden利用粒子系統(tǒng)模擬不規(guī)則物體的突出優(yōu)勢,使用幾何體物元數(shù)據(jù)庫來表示物體并動態(tài)控制粒子運動、位置、產(chǎn)生和消亡若干狀態(tài)[4]。諸如云、火、雪、雨等自然界不規(guī)則物體都可由粒子系統(tǒng)實現(xiàn)[5~8]。
繪制云同樣也是困難的課題,原因在于真實的光照投影需要沿路穿過體云所涉及到視覺屬性的綜合效果,此外還要摻入介質(zhì)中復(fù)雜光的散射、云的自投影等。先前的工作已試圖在不同精確度和復(fù)雜度標準上對云的自然屬性近似化,進而使用這些近似模型對云的圖象進行繪制。Blinn引入密度模型合成仿真視景,他提出使用同型介質(zhì)并融入低反照率[9],實現(xiàn)單一散射逼真光照;Kajiya和Von Herzen拓展了Blinn的方法使用光線追蹤體數(shù)據(jù)來進行單一和多向的散射[10];Nishita引入對球形光照近似和繪制技術(shù)來說明多重各向異性散射[11]。
實現(xiàn)逼真云模擬及其多源光照投影會面臨計算復(fù)雜且繪制困難的問題,這一點極大影響了實時仿真的效率。所以,本文在傳統(tǒng)粒子系統(tǒng)理論基礎(chǔ)之上,優(yōu)化粒子系統(tǒng)結(jié)構(gòu)設(shè)計,引入偽粒子系統(tǒng)思想,結(jié)合多向散射光照模型,改進各向異性散射參數(shù)設(shè)置,共同達到云形逼真、光照真實。算法力求簡單、高效,以滿足實時顯示的需要。
粒子云系統(tǒng)由三部分組成:粒子、發(fā)射器、發(fā)射控制器。
L是發(fā)射器位置,S是發(fā)射器對應(yīng)粒子運動方程,ID是對應(yīng)發(fā)射器編號,PE={P1,P2,P3,…,Pm}代表發(fā)射粒子屬性。粒子定義為
(pi.x,pi.y,pi.z)是粒子的位置坐標,PKi={pi.P1,pi.P2,…,pi.Pm)是該粒子一系列初始屬性,如生存期、初始速度、初始加速度、初始顏色、透明度、標志位等。發(fā)射控制器EC使用隊列來存儲ID并動態(tài)分配指針變量指向隊首。在系統(tǒng)時間周期內(nèi)指針隨意移動并遵循下式:
式中:P為指向隊列的指針,對其初始化指向0號發(fā)射器,rand()返回任意隨機數(shù),h為發(fā)射器個數(shù)。通過指針的隨機移動可以達到某時間段內(nèi)發(fā)射器的任意選取,而不同發(fā)射器對應(yīng)不同的粒子運動方程,則可以繪制不同形態(tài)云圖以滿足隨時間變化云形隨機轉(zhuǎn)變的真實感。
使用粒子系統(tǒng)模擬“流體”性質(zhì)的不規(guī)則物體無疑是成功的,其優(yōu)點在于可以利用非常簡單的體素來構(gòu)造復(fù)雜的物體,然而不足之處就是計算量和存儲量非常巨大。偽粒子系統(tǒng)利用了粒子具有豐富動態(tài)屬性的性質(zhì),給圖元指定動態(tài)的、具有Alp值的紋理圖片,對于每一幀(或每幾幀),按照時間順序更換紋理圖片進而反映某個自然現(xiàn)象的整體過程。
本文在粒子系統(tǒng)之上根據(jù)光照模型計算相應(yīng)的云粒子紋理并存于緩存,為降低實現(xiàn)代價,采用偽粒子系統(tǒng),在不同時間段采用不同紋理圖片并按一定時間延遲動態(tài)改變,最終完成云的渲染仿真。
引入偽粒子系統(tǒng)算法生成云圖像的基本步驟如下。
第一步,初始化云粒子;
第二步,賦予云粒子初始屬性,其中新粒子運動軌跡依隨機選取的發(fā)射器所指定;
第三步,根據(jù)改進的光照模型計算云粒子的顏色、大小和透明度(Alp值)等參數(shù)屬性;根據(jù)運動情況更新粒子位置和速度;
第四步,計算不同條件下的云粒子紋理;
第五步,根據(jù)一定的時間延遲動態(tài)地更換粒子的紋理;
第六步,繪制由有生命的粒子組成的圖像。
整個系統(tǒng)組織如圖1所示。
圖1 系統(tǒng)組織圖
在現(xiàn)實世界中,光照明效果包括反射、透射和自投影等。自然環(huán)境中照射云的光,主要來自太陽并可大致認為是有一定方向的平行光,云吸收少量能量使得穿透粒子光輻射強度減弱,進而產(chǎn)生陰影。此外,數(shù)以萬計的水滴云粒子都會經(jīng)理多次反射或散射(Multiple Scattering),經(jīng)過云層再進入人眼睛的光對云的外貌也有變化。一副精確顯現(xiàn)的云圖需要刻畫光在云內(nèi)部的多重散射和映像到視點后的云的明暗,如圖2。這里選用Harris[12]的近似光照模型來模擬這一過程,即在預(yù)處理過程計算每個粒子的光照強度、粒子的顏色值、透明度并存于緩存;在實時運行繪制過程中結(jié)合視點的狀態(tài)函數(shù)繪制粒子。
圖2 粒子云的光照模型
如圖2,據(jù)Harris的預(yù)處理算法,設(shè)定粒子的所有方向的散射光主要集中在正入射方向內(nèi)很小的立體角α。將粒子云中所有粒子沿光照方向以距離升序來排序:在粒子云外任取一點做虛擬光源并沿光照方向做直線穿過云中心C,不在這條直線的粒子(如②、③、④號粒子)計算其中心到光源的距離投影并進行排序。排序可有效確定粒子陰影渲染的順序,實現(xiàn)后續(xù)添加粒子在區(qū)域陰影上應(yīng)比原來陰影加深。則當前粒子的光強顏色表示為
其中αk是粒子反照率,τk是該粒子的光學(xué)深度,ik是平均強度,α是散射的立體角,是沿光照方向多向散射的狀態(tài)函數(shù)。將粒子的顏色值和透明度記入緩存以待后期實時繪制。
為了提高后期的繪制效率,減輕系統(tǒng)負荷透支現(xiàn)象,這里利用人眼視覺緩沖及幀間相關(guān)性來對光照模型加以簡約優(yōu)化,提出了一種簡約光照強度替代方法,基本思想如下:由于云粒子數(shù)以萬計,如果逐一對其光照強度進行計算可能出現(xiàn)象素透支,而相鄰緊密粒子間的光強差距不大,如圖2所示,粒子V1、V2無限接近則所受光強基本相同,則V2所受的光強顏色值就可由V1替代,后期渲染時就可利用V1的紋理,不必重新繪制,大大減輕了幀存負荷并節(jié)省了時間。
設(shè)重新計算光強的變化轉(zhuǎn)角是φmax,φ是云粒子中心C和兩個臨近粒子的矢量夾角,如圖2矢量和分別是他們的單位向量,φ是的夾角,粒子間可以替代光照的條件是:
將這一替代方法可反復(fù)使用在光照方向直線上或粒子投影上,設(shè)再次計算光照最大判別距離為Dmax,則可以替代光照的條件是:
其中Dist(C,V)表示的是云中心C和任意粒子之間的距離或投影距離。
此外,為了便于減少重復(fù)對比粒子間光照相似度,本文在粒子結(jié)構(gòu)化設(shè)計時在粒子的屬性中添加一個標志位和替代單元,如果后序粒子可以使用前面粒子的光照顏色值,則將該粒子的標志位置為1并在替代單元中寫入被替代粒子的序號。
顏色、透明度是從數(shù)量上對光的散射和吸收予以描述,但未對散射的方向性進行分析。狀態(tài)函數(shù)PF(θ)是來確定光照量從入射方向被散射至射出方向的衰變程度,函數(shù)首先進行規(guī)格化,代表著不同粒子不同散射的可能性分布。
狀態(tài)函數(shù)的應(yīng)用主要在以下兩方面:一是在預(yù)處理過程確定前序粒子對后序粒子光照的散射程度;二是確定視點方向與光照方向不同交角的分布概率(如圖2中的θ),視點接受粒子的光照強度與θ有關(guān)。狀態(tài)函數(shù)的集中表現(xiàn)就是產(chǎn)生云內(nèi)部自投影(self-shadow)和云邊金色環(huán)襯的景象[13~15]。
常用狀態(tài)函數(shù)運用了瑞利狀態(tài)函數(shù)(Rayleigh Phase Function):
其中θ是交角,0≤θ≤2π。但此函數(shù)只能描繪各向同性散射(Isotropic Scattering),且不能表現(xiàn)背光方向光照強度的特點。本文在它基礎(chǔ)上使用了一種改進的狀態(tài)函數(shù)如下:
其中g(shù)是可以隨機調(diào)節(jié)的參數(shù),-1<g<1,g的不同可以實現(xiàn)相同散射角下散射強度不同,也就是達到了散射光照的各向異性性效果(anisotropic)。預(yù)處理時θ取從光照正向到逆向之間的任意角度;在實時仿真時θ取沿視點方向和光照方向之間的夾角。
改進的狀態(tài)函數(shù)實現(xiàn)了在相同光照下,不同角度θ的變化,云粒子有不同的光照強度,順光(g>0)看云顯得更明亮,而背光方向(g<0)上則要光照相對暗一些,使得云的立體感油然而生。
上述算法可在PC端使用標準OpenGL圖形庫具體實現(xiàn)。實驗仿真空間為32*32*16,云粒子半徑選為4.0。另外,從數(shù)值上對簡約光照替代方法與傳統(tǒng)的光照方法從效率上進行了對比,可看出本文方法的有效性,效果見圖3。仿真實驗分別基于三種層云、團云、光照云效果進行了模擬,效果較為明顯,見圖4、圖5、圖6。實驗表明:該模型仿真繪制生成的云形態(tài)逼真、具有較為真實的光照散射效果,并基本滿足仿真的實時性要求。
圖3 簡約光照替代方法與傳統(tǒng)方法性能比較
圖4 層云
圖5 團云
圖6 多向散射光照云
構(gòu)建了一種新的模擬云粒子系統(tǒng)的結(jié)構(gòu)方法,對粒子、發(fā)射器及控制器進行了詳細研究,通過狀態(tài)發(fā)射器的隨機選擇使粒子按相應(yīng)運動方程運動并動態(tài)改變云形輪廓;采用光照替代簡約方法和改進的散射狀態(tài)函數(shù)對云的光照模型進行了詳細描述與設(shè)計,以實現(xiàn)光照方向的多向散射和視點方向的各向異性散射;最后結(jié)合紋理映射技術(shù),利用偽粒子系統(tǒng),以一定時間延遲更換紋理圖片,在提高效率的基礎(chǔ)上實現(xiàn)了光照下多態(tài)云的模擬和繪制。