覃海寧
(廣西經(jīng)貿(mào)職業(yè)技術(shù)學院 信息工程系,廣西 南寧 530021)
?
基于GPU紋理查找的彩虹實時渲染技術(shù)*
覃海寧
(廣西經(jīng)貿(mào)職業(yè)技術(shù)學院 信息工程系,廣西 南寧 530021)
在實時應用中渲染彩虹不容易,要適應環(huán)境變化又要有合理的真實感.文章在Lee圖紋理查找表方法的基礎(chǔ)上,通過GPU加速彩虹渲染效率,避免了直接應用空氣中光的散射方程計算彩虹像素值,取得實時逼真的效果,同時將該方法應用于副虹生成、霧虹生成、潮濕空氣等,拓展了它的應用范圍.
GPU編程;彩虹生成;Lee圖;紋理查找
彩虹的實時真實感模擬在動漫游戲、自然災害預防和救援、科學計算可視化、虛擬現(xiàn)實等領(lǐng)域均有應用.這種大氣光學現(xiàn)象是由大量雨滴同時對太陽光的折射及散射生成的.圖形學光線傳播過程模擬方法中,最重要的是光線跟蹤和輻射度方法[1].但這些方法不適合彩虹模擬,因為雨滴顆粒對光能傳輸?shù)奶厥庥绊憶]有考慮進去,也就是說傳統(tǒng)的圖形學建模和繪制方法難以對其逼真模擬.Musgrave在光的折射與色散理論基礎(chǔ)上,提出了適合利用光線跟蹤及 Z-Buffer 技術(shù)繪制的彩虹生成模型,但計算量巨大、生成速度慢[2].Walter根據(jù)彩虹光線散射角度,利用Mie散射查找表方法進行采樣,繪制出逼真的彩虹,但仍達不到實時繪制的要求[3].Brewer等根據(jù)空氣中的光學理論,計算出適應不同半徑水滴的Lee圖作為查找表,生成了真實感較強的彩虹場景,這種方法大量用于游戲開發(fā)中[4].筆者則在Lee圖紋理查找表技術(shù)[4]的基礎(chǔ)上,利用GPU編程進一步加速彩虹渲染,并討論該方法如何與場景進一步結(jié)合,考慮副虹生成、霧虹生成、潮濕空氣等問題,拓展其應用范圍.
當陽光照射到半空中的雨點,光線被折射及反射,在天空上形成拱形的七彩光譜,這種光學現(xiàn)象稱為彩虹.如圖1所示,陽光進入和退出球形水滴時,不同波長的光(紅、橙、黃、綠、藍和紫)經(jīng)過不同角度折射、反射、再折射進入觀察者眼睛.紫色光折射角度最小從底部出來, 紅色光則從彩虹頂部出來.即使同一個彩虹,不同位置看到效果也不同,可將其看作以眼睛為焦點的錐形光.
圖1 彩虹成因
觀察者眼中的色彩取決于哪種顏色被恰好折射到達觀察者的眼睛,這依賴于:進入水滴的光線位置和角度、觀察者的位置、水滴的半徑和位置.如圖2所示,觀察者眼中的顏色可以通過進入水滴光線與視線兩者夾角和水滴半徑為變量的方程式來確定,散射角度θ為光線被向后彎曲到觀察者眼睛的角度.
圖2 光線與視線的夾角
以散射角度θ與水滴半徑為變量的函數(shù)就是RaymondLee提出空氣中光的散射方程[6].以之為基礎(chǔ),使用PhillipLavin創(chuàng)建的MiePlot開源程序[4],可以預計算光散射方程生成Lee圖(見圖3).Lee圖X軸表示水滴半徑,Y軸表示光線向后彎曲的夾角即散射角度θ,二者共同索引一幅二維圖像,圖像中像素顏色可以作為查找紋理描述彩虹任意狀態(tài)下的顏色.
圖3 MiePlot生成Lee圖
渲染彩虹的實質(zhì)是將其繪制在與屏幕平行四邊形上,關(guān)鍵是彩虹像素點的顏色如何確定.分析Lee圖紋理查找法,Lee圖X軸代表的水滴半徑由程序直接指定,Y軸代表的散射角度θ,一條邊太陽光是平行垂直于地面入射角保持不變不難取得,另一條邊視向量的計算是難點.彩虹渲染過程涉及GPU頂點著色器與像素著色器編程.
視向量從觀察者指向水滴,由GPU頂點著色器計算,只要確定了與屏幕平行的四邊形中各頂點的視向量,像素視向量就可以由網(wǎng)絡三角形頂點均勻夾取來獲得.頂點視向量計算必須把屏幕空間轉(zhuǎn)換到性質(zhì)相同的視裁減空間中.具體是用逆投影矩陣變換,找到視空間中平行四邊形的頂點位置,視空間觀察點位置為(0,0,0),兩點相減即可得每個頂點的非標準化視向量,再對其歸一化.同樣,用視圖矩陣可以計算垂直于場景的光線向量在視空間的值.四邊形中每個像素都得到歸一化的視向量和光線向量后,就可以點積求散射角θ的余弦值.
平行屏幕四邊形中像素顏色在GPU像素著色器計算.圖形學中紋理貼圖必須將絕對紋理坐標轉(zhuǎn)換成相對紋理坐標,其值范圍為[0,1].頂點著色器計算的散射角θ的余弦值,值范圍為[1, -1],當角度在0到90度之間時,值范圍剛好為[1,0],當角度在90度和180度之間時,余弦值范圍為[0, -1],需鏡像映射余弦值則剛好和紋理坐標范圍一致.再通過設(shè)置硬件紋理夾取索引Lee圖,就可以查詢彩虹任意點紋理顏色了.
4.1副虹渲染
自然界有時會生成雙彩虹,其副虹是光線在水滴內(nèi)部進行兩次反射產(chǎn)生的,如圖4所示.本文方法同樣適用于雙彩虹的效果,只要用MiePlot開源程序重新生成副虹Lee圖,與主虹Lee圖同時應用即可.圖5為瀑布水霧雙彩虹效果展示,可見副虹比主虹顏色淺,色彩與主虹相反,紫色在頂部,而紅色在底部,與真實效果一致.
圖4 副虹成因
圖5 瀑布水霧中的雙彩虹
4.2霧虹生成
不同天氣,生成虹的水滴半徑各不相同,比如霧虹的水滴半徑就比彩虹的大.本文方法同樣適用于渲染霧虹,為了實現(xiàn)更鮮亮的顏色,將MiePlot開源程序生成的查找紋理Lee圖手工修飾成圖6,使Y軸散射角范圍為[180,90],X軸水滴半徑范圍為[5,800]微米,色彩具有了更廣泛的頻帶,能夠產(chǎn)生逼真霧虹效果.
圖6 霧虹的增強Lee圖
4.3可控空氣濕度
空氣中的水分含量也決定著彩虹的質(zhì)量.水分含量高則有更多的水滴折射和反射,更多的彩色進入到觀者眼睛產(chǎn)生明亮的彩虹,反之則產(chǎn)生暗淡的彩虹.渲染時,準備單獨的濕潤感紋理,使用紅色分量表示水分含量.潮濕因子范圍為[0,1],彩虹像素顏色與潮濕因子相乘,alpha分量可將水分呈現(xiàn)于主天空盒,濕度就可以影響彩虹淡入淡出.
圖7為本文實驗結(jié)果,左上角圖展示平行于屏幕四邊形的原彩虹;頂部中間圖展示潮濕紋理,場景物體為黑色,云層以灰階呈現(xiàn);右上角圖展示潮濕紋理疊加彩虹的顏色;底部左圖顯示沒有彩虹場景;底部中圖場景結(jié)合了彩虹.以往游戲中渲染彩虹,1600×1200分辨率屏幕彩虹不難被實時生成.筆者依據(jù)Mie理論與光散射方程,通過GPU編程實現(xiàn)Lee圖查找紋理法彩虹生成,實驗結(jié)果執(zhí)行花費很低,能保持在每秒80幀以上的渲染效率,再通過進一步討論的副虹、霧虹和潮濕空氣中彩虹的應用拓展了方法的應用場合,證明本文彩虹渲染方法的有效性,有很高的實用價值.如果場景變化不大,可進一步預先計算彩虹紋理優(yōu)化程序,將其渲染成立方體貼圖,運行時簡單地映射彩虹立方體紋理到天空盒,與潮濕紋理混合即可.這種方式只要水滴半徑不改變,立方體貼圖就不需要改變.當陽光方向變化時,可以旋轉(zhuǎn)的彩虹天空盒,使彩虹仍然保持在逆光位置的中間.
圖7 彩虹渲染結(jié)果
[1]彭群生,鮑虎軍,金小剛.計算機真實感圖形的算法基礎(chǔ)[M].科學出版社,1999.
[2] Musgrave F K. Prisms and rainbows: A dispersion model for computer graphics. Proceedings of Graphics Interface '89[J]. London, 1989: 227-234 .
[3] Walter B. Simulation and visualization of atmospheric light phenomena induced by light scattering[J].Systems Analysis Modeling Simulation, 2000, 42(2):289-298 .
[4] Brewer C. How to render a real rainbow. In: NVIDIA Technical Report[R]. Santa Clara, 2004: 88-102.
[5]Laven, P. The Optics of a Water Drop: Mie Scattering and the Debye Series[EB/OL]. Retrieved July 19, 2004. http://www.philiplaven.com/index1.html.
[6] Lee, Raymond L. Mie theory airy theory and the natural rainbow[J].Applied Optics, 37(9) .
[責任編輯蘇琴]
[責任校對黃祖賓]
Based GPU Acceleration Texture Lookup Real-time Rendering Techniques of Rainbow
QIN Hai-ning
(InformationEngineeringDepartmentofGuangxiEconomic&TradePolytechnic,Nanning530021,China)
Rendering rainbow in real-time applications is not easy, it is necessary to adapt environmental changes and have a reasonable sense of reality, but also to satisfy real-time requirements. In this paper, based on Mie scattering lookup table, using texture lookup method rainbow rendering efficiency by GPU-accelerating, avoiding the direct application of airy light scattering equation to calculate the screen pixel values obtained in real-time realism. The method can also adapt deputy Secondary rainbow, fogbow, moist air problems.
GPU Programming; Rainbow Generation; Lee Diagram; Texture Lookup Table
2016-03-10.
2015年度廣西高??茖W技術(shù)研究項目(項目編號KY2015YB446).
覃海寧(1979-),女,廣西桂平人,廣西經(jīng)貿(mào)職業(yè)技術(shù)學院副教授、工程師,研究方向:實時圖形學.
TN911. 3
A
1673-8462(2016)02-0077-04