覃海寧
(廣西經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院 信息工程系,廣西 南寧 530021)
?
基于GPU紋理查找的彩虹實(shí)時(shí)渲染技術(shù)*
覃海寧
(廣西經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院 信息工程系,廣西 南寧 530021)
在實(shí)時(shí)應(yīng)用中渲染彩虹不容易,要適應(yīng)環(huán)境變化又要有合理的真實(shí)感.文章在Lee圖紋理查找表方法的基礎(chǔ)上,通過GPU加速彩虹渲染效率,避免了直接應(yīng)用空氣中光的散射方程計(jì)算彩虹像素值,取得實(shí)時(shí)逼真的效果,同時(shí)將該方法應(yīng)用于副虹生成、霧虹生成、潮濕空氣等,拓展了它的應(yīng)用范圍.
GPU編程;彩虹生成;Lee圖;紋理查找
彩虹的實(shí)時(shí)真實(shí)感模擬在動(dòng)漫游戲、自然災(zāi)害預(yù)防和救援、科學(xué)計(jì)算可視化、虛擬現(xiàn)實(shí)等領(lǐng)域均有應(yīng)用.這種大氣光學(xué)現(xiàn)象是由大量雨滴同時(shí)對(duì)太陽光的折射及散射生成的.圖形學(xué)光線傳播過程模擬方法中,最重要的是光線跟蹤和輻射度方法[1].但這些方法不適合彩虹模擬,因?yàn)橛甑晤w粒對(duì)光能傳輸?shù)奶厥庥绊憶]有考慮進(jìn)去,也就是說傳統(tǒng)的圖形學(xué)建模和繪制方法難以對(duì)其逼真模擬.Musgrave在光的折射與色散理論基礎(chǔ)上,提出了適合利用光線跟蹤及 Z-Buffer 技術(shù)繪制的彩虹生成模型,但計(jì)算量巨大、生成速度慢[2].Walter根據(jù)彩虹光線散射角度,利用Mie散射查找表方法進(jìn)行采樣,繪制出逼真的彩虹,但仍達(dá)不到實(shí)時(shí)繪制的要求[3].Brewer等根據(jù)空氣中的光學(xué)理論,計(jì)算出適應(yīng)不同半徑水滴的Lee圖作為查找表,生成了真實(shí)感較強(qiáng)的彩虹場(chǎng)景,這種方法大量用于游戲開發(fā)中[4].筆者則在Lee圖紋理查找表技術(shù)[4]的基礎(chǔ)上,利用GPU編程進(jìn)一步加速彩虹渲染,并討論該方法如何與場(chǎng)景進(jìn)一步結(jié)合,考慮副虹生成、霧虹生成、潮濕空氣等問題,拓展其應(yīng)用范圍.
當(dāng)陽光照射到半空中的雨點(diǎn),光線被折射及反射,在天空上形成拱形的七彩光譜,這種光學(xué)現(xiàn)象稱為彩虹.如圖1所示,陽光進(jìn)入和退出球形水滴時(shí),不同波長(zhǎng)的光(紅、橙、黃、綠、藍(lán)和紫)經(jīng)過不同角度折射、反射、再折射進(jìn)入觀察者眼睛.紫色光折射角度最小從底部出來, 紅色光則從彩虹頂部出來.即使同一個(gè)彩虹,不同位置看到效果也不同,可將其看作以眼睛為焦點(diǎn)的錐形光.
圖1 彩虹成因
觀察者眼中的色彩取決于哪種顏色被恰好折射到達(dá)觀察者的眼睛,這依賴于:進(jìn)入水滴的光線位置和角度、觀察者的位置、水滴的半徑和位置.如圖2所示,觀察者眼中的顏色可以通過進(jìn)入水滴光線與視線兩者夾角和水滴半徑為變量的方程式來確定,散射角度θ為光線被向后彎曲到觀察者眼睛的角度.
圖2 光線與視線的夾角
以散射角度θ與水滴半徑為變量的函數(shù)就是RaymondLee提出空氣中光的散射方程[6].以之為基礎(chǔ),使用PhillipLavin創(chuàng)建的MiePlot開源程序[4],可以預(yù)計(jì)算光散射方程生成Lee圖(見圖3).Lee圖X軸表示水滴半徑,Y軸表示光線向后彎曲的夾角即散射角度θ,二者共同索引一幅二維圖像,圖像中像素顏色可以作為查找紋理描述彩虹任意狀態(tài)下的顏色.
圖3 MiePlot生成Lee圖
渲染彩虹的實(shí)質(zhì)是將其繪制在與屏幕平行四邊形上,關(guān)鍵是彩虹像素點(diǎn)的顏色如何確定.分析Lee圖紋理查找法,Lee圖X軸代表的水滴半徑由程序直接指定,Y軸代表的散射角度θ,一條邊太陽光是平行垂直于地面入射角保持不變不難取得,另一條邊視向量的計(jì)算是難點(diǎn).彩虹渲染過程涉及GPU頂點(diǎn)著色器與像素著色器編程.
視向量從觀察者指向水滴,由GPU頂點(diǎn)著色器計(jì)算,只要確定了與屏幕平行的四邊形中各頂點(diǎn)的視向量,像素視向量就可以由網(wǎng)絡(luò)三角形頂點(diǎn)均勻夾取來獲得.頂點(diǎn)視向量計(jì)算必須把屏幕空間轉(zhuǎn)換到性質(zhì)相同的視裁減空間中.具體是用逆投影矩陣變換,找到視空間中平行四邊形的頂點(diǎn)位置,視空間觀察點(diǎn)位置為(0,0,0),兩點(diǎn)相減即可得每個(gè)頂點(diǎn)的非標(biāo)準(zhǔn)化視向量,再對(duì)其歸一化.同樣,用視圖矩陣可以計(jì)算垂直于場(chǎng)景的光線向量在視空間的值.四邊形中每個(gè)像素都得到歸一化的視向量和光線向量后,就可以點(diǎn)積求散射角θ的余弦值.
平行屏幕四邊形中像素顏色在GPU像素著色器計(jì)算.圖形學(xué)中紋理貼圖必須將絕對(duì)紋理坐標(biāo)轉(zhuǎn)換成相對(duì)紋理坐標(biāo),其值范圍為[0,1].頂點(diǎn)著色器計(jì)算的散射角θ的余弦值,值范圍為[1, -1],當(dāng)角度在0到90度之間時(shí),值范圍剛好為[1,0],當(dāng)角度在90度和180度之間時(shí),余弦值范圍為[0, -1],需鏡像映射余弦值則剛好和紋理坐標(biāo)范圍一致.再通過設(shè)置硬件紋理夾取索引Lee圖,就可以查詢彩虹任意點(diǎn)紋理顏色了.
4.1副虹渲染
自然界有時(shí)會(huì)生成雙彩虹,其副虹是光線在水滴內(nèi)部進(jìn)行兩次反射產(chǎn)生的,如圖4所示.本文方法同樣適用于雙彩虹的效果,只要用MiePlot開源程序重新生成副虹Lee圖,與主虹Lee圖同時(shí)應(yīng)用即可.圖5為瀑布水霧雙彩虹效果展示,可見副虹比主虹顏色淺,色彩與主虹相反,紫色在頂部,而紅色在底部,與真實(shí)效果一致.
圖4 副虹成因
圖5 瀑布水霧中的雙彩虹
4.2霧虹生成
不同天氣,生成虹的水滴半徑各不相同,比如霧虹的水滴半徑就比彩虹的大.本文方法同樣適用于渲染霧虹,為了實(shí)現(xiàn)更鮮亮的顏色,將MiePlot開源程序生成的查找紋理Lee圖手工修飾成圖6,使Y軸散射角范圍為[180,90],X軸水滴半徑范圍為[5,800]微米,色彩具有了更廣泛的頻帶,能夠產(chǎn)生逼真霧虹效果.
圖6 霧虹的增強(qiáng)Lee圖
4.3可控空氣濕度
空氣中的水分含量也決定著彩虹的質(zhì)量.水分含量高則有更多的水滴折射和反射,更多的彩色進(jìn)入到觀者眼睛產(chǎn)生明亮的彩虹,反之則產(chǎn)生暗淡的彩虹.渲染時(shí),準(zhǔn)備單獨(dú)的濕潤(rùn)感紋理,使用紅色分量表示水分含量.潮濕因子范圍為[0,1],彩虹像素顏色與潮濕因子相乘,alpha分量可將水分呈現(xiàn)于主天空盒,濕度就可以影響彩虹淡入淡出.
圖7為本文實(shí)驗(yàn)結(jié)果,左上角圖展示平行于屏幕四邊形的原彩虹;頂部中間圖展示潮濕紋理,場(chǎng)景物體為黑色,云層以灰階呈現(xiàn);右上角圖展示潮濕紋理疊加彩虹的顏色;底部左圖顯示沒有彩虹場(chǎng)景;底部中圖場(chǎng)景結(jié)合了彩虹.以往游戲中渲染彩虹,1600×1200分辨率屏幕彩虹不難被實(shí)時(shí)生成.筆者依據(jù)Mie理論與光散射方程,通過GPU編程實(shí)現(xiàn)Lee圖查找紋理法彩虹生成,實(shí)驗(yàn)結(jié)果執(zhí)行花費(fèi)很低,能保持在每秒80幀以上的渲染效率,再通過進(jìn)一步討論的副虹、霧虹和潮濕空氣中彩虹的應(yīng)用拓展了方法的應(yīng)用場(chǎng)合,證明本文彩虹渲染方法的有效性,有很高的實(shí)用價(jià)值.如果場(chǎng)景變化不大,可進(jìn)一步預(yù)先計(jì)算彩虹紋理優(yōu)化程序,將其渲染成立方體貼圖,運(yùn)行時(shí)簡(jiǎn)單地映射彩虹立方體紋理到天空盒,與潮濕紋理混合即可.這種方式只要水滴半徑不改變,立方體貼圖就不需要改變.當(dāng)陽光方向變化時(shí),可以旋轉(zhuǎn)的彩虹天空盒,使彩虹仍然保持在逆光位置的中間.
圖7 彩虹渲染結(jié)果
[1]彭群生,鮑虎軍,金小剛.計(jì)算機(jī)真實(shí)感圖形的算法基礎(chǔ)[M].科學(xué)出版社,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) .
[責(zé)任編輯蘇琴]
[責(zé)任校對(duì)黃祖賓]
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(xué)技術(shù)研究項(xiàng)目(項(xiàng)目編號(hào)KY2015YB446).
覃海寧(1979-),女,廣西桂平人,廣西經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院副教授、工程師,研究方向:實(shí)時(shí)圖形學(xué).
TN911. 3
A
1673-8462(2016)02-0077-04