許申益,蔣聰
(長春理工大學(xué)計算機科學(xué)技術(shù)學(xué)院,長春 130022)
基于光線跟蹤的焦散模擬生成算法
許申益,蔣聰
(長春理工大學(xué)計算機科學(xué)技術(shù)學(xué)院,長春 130022)
針對普通光線跟蹤無法繪制出焦散效果的情況,提出了基于光線跟蹤的焦散模擬生成算法。該算法首先從光源位置對場景進行繪制跟蹤并獲得焦散數(shù)據(jù),接著將焦散數(shù)據(jù)通過坐標變換投射到正常視點的屏幕中,并與正常視平面上原有的亮度值進行疊加,從而生成具有焦散效果的圖像,最后使用高斯濾波方法對圖形進行濾波處理獲得最終圖像。通過對比,焦散模擬生成算法比普通的光子映射方法在效果差別不大的情況下幀速率有了明顯的提高。實驗表明,基于光線跟蹤的焦散模擬生成算法可以逼真地繪制圖像,同時能達到較高的幀數(shù)率。
光線跟蹤;焦散;真實感;幀速率
焦散是在生活中常見的一種光學(xué)現(xiàn)象,它廣泛地存在于具有透明物體的場景中,在游泳池的水底和四周清澈的溪流水底散布的石頭上均能看到焦散現(xiàn)象。光線經(jīng)透明物體進行傳播時會發(fā)生折射,當這個透明物體的表面不平整時,光線經(jīng)二次折射后最終會在部分區(qū)域發(fā)生匯聚,這些匯聚區(qū)域由于接受的光能比周圍區(qū)域多,具有較高的亮度,從而形成了焦散效果。
焦散繪制在虛擬場景繪制、電影特效繪制、場景模擬、虛擬裝配等各種仿真領(lǐng)域有著廣泛的應(yīng)用需求。作為一種經(jīng)典的全局光照效果,焦散的逼真繪制對提升虛擬場景的真實性具有非常重要的意義。全局光照技術(shù)雖然可以實現(xiàn)焦散的逼真繪制,但由于全局光照算法所需的開銷非常大,因此傳統(tǒng)的全局光照算法往往只能用于離線的圖像渲染。
光子映射算法問世于20世紀90年代,是一種常用的全局光照算法,可以較好的模擬焦散、輝映(Bleeding)、間接光照等多種全局光照效果。光子映射方法是一種需要兩遍繪制的算法,第一遍從光源位置發(fā)射光子并跟蹤和記錄光子在場景中數(shù)次反射或折射的數(shù)據(jù),第二遍從視點位置進行繪制。在繪制某一個像素時,首先收集這個像素周圍某一范圍內(nèi)的所有光子,并對它們的值進行累加,得到這個像素點的顏色值。光子映射算法誕生后受到了廣泛的關(guān)注,很快成為一種主流的全局光照算法。
近年來,實時真實感圖形繪制是計算機圖形學(xué)研究的焦點。為了使繪制的圖像具有較高的真實性,可以采用光子映射的方法進行繪制,但由于光子映射需要發(fā)射大量的光子,這使得計算機的開銷大大增加,嚴重影響了圖像生成的速率。相比之下,光線跟蹤具有較高的速率,但由于光線跟蹤的光線是從相機位置出發(fā),向屏幕中的每個像素發(fā)出一條光線,接著對每條光線進行跟蹤并最終統(tǒng)計亮度,而焦散是光經(jīng)過折射或反射導(dǎo)致光線的集中某些區(qū)域而形成的亮斑,因此在正常的光線跟蹤的情況下無法形成焦散的效果。本文通過焦散模擬生成算法跟蹤經(jīng)過折射或者反射的光線,并記錄最終光線與場景最終交點的位置和該點的亮度值。然后將得到的結(jié)果經(jīng)過坐標變換后兩次遍歷所得數(shù)據(jù)對應(yīng)相同的場景位置,將這兩個結(jié)果組合后產(chǎn)生了具有焦散效果的圖像,同時具有較高的幀速率,最后通過濾波將圖像中存在的噪聲去除得到與光子映射下幾乎相同的效果。
對于焦散繪制效果的研究已經(jīng)有近30年的歷史了,由于計算機硬件計算能力的限制,早期的焦散繪制只能離線進行。其中較為經(jīng)典的焦散繪制算法主要有光束跟蹤和粒子跟蹤兩類。
在焦散效果的繪制方面,Jenson[1]首先提出并利用光子映射對焦散進行繪制,該方法首先從光源位置向場景中發(fā)射大量的光子,然后從視點位置對光子進行收集。但該方法如果想產(chǎn)生較逼真的焦散效果,就需要從光源發(fā)射數(shù)百萬個光子,而這些大量光子的跟蹤和收集需要大量的計算機資源,因此該方法明顯的缺陷是計算量太大。隨后,又有學(xué)者提出了基于CPU集群的路徑跟蹤繪制算法[2],該算法將經(jīng)典的路徑跟蹤算法做出了一定的改進,這雖然在某種程度上減輕了焦散效果繪制計算量較大的問題,但仍然很難實現(xiàn)焦散效果的實時交互式繪制,其中最主要受限的因素仍然是該方法在繪制時間和系統(tǒng)資源上開銷過大。后來Wand和Strafer[3]提出了基于接受體表面采樣的焦散繪制方法,該方法首先在可能形成焦散效果的漫反射物體表面采集一系列的點,然后對這些采樣點及其周圍的點進行繪制,最終模擬出焦散效果。該方法有一個明顯的缺點:隨著采樣點的不斷增加,算法的計算量也會隨之急劇增加,該方法任然不能實時地繪制出較真實的焦散效果。隨后Wyman等人[4]提出了基于預(yù)計算的焦散繪制方法,該方法首先將場景中初始的亮度值計算出來并存儲在一個容量較大的共享存儲器中,在繪制每一幀的過程中,直接從共享存儲器中獲取焦散信息,而不需要重復(fù)的計算焦散數(shù)據(jù)。該方法實現(xiàn)了實時地繪制出焦散效果,但它并不適用于動態(tài)場景下的焦散效果繪制,而且只支持可以采用預(yù)計算策略的三維場景繪制。最近Musawir A.Shah等人[5]提出了一種基于焦散圖映射的焦散繪制方法,該方法類似于陰影映射算法:需要先生成一個焦散圖,然后把焦散圖直接貼到相應(yīng)的三維場景中。該方法的優(yōu)點是繪制速度快,計算量少,但它是基于OpenGL圖形繪制流水線繪制的,并不能運用到光線跟蹤的算法中。
在國內(nèi),李帥等人[6]基于圖像空間的焦散實時逼真繪制算法研究。該算法將焦散的計算過程進行了分解并采用動態(tài)組織浮點紋理的方式將計算所需的幾何數(shù)據(jù)從幾何空間轉(zhuǎn)換到了圖像空間,可完全通過GPU編程實現(xiàn)實時逼真繪制。算法的主要優(yōu)點是適用于可變形物體,可模擬由物體雙面折射形成的焦散現(xiàn)象,算法效率受場景規(guī)模影響小并可方便地與陰影等繪制效果相結(jié)合。
2.1 算法原理
通過研究光線跟蹤算法的執(zhí)行過程可以發(fā)現(xiàn):在普通的光線跟蹤算法下是無法繪制出焦散效果的。這是由于光線是從視點位置發(fā)出的,當檢測到入射光線與漫反射面相交時,在交點處與光源所在的點用一條光線進行連接,如果光線穿過玻璃體,就直接把該點按處在陰影區(qū)處理,根本不會產(chǎn)生焦散效果[7]。
圖1 基于光線跟蹤的焦散效果生成原理圖
為了產(chǎn)生焦散效果,本文提出了基于光線跟蹤的焦散模擬生成算法,該算法總共分為四步:
第一步:在光源位置處對場景進行跟蹤繪制,以完成與焦散相關(guān)的數(shù)據(jù)收集。
首先對場景進行兩遍跟蹤繪制,第一遍時將相機放在光源位置,把光線透過透明物體最終與漫反射表面相交的亮度值記錄下來,形成只有焦散效果沒有場景焦斑圖;第二遍從正常視點進行跟蹤并得到在正常光線跟蹤繪制時的沒有焦散的圖像[8]。繪制場景的原理如圖1所示。
第二步:坐標系變換與透視投影
借助圖像我們可以分析出將上一步中產(chǎn)生的兩遍繪制的圖像進行合并后即可得到具有焦散效果的圖像,但是在繪制中收集到的圖像是在不同的坐標系下形成的,因此不能直接將它們合并。為了解決此問題,對第一遍形成的焦斑圖全部投射到正常視點屏幕上(透視變換),與正常視平面上原有的像素值進行疊加,從而產(chǎn)生焦散效果。由于這一步需要確定焦斑投射正常視平面后,焦斑到底位于哪一個像素上,因此,需要知道正常視平面每一個像素中心的坐標值。正常視點的相機位于世界坐標系中,正常視平面的朝向是任意的,在世界坐標系下,很難確定視平面上每個像素中心的坐標值。而透視投影是同一個坐標系下進行的,有必要把光線透過玻璃與漫反射表面的交點的空間位置坐標從世界坐標系下變換到正常視點的相機坐標系下。將兩遍繪制的圖像都處于一個世界坐標系之后,就可以實施透視變換。透視投影原理如圖2所示。而最終生成的焦斑圖如圖3所示。
圖2 透視原理圖
圖3 焦斑圖
第三步:圖像合成
在上一步中,從世界坐標系轉(zhuǎn)化到相機坐標系,然后根據(jù)相機在視點位置的一些參數(shù)進行了變換,使圖像對應(yīng)的位置相同。因此兩次遍歷生成的圖像的位置將會一一對應(yīng),直接將顏色值相加即可得到初始焦散圖像。
第四步:圖像濾波
由于光線跟蹤過程中生成的點都是離散的,這會使最終的可能圖像在圖像的邊緣部分存在銳化和走樣的情況,因此需要對最終的圖像進行高斯平滑濾波處理,主要原理是在計算某一點亮度值時將附近的亮度值進行加權(quán)求平均。
2.2 算法實現(xiàn)
本文的三維場景是通過OptiX光線跟蹤引擎繪制的[9]。OptiX是NVIDIA公司開發(fā)的一個基于CUDA架構(gòu)的、面向?qū)ο蟮?、通用的可編程并行渲染框架,其?nèi)核是對光線跟蹤算法的抽象[9]。OptiX程序有兩部分組成:主機API(host-based API)和CUDA C程序系統(tǒng)(CUDA C-based programming system)。開發(fā)語言是C、C++。
焦散效果生成算法如下:
第一步:在光源位置處對場景進行跟蹤繪制,以完成與焦散相關(guān)的數(shù)據(jù)收集。
完成這一步需要對主機端和設(shè)備端代碼進行如下處理:
(1)新建一個OptiX項目程序。在程序中創(chuàng)建的場景類,并繪制程序切入點(EntryPoint)的個數(shù)和光線類型均設(shè)定為3。為每個程序切入點綁定相應(yīng)的光線產(chǎn)生程序(或觸發(fā)程序)。例如第一個切入點綁定正常繪制場景所需要的光線產(chǎn)生程序;第二個切入點綁定在光源位置處采集焦散數(shù)據(jù)所需要的光線產(chǎn)生程序;第三個切入點綁定一個自定義的程序,用于坐標系變換、透視變換(用于確定漫反射表面上的焦斑投射到視平面后,交點在相機坐標系下的坐標值)、數(shù)據(jù)收集和平滑濾波。第一個切入點主要實現(xiàn)了對焦散數(shù)據(jù)進行采集;接著第二個切入點主要對焦散數(shù)據(jù)進行處理(坐標變換和濾波);最后一個切入點實現(xiàn)顏色疊加。而它們的光線類型分別為正常著色程序(Closest_Hit_Program)、陰影計算程序(Any_Hit_Shadow)、以及綁定焦散數(shù)據(jù)采集程序。
(2)在場景(InitScene)中設(shè)置在光源位置處的相機參數(shù),使相機與視平面中心的連線穿過透明物體的中心。為了減少計算量,設(shè)置適當?shù)囊晥鼋呛头直媛剩ū境绦虻姆直媛蕿?00×300),使該相機的視平面正好包括住透明物體。
(3)在程序中創(chuàng)建三個緩存,第一個用于存儲光源位置處相機對場景進行跟蹤繪制所返回的漫反射表面上的焦散亮度值。第二個緩存將只有透過玻璃體并入射到漫反射表面的那部分光線所返回的亮度數(shù)據(jù)寫入。第三個緩存用于存儲光線透過玻璃體與漫反射表面的交點在世界坐標系下的空間位置坐標。定義緩存的大小與最終顯示的圖像大小相同,它用來存儲從正常視點位置看到的焦斑圖。最后將相應(yīng)的緩存疊加就形成了最終圖像。
第二步:坐標系變換生成焦斑圖
這一步的主要目的是把采集到的焦散數(shù)據(jù)投射到正常的視點平面上顯示出來。做法是:把漫反射表面上的焦散亮斑全部投射到正常視點屏幕上[10](透視變換),與正常視平面上原有的像素值進行疊加,從而產(chǎn)生焦散效果。由于這一步需要確定焦斑投射到正常視平面后,焦斑到底位于哪一個像素上,因此,需要知道正常視平面每一個像素中心的坐標值。正常視點的相機位于世界坐標系中,正常視平面的朝向是任意的,在世界坐標系下,很難確定視平面上每個像素中心的坐標值。如果在相機坐標系中確定每個像素中心的坐標值將會非常容易,因為視平面就位于垂直于W軸,距離坐標原點為-|W|的平面上,再根據(jù)相機參數(shù)的值,即可確定每個像素中心的坐標值。透視投影是同一個坐標系下進行的,有必要把光線透過玻璃與漫反射表面的交點的空間位置坐標從世界坐標系下變換到正常視點的相機坐標系下。等都處于一個世界坐標系之后,就可以實施透視變換。
第三步:顏色合成
圖4 屏幕像素點
第四步:濾波
高斯濾波器是一類根據(jù)高斯函數(shù)的形狀來選擇權(quán)值的線性平滑濾波器,它是對整幅圖像進行加權(quán)平均的過程,每一個像素點的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過加權(quán)平均后得到。高斯濾波公式為:
圖5 圖像顏色合成
在具體利用高斯函數(shù)進行濾波的時候,需要對高斯函數(shù)進行離散化,如圖6所示,以離散點上的高斯函數(shù)值為權(quán)值,對采集到的灰度矩陣的每個像素點做一定范圍鄰域內(nèi)的加權(quán)平均,即可有效消除焦斑圖中噪聲。
圖6 圖像濾波
圖7 焦散繪制效果對比圖
圖8 焦散濾波前后
為了更好的對比分析,在本實驗中將光子映射算法和本文提出的焦散模擬生成算法進行了對比,分別對四個不同的場景進行了繪制,如圖7所示,表1是相關(guān)的實驗結(jié)果數(shù)據(jù)。
從圖7中可以看出,使用光子映射繪制出來的四個不同場景的圖像與本文算法繪制的圖像的效果非常接近,都能繪制出非常逼真的焦散效果。而從表1的數(shù)據(jù)分析中我們可以看出本文的算法在速度是相對光子映射有了較大的提高,例如在佛像中定點數(shù)約50多萬,三角形數(shù)一百多萬的場景中光子映射中只有兩點多幀,而本文算法的速度達到了將近每秒7幀比光子映射快了兩倍,在頂點數(shù)和三角形數(shù)較少的魚和兔子模型中本文算法在速度上提高的更加明顯本文提出的焦散模擬生成算法相比普通光線跟蹤算法,也只是增加了焦散數(shù)據(jù)采樣階段。另外,采樣相機在跟蹤繪制的過程中,還忽略一些對焦散數(shù)據(jù)沒有影響的多次反射光線。
表1 焦散算法繪制效率分析
但將幾百萬條光子縮減成1024×768個像素會造成算法所生成的原始焦散圖中有很多噪聲和銳化邊緣。因此由采樣不足導(dǎo)致的圖像噪聲和銳化邊緣問題,需要用到濾波處理,本文使用了高斯平滑濾波來解決該問題[11]。濾波前后的焦散效果對比,如圖8所示。由圖可知,采取濾波前,焦散圖像中存在著很多噪點和銳化邊界[12],這造成生成的焦散圖像與實際的真實效果有很大的不同。而經(jīng)過濾波處理之后,原焦斑圖中由焦散亮斑形成的細條紋和噪點被薄紗似的條帶狀亮度區(qū)域所取代[13],焦散圖像也會變得更加平滑而柔和,效果看起來也更加逼真。
本文給出了一種基于光線跟蹤的焦散模擬生成算法,算法通過對焦散繪制過程進行合理分解,并通過矩陣變換實現(xiàn)數(shù)據(jù)投射的動態(tài)轉(zhuǎn)換,可充分借助GPU的性能,實現(xiàn)焦散效果的快速繪制。該算法可以在光線跟蹤下繪制出效果逼真的圖像,與光子映射算法相比具有顯著的效率優(yōu)勢。
本文算法的繪制效果的真實性有所欠缺,例如在具有鏡面的場景中,無法在鏡面中觀察到焦散效果的影像。我們將在下一步工作中進一步深入研究這些問題。
[1]Ernst M,Akenine-Moller T,Jensen H W.Interactive rendering of caustics using interpolated warped volumes[C].Graphics Interface,2005.Ontario,Canada:Canadian Human-Computer Communications Society,2009:87-96.
[2]Biagio Cosenza,Carsten Dachsbacher,Ugo Erra.CPU costestimationforloadbalancinginparallelray tracing[C].In 8th International Conference on Computer Graphics Theory and Applications,Barcelona,2013:112-134.
[3]Wand E,Strafer N,Jensen H W.Interactive renderingofcausticsusingfastparallelconstructionof high-quality bounding[J].Computer Graphics Forum,2011,7(19):62-75.
[4]Chris Wyman,Scott Davis.Interactive image-space techniques for approximating caustics[C].Symposium on Interactive 3D Graphics and Games,2006.New York,USA:ACM Press,2006,9(21):153-160.
[5]Musawir Shah,Jaakko Konttinen,Sumanta Pattanaik. Caustics mapping:an image-space technique for real-time caustics[J].2012,7(29):63-74.
[6]李帥,郝愛民,朱磊.基于圖像空間的焦散實時逼真繪制算法研究[J].系統(tǒng)仿真學(xué)報,2009,6(21):37-44.
[7]李瑞瑞,秦開懷,張一天.包含反射、折射和焦散效果的全局光照快速繪制算法[J].計算機輔助設(shè)計與圖像學(xué)學(xué)報,2013,8(4):8-25.
[8]Havra V,Heraon R,Scidel H-p.Fast final gatheringviareversephotonmapping[C].Computer Graphics Forum(Proceedings of the IEEE Symposium on Interactive Ray Tracing,2007:1-10.
[9]Parker S,Bigler J,Dietrich A,et al.Optix:a general purpose ray tracing engine[J].ACM Transactions on Graphics,2010:231-254.
[10]Chunyi Chen,Huamin Yang,Hui Wang et al.Use of variance shadow map to accelerate ray tracing[C].Springer-VerlagBerlinHeidelBerg,2012:447-463.
[11]Zhang L,Wu X.An edge-guided image interpolation algorithm via directional filtering and data fusion[J].Image Processing,IEEE Transactions on,2011,15(8):2226-2238.
[12]梁鮮,曲福恒,楊勇,等.基于加權(quán)處罰的K-均值優(yōu)化算法[J].長春理工大學(xué)學(xué)報:自然科學(xué)版,2015,38(4):132-137.
[13]秦雪,王歡,嚴曄,等.基于圖像邊緣檢測的圖像識別算法[J].長春理工大學(xué)學(xué)報:自然科學(xué)版,2015,38(4):127-131.
Caustics Simulation Algorithm Based on Ray Tracing
XU Shenyi,JIANG Cong
(School of Computer Science and Technology,Changchun University of Science and Technology,ChangChun 130022)
As general ray tracing cannot draw the caustics,we put forward simulation of caustics algorithm based on ray tracing algorithm.first we tracking caustics data from the position of the light source to the scene for rendering,then the data is projected to the normal view or screen,and with the normal plane of the original pixel values are superimposed,so generate images with caustics,finally using Gauss filtering method for graphics filter processing to obtain the final image.By contrast with the photon mapping method,this method can improve the frame rate significantly and the effect is almost the same.Experiments show that this method can achieve a higher frame rate,while the image effect is real.
ray tracing;caustics;authenticity;the frame rate
TP391
A
1672-9870(2017)01-0127-06
2016-05-04
許申益(1992-),男,碩士研究生,E-mail:1303230987@qq.com