国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于空間均勻網(wǎng)格的光子映射算法研究

2017-01-21 14:45:10王海波陳中朱喜基周華先
軟件導刊 2016年12期

王海波+陳中+朱喜基+周華先

摘 要:光子映射是一種全局光照方法,在渲染輝映、焦散、漫反射等方面效果良好。通常的方法是發(fā)射光子,建立基于K-D tree的光子圖,然后在此基礎(chǔ)上尋找與估算點相應(yīng)的光子完成光輻射強度估算,最后渲染圖形,具有生成圖形慢、內(nèi)存消耗大等缺點。鑒于此,提出一種新方法:先建立空間均勻網(wǎng)格,發(fā)射光子后,再利用GPU的并行功能建立光子與網(wǎng)格映射關(guān)系偏移表,之后尋找估算點的光子完成光輻射強度估算,渲染圖形。實驗結(jié)果表明,新算法生成的圖形速度更快、更清晰,具有更高的實用價值。

關(guān)鍵詞:光子映射;均勻網(wǎng)格;GPU;偏移表

DOIDOI:10.11907/rjdk.162461

中圖分類號:TP311

文獻標識碼:A文章編號:1672-7800(2016)012-0019-03

0 引言

光子映射是全局光照算法,通常先從光源向場景發(fā)射光子,建立基于K-D tree的光子圖,接著從光子圖中尋找估算點的光子完成對估算點光輻射強度估算,最后生成圖形[1]。光子映射的光子圖與場景表述可以分離,光子映射能處理很復雜的場景,包括千萬個三角面片、實例化的幾何體、復雜的過程式物體[2]。

針對通常算法消耗內(nèi)存大、生成圖形慢的缺點,Per H Christensen[3]于2002年提出凸多邊形的思路,該方法是獲取一組離估算點最近的光子,再求出包圍光子的最小凸多邊形,進而利用凸邊形的面積作為估算光輻射強度估算時的分母。該方法能比較精確地估算光輻射強度,但耗時很長。同年Heinrich Hey[4]提出另一種精確估算光輻射強度的算法。該算法的思想是:場景中的每個物體都用網(wǎng)格表示出來,采用立方體收集光子,并求出每個立方體內(nèi)的多邊形面積,每個光子的能量平均分配到光子正對著的多邊形,每個多邊形的光輻射能應(yīng)與沿著光子入射方向的投影面積成正比。2005年Szbolcs Czuczou[5]應(yīng)用圖形硬件的紋理結(jié)構(gòu)存儲光子,用濾波方式搜索最鄰近的光子信息,該方法的好處是可以一步獲取所有頂點的輻射能,缺點是獲取的輻射能僅是平均值。2008年Hachisuka等[6]采用逐步縮小估算半徑,同時采用加大光子密度的辦法,在渲染水面焦散時效果較好。2009年Dan A.Alcantara[7]等在GPU上實現(xiàn)光子的哈希并行算法,搜索有效光子的速度更快,但需開辟較大的共享內(nèi)存。耿中元、徐慶為[8]為了改善物體細節(jié)部分的繪制效果,2009 年提出對搜索范圍內(nèi)的每個光子都求出它在繪制點上的切平面投影,通過判斷投影點與繪制點之間的距離是否小于搜索半徑,進而決定是否使用該光子計算光輻射強度。2011年Wojciech Jarosz[9]等提出采用自適應(yīng)光子束方法渲染有參與介質(zhì)的柱狀型光照時取得較好效果。2012年Doidge[10]結(jié)合漸進光子映射算法與路徑跟蹤算法的優(yōu)點,在渲染焦散現(xiàn)象時采取光子映射算法,渲染其它現(xiàn)象時則采用光線跟蹤算法,兩種算法互相切換的花費較大。2013年Ben Spencer[11]等先為每個光子劃分一個沃羅諾伊空間,接著采用漸進光子的方式計算光輻射強度。2013年Mara、Luebke、McGuire[12]利用GPU的柵格硬件,在對光輻射強度估算時采用多面體方法獲取光子,提高了光輻射強度的精度,先從理論上證明該方法的一致性,實驗上也驗證了該算法的有效性,但該算法在處理較復雜的場景時會對估算點重復計算。

新算法先將物理空間分成均勻網(wǎng)格,然后發(fā)射光子,再建立均勻網(wǎng)格與光子的映射關(guān)系偏移表,實驗結(jié)果比通?;贙-D tree的光子映射算法更快,圖像也更清晰。

1 網(wǎng)格算法

Step1:空間均勻網(wǎng)格建立。先將場景分為可與圖形像素一樣多的包圍盒[13-14],之后再根據(jù)統(tǒng)一的尺寸劃分網(wǎng)格,一般網(wǎng)格以搜索半徑r[15]為長度。劃分網(wǎng)格時間只占整個網(wǎng)格構(gòu)建的一小部分時間。

Step2:為每個光子計算索引。網(wǎng)格建好后需要為每個光子分配光子索引可采用如下方式分配索引:

Idx(p)=G(p).x+G(P).y.GridSize.x+G(p).Z.GridSize.x.GridSize.y(1)

其中,G(p)=[(p-worldOrigo)/cellSize]。GridSizex表示x軸上的網(wǎng)格數(shù),GridSizey表示y軸上的網(wǎng)格數(shù),GridSizez表示z軸上的網(wǎng)格數(shù)。索引值的范圍為0~N,其中N=GridSizex.GridSizey.GridSizez.所有的光子都分配到0~N-1中去,由于這部分可以并行進行,采用GPU的kuda作并行計算[16-17]。

Step3:偏移表(Offset Table)計算。完成均勻網(wǎng)格劃分、光子存儲、光子與網(wǎng)格對應(yīng)關(guān)系建立,再建光子偏移表,用于光子搜索,如圖1所示。

Step4:利用均勻網(wǎng)格尋找光子。利用存儲光子的數(shù)組和偏移表,查找估算點的光子,如圖2所示,需要尋找到所有符合要求的光子。先找到估算點要達到的最小網(wǎng)格和最大網(wǎng)格,如在x軸的最小網(wǎng)格和最大網(wǎng)格半徑內(nèi),如果網(wǎng)格空間的大小正好等于搜尋半徑,則在立體空間中最多需要搜尋8個網(wǎng)格,可用GPU的kuda并行搜尋。算法描述如下:

xMin=Max(0,[p.x-worldOrigo.x-radius]/cellSize)]

xMax=Min(GridSize.x-1,[p.x-worldOrigo.x-radius]/cellSize)])

normPosition :p-worldOrigo;

xMin:=max(0,floor(normPosition.x-R)/cellSize)

xmax:=min(GridSize.x-1,floor(normPosition.x+R)/cellSize);

yMin:=max(0,floor(normPosition.y-R)/cellSize);

yMax:=min(GridSize.y-1,floor(normPosition.x+R)/cellSize);

zMin:=max(0,floor(normPosition.z-R)/cellSize)

zMax:=min(GridSize.z-1,floor(normPosition.z+R)/cellSize);

getHashValue(x,y,z){

return x+y*gridSize.x+z*gridSize.x*gridSize.y;}

If(xMin<=xMax){

For(y:=yMin; y <=yMax; y++){

For(z:=zMin; z<=zMax; z++){ hashFrom:=getHashValue(xMin,y,z); hashTo;=hashFrom+(xMax-xMin); offsetFrom:=offsetTable[hashFrom]; offsetTo:=offsetTable[hashTo+1];

for(i:=offsetFrom; i

photon:=photons[i];

if(length(photon.position-p)<=R){

Accumulate power of photon i

}

}

}

}

}

2 結(jié)果分析

實驗條件:系統(tǒng)Win7,處理器Intel I5處理器2.5G,內(nèi)存8G,Geforce 610,使用C++GL渲染圖形。在網(wǎng)格劃分好后,使用GPU的cuda技術(shù),場景1為像素640×480,發(fā)射的光子數(shù)為50 000個;場景2像素為1 366×768,發(fā)射的光子數(shù)為100 000;場景3像素1 366×768,發(fā)射的光子數(shù)為200 000個。從圖形清晰度來看,網(wǎng)格算法的清晰度比K-D tree算法清晰度更高,原因是網(wǎng)格算法建立光子的映射關(guān)系更精準。從表1、表2、表3可以看出,在各場景中網(wǎng)格的構(gòu)建時間比kd樹的構(gòu)建時間都快,最大內(nèi)存消耗網(wǎng)格算法比K-D tree算法低,在總的渲染時間上,網(wǎng)格算法比K-D tree算法低。

3 結(jié)語

新的算法是先將空間劃分成均勻網(wǎng)格,發(fā)射光子后,再利用GPU的并行功能建立光子與網(wǎng)格映射光子,最后利用該映射關(guān)系來查找估算點的光子,進而渲染圖形。在以后的研究中可以更多地利用GPU并行功能加速圖形的生成,并進一步優(yōu)化光子與網(wǎng)格的映射。

參考文獻:

[1] H W Jensen.Global illumination using photon maps,proceedings of the seventh eurographics workshop on rendering1996[C].Switzerland:Aire-la-Ville,1996:19-26.

[2] HEINRICH HEY,WERNER PURGATHOFER.Advanced radiance estimation for photon map global illumination proceeding of eurographics,2002[C].Switzerland:Eurographics,2002:541-545.

[3] WOJCIECH JAROSZ,HENRIK W JENSEN.Advanced global illumination using photon mapping[C].USA:Siggraph,2008:65-70.

[4] HEINRICH HEY,WERNER PURGATHOFER.Advanced radiance estimation for photon map global illumination,proceeding of eurographics[C].Switzerland:Eurographics,2002:541-545.

[5] SZABOLCS CZUCZOR,LáSZló SZIRMAY-KALOS,LáSZló NEUMANN.Photon map gathering on the GPU[C].Spanish-Hungarian:EUROGRAPHICS,2005:143-152.

[6] WOJCIECH JAROSZ,HENRIK W JENSEN.Advanced global illumination using photon mapping[C].USA:Siggraph,2008:65-70.

[7] DAN A ALCANTARA,ANDREI SHARF.Real-time parallel hashing on the GPU[C].Asia:Proceedings of ACM SIGGRAPH,2009:243-252.

[8] 耿中元,徐慶,孫濟洲.改進的光輻射強度估算[J].系統(tǒng)仿真學報,2009(14):4471-4474.

[9] WOJCIECH JAROSZ,DEREK NOWROUZEZAHRAI,ROBERT THOMAS.Progressive photon beams[C].NY:Proceedings of ACM SIGGRAPH Asia,2011:546-555.

[10] IAN C,DOIDGE MARK W,JONES,et al.Monte carlo and progressive rendering for improved global illumination[J].The Visual Computer June,2012(28):603-612.

[11] BEN SPENCER,MARK W.JONES.Progressive photon relaxation[J].ACM Transactions on Graphics,2013(32):562-570.

[12] MICHAEL MARA,DAVID LUEBKE, MORGAN MCGUIRE.Toward practical real-time photon mapping:efficient GPU density estimation[C].New York:ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games,2013:71-78.

[13] JEFFREY J.Automatic creation of object hierarchies for ray tracing[J].IEEE Computer Graphics and Applications,1987(5):14-20.

[14] C GILLES,LBERNARD.Coupled use of BSP and BVH trees in order to exploit ray bundle performance[C].NewYork:IEEE/EG Symposium on Interactive Ray Tracing,2007:231-240.

[15] V GARCIA,E DEBREUVE,M BARLAUD.Fast k nearest neighbor search using GPU[C].Anchorage:CVPR Workshop on Computer Vision on GPU,2008:567-575.

[16] NVIDIA CORPORATION.CUDA ToolKit homepage[EB/OL].https://developer.nvidia.com/cuda-toolkit.

[17] R FARBER.CUDA Application design and development:applications of GPU computing series[M].San Francisco:Morgan Kaufmann,2011:245-253.

(責任編輯:孫 娟)

天等县| 怀仁县| 平潭县| 区。| 岚皋县| 进贤县| 仙游县| 永宁县| 和顺县| 东平县| 岑巩县| 集安市| 吴堡县| 伊宁市| 固镇县| 博白县| 萨迦县| 手游| 泗水县| 乐昌市| 鹤山市| 兰考县| 东兰县| 长治市| 特克斯县| 贵阳市| 宁远县| 塔河县| 华宁县| 北安市| 拉萨市| 莆田市| 天柱县| 黑龙江省| 阿尔山市| 定安县| 凯里市| 天气| 龙海市| 武平县| 霍林郭勒市|