本發(fā)明涉及一種利用面光源可見性空間相關加速三維場景直接光照效果繪制的方法,屬于真實感三維場景繪制技術領域。
背景技術:
在三維場景繪制中,為了方便實現(xiàn),經(jīng)常把光源建模為點光源。然而現(xiàn)實生活中很少有光源是真正意義上的點光源。面光源是一種常見的光源類型。在繪制三維場景時,如果照射三維場景的光源是面光源,則通常需要對面光源進行采樣,獲得一系列光源采樣點,然后利用蒙特卡洛直接光照值估計技術來得到面光源對三維場景點的近似直接光照貢獻值。發(fā)表在《acmtransactionsongraphics》1996年15卷1期1~36頁的論文詳細介紹了蒙特卡洛直接光照值估計技術。為了確保利用蒙特卡洛直接光照值估計技術繪制的三維場景畫面不存在明顯的隨機噪聲,往往需要生成大量的光源采樣點。這導致很大的繪制時間開銷。如何在確保三維場景畫面不存在明顯隨機噪聲的條件下,減少繪制畫面時所需的面光源采樣點數(shù)目成為一個重要的研究方向。根據(jù)生活經(jīng)驗,通過分析可以發(fā)現(xiàn),繪制的圖像畫面中的兩個鄰近像素對應的可視場景點如果在同一個幾何對象表面上,則二者的面光源可見性通常存在很強的空間相關。如圖1所示,可視場景點p2和p3在同一個平面上,這兩個可視場景點的面光源可見性存在很強的空間相關。利用這種空間相關可以在確保三維場景畫面不存在明顯隨機噪聲的情況下,減小可視場景點的直接光照值蒙特卡洛估計所需的光源采樣點數(shù)目,從而降低繪制三維場景直接光照效果的時間開銷。申請?zhí)枮?01611114176.5的一件中國發(fā)明專利申請公開了一種基于可見性重用的三維場景直接光照效果近似繪制方法;與該發(fā)明專利申請不同,本發(fā)明只重用那些在同一個幾何對象表面上的鄰近可視場景點的光源采樣點可見性計算結果,這可以顯著減小因重用可見性導致的圖像畫面中不同幾何對象交界處的直接光照效果走樣。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種利用面光源可見性空間相關加速三維場景直接光照效果繪制的方法,其通過對位于同一個幾何對象表面上的鄰近可視場景點的面光源采樣點可見性計算結果進行重用,來提高繪制三維場景直接光照效果的效率,同時減小在圖像畫面中的不同幾何對象交界處重用面光源采樣點可見性計算結果導致的直接光照效果走樣。
本發(fā)明的技術方案是這樣實現(xiàn)的:利用面光源可見性空間相關加速三維場景直接光照效果繪制的方法,其特征在于:把虛擬相機放在視點位置,根據(jù)虛擬相機拍攝參數(shù),利用光線投射技術繪制三維場景;對于每條從視點出發(fā)穿過虛擬像素平面上的像素的光線a001,光線a001與虛擬像素平面上的像素一一對應,判斷光線a001與三維場景的幾何對象是否相交,如果相交則進一步計算光線a001與三維場景的幾何對象的離視點最近的交點a002,交點a002就是一個可視場景點,可視場景點和光線a001一一對應;首先,針對每個可視場景點b001,按均勻分布在面光源上隨機地產生nls個光源采樣點,計算每個光源采樣點與可視場景點b001之間的可見性并作記錄;然后,對每個可視場景點b001,找到與之對應的虛擬像素平面上的像素b002,對于每個到像素b002的距離小于dpix的虛擬像素平面上的像素b003,如果像素b003對應的可視場景點b004到視點的距離及其所在表面的法向量與可視場景點b001到視點的距離及其所在表面的法向量之間的差異小于給定閾值,則標記可視場景點b004與可視場景點b001為同一個幾何對象表面上的鄰近點;dpix>0;像素b003到像素b002的距離定義為(δi2+δj2)1/2,δi為像素b003在虛擬像素平面上的行號和像素b002在虛擬像素平面上的行號之差,δj為像素b003在虛擬像素平面上的列號和像素b002在虛擬像素平面上的列號之差;對每個可視場景點b001,根據(jù)可視場景點b001及與其在同一個幾何對象表面上的所有鄰近可視場景點對應的光源采樣點及相應的可見性來估計可視場景點b001的直接光照值;具體實現(xiàn)步驟如下:
提供一種數(shù)據(jù)結構lspd,用于存儲與面光源采樣點相關的數(shù)據(jù);數(shù)據(jù)結構lspd包括光源采樣點的空間位置pls和光源采樣點的可見性vls兩個成員變量。
1)為每個可視場景點按均勻分布在面光源上隨機地產生nls個光源采樣點,并計算光源采樣點與對應的可視場景點之間的可見性,具體步驟如下:
步驟step101:把虛擬相機放在視點位置,根據(jù)虛擬相機拍攝參數(shù),利用光線投射技術繪制三維場景;對于每條從視點出發(fā)穿過虛擬像素平面上的像素的光線a001,光線a001與虛擬像素平面上的像素一一對應,判斷光線a001與三維場景的幾何對象是否相交,如果相交則進一步計算光線a001與三維場景的幾何對象的離視點最近的交點a002,交點a002就是一個可視場景點,可視場景點對應了虛擬像素平面上的一個唯一的像素;
步驟step102:創(chuàng)建一個包含m行、n列元素的數(shù)組ls,m為虛擬像素平面上的像素行數(shù),n為虛擬像素平面上的像素列數(shù);數(shù)組ls的每個元素存儲一個列表c001,列表c001的每個元素存儲一個數(shù)據(jù)結構lspd類型的變量;令數(shù)組ls的每個元素存儲的列表c001為空;數(shù)組ls的每個元素和虛擬像素平面上的像素一一對應;
步驟step103:對每條與三維場景的幾何對象相交的光線a001對應的可視場景點b001,執(zhí)行如下操作:
按均勻分布在面光源上隨機地產生nls個光源采樣點c002;在計算機存儲器中創(chuàng)建nls個數(shù)據(jù)結構lspd類型的變量,其與nls個光源采樣點c002一一對應;把每個光源采樣點c002的空間位置賦值給與之對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的空間位置pls成員變量;對于每個光源采樣點c002,判斷從光源采樣點c002的空間位置到可視場景點b001的線段是否與三維場景的幾何對象相交,如果相交,則令與光源采樣點c002對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為0,否則令與光源采樣點c002對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為1;把nls個光源采樣點c002對應的nls個數(shù)據(jù)結構lspd類型的變量添加到可視場景點b001對應的虛擬像素平面上的像素對應的數(shù)組ls的元素存儲的列表c001中。
2)估計每個可視場景點的直接光照值,并繪制出三維場景的直接光照效果,具體步驟如下:
步驟step201:創(chuàng)建一個包含m行、n列元素的數(shù)組ilu,m為虛擬像素平面上的像素行數(shù),n為虛擬像素平面上的像素列數(shù);數(shù)組ilu的每個元素與虛擬像素平面上的像素一一對應,數(shù)組ilu的每個元素用于保存虛擬像素平面上的像素對應的可視場景點的直接光照值;令數(shù)組ilu的每個元素的值為背景色對應的光照值;
步驟step202:對每個可視場景點b001,執(zhí)行如下操作:
步驟step202-1:找到可視場景點b001對應的虛擬像素平面上的像素b002;在虛擬像素平面上找出到像素b002的距離小于dpix的所有像素b003并把它們保存到列表c003中,列表c003中不包括像素b002;
步驟step202-2:在計算機存儲器中創(chuàng)建一個列表lcs來存儲一系列數(shù)據(jù)結構lspd類型的變量,令列表lcs為空;把可視場景點b001對應的虛擬像素平面上的像素b002對應的數(shù)組ls的元素存儲的列表c001中的所有變量添加到列表lcs中;對列表c003中的每個像素c004,執(zhí)行如下操作:
如果從視點出發(fā)穿過像素c004的光線a001與三維場景的幾何對象有交,則找到像素c004對應的可視場景點c005,可視場景點c005到視點的距離為d1、可視場景點b001到視點的距離為d2、可視場景點c005所在表面的歸一化法向量為v1、可視場景點b001所在表面的歸一化法向量為v2,如果|d1?d2|<td且v1?v2>tv,則把可視場景點c005對應的虛擬像素平面上的像素c004對應的數(shù)組ls的元素存儲的列表c001中的所有變量添加到列表lcs中,v1?v2表示v1和v2的點乘;td表示距離差異閾值,tv表示法向量方向差異閾值;
步驟step202-3:令ns1為列表lcs中存儲的數(shù)據(jù)結構lspd類型的變量個數(shù);如果ns1≥num,則轉步驟step202-4,否則按均勻分布在面光源上隨機地產生num?ns1個光源采樣點c006,在計算機存儲器中創(chuàng)建num?ns1個數(shù)據(jù)結構lspd類型的變量,其與num?ns1個光源采樣點c006一一對應,把每個光源采樣點c006的空間位置賦值給與之對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的空間位置pls成員變量;對于每個光源采樣點c006,判斷從光源采樣點c006的空間位置到可視場景點b001的線段是否與三維場景的幾何對象相交,如果相交,則令與光源采樣點c006對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為0,否則令與光源采樣點c006對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為1;把num?ns1個光源采樣點c006對應的num?ns1個數(shù)據(jù)結構lspd類型的變量添加到列表lcs中;
步驟step202-4:根據(jù)列表lcs中存儲的所有數(shù)據(jù)結構lspd類型的變量的光源采樣點的空間位置pls成員變量的值來確定可視場景點b001的蒙特卡洛直接光照值估計所需的光源采樣點,用列表lcs中存儲的所有數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量的值作為對應的光源采樣點對可視場景點b001的可見性近似值,并使用蒙特卡洛直接光照值估計技術來計算可視場景點b001的直接光照近似值c007;
步驟step202-5:計算可視場景點b001對應的虛擬像素平面上的像素b002在虛擬像素平面上所在的行號irow和列號jcol;把數(shù)組ilu的第irow行、第jcol列的元素賦值為直接光照近似值c007;
步驟step203:把數(shù)組ilu的每個元素保存的直接光照值轉換成三維場景畫面圖像像素顏色值,并把三維場景畫面圖像顯示在顯示器上。
本發(fā)明的積極效果是利用了同一個幾何對象表面上的鄰近可視場景點的光源采樣點可見性存在空間相關的特點,在計算可視場景點的直接光照近似值時,用該可視場景點及其周圍在同一個幾何對象表面上的鄰近可視場景點的光源采樣點及可見性計算結果來完成蒙特卡洛直接光照值估計,以較小的代價來增加用于可視場景點直接光照貢獻估計的面光源采樣點數(shù),從而提高繪制的圖像畫面質量。與已公開的相關技術相比,本發(fā)明增加了鄰近像素對應的可視場景點是否在同一個幾何對象表面上的測試操作,這可以顯著減小在圖像畫面中不同幾何對象交界處進行可見性重用導致的直接光照效果走樣。
附圖說明
圖1為虛擬像素平面上鄰近的像素對應的可視場景點示意圖。
具體實施方式
為了使本方法的特征和優(yōu)點更加清楚明白,下面結合具體實施例對本方法作進一步的描述。本實施例考慮包含一只兔子和一張桌子的房間三維模型,其中用一個平面矩形面光源照射三維場景。計算機系統(tǒng)的cpu選擇intel(r)xeon(r)cpue3-1225v3@3.20ghz,內存選擇金士頓8gbddr31333,磁盤選擇buffalohd-ce1.5tu2,顯卡選用nvidiaquadrok2000;計算機操作系統(tǒng)選用windows7,軟件編程工具選用vc++2010。
本發(fā)明利用面光源可見性空間相關加速三維場景直接光照效果繪制的方法,其特征在于:把虛擬相機放在視點位置,根據(jù)虛擬相機拍攝參數(shù),利用光線投射技術繪制三維場景;對于每條從視點出發(fā)穿過虛擬像素平面上的像素的光線a001,光線a001與虛擬像素平面上的像素一一對應,判斷光線a001與三維場景的幾何對象是否相交,如果相交則進一步計算光線a001與三維場景的幾何對象的離視點最近的交點a002,交點a002就是一個可視場景點,可視場景點和光線a001一一對應;首先,針對每個可視場景點b001,按均勻分布在面光源上隨機地產生nls個光源采樣點,計算每個光源采樣點與可視場景點b001之間的可見性并作記錄;然后,對每個可視場景點b001,找到與之對應的虛擬像素平面上的像素b002,對于每個到像素b002的距離小于dpix的虛擬像素平面上的像素b003,如果像素b003對應的可視場景點b004到視點的距離及其所在表面的法向量與可視場景點b001到視點的距離及其所在表面的法向量之間的差異小于給定閾值,則標記可視場景點b004與可視場景點b001為同一個幾何對象表面上的鄰近點;dpix>0;像素b003到像素b002的距離定義為(δi2+δj2)1/2,δi為像素b003在虛擬像素平面上的行號和像素b002在虛擬像素平面上的行號之差,δj為像素b003在虛擬像素平面上的列號和像素b002在虛擬像素平面上的列號之差;對每個可視場景點b001,根據(jù)可視場景點b001及與其在同一個幾何對象表面上的所有鄰近可視場景點對應的光源采樣點及相應的可見性來估計可視場景點b001的直接光照值;具體實現(xiàn)步驟如下:
提供一種數(shù)據(jù)結構lspd,用于存儲與面光源采樣點相關的數(shù)據(jù);數(shù)據(jù)結構lspd包括光源采樣點的空間位置pls和光源采樣點的可見性vls兩個成員變量。
1)為每個可視場景點按均勻分布在面光源上隨機地產生nls個光源采樣點,并計算光源采樣點與對應的可視場景點之間的可見性,具體步驟如下:
步驟step101:把虛擬相機放在視點位置,根據(jù)虛擬相機拍攝參數(shù),利用光線投射技術繪制三維場景;對于每條從視點出發(fā)穿過虛擬像素平面上的像素的光線a001,光線a001與虛擬像素平面上的像素一一對應,判斷光線a001與三維場景的幾何對象是否相交,如果相交則進一步計算光線a001與三維場景的幾何對象的離視點最近的交點a002,交點a002就是一個可視場景點,可視場景點對應了虛擬像素平面上的一個唯一的像素;
步驟step102:創(chuàng)建一個包含m行、n列元素的數(shù)組ls,m為虛擬像素平面上的像素行數(shù),n為虛擬像素平面上的像素列數(shù);數(shù)組ls的每個元素存儲一個列表c001,列表c001的每個元素存儲一個數(shù)據(jù)結構lspd類型的變量;令數(shù)組ls的每個元素存儲的列表c001為空;數(shù)組ls的每個元素和虛擬像素平面上的像素一一對應;
步驟step103:對每條與三維場景的幾何對象相交的光線a001對應的可視場景點b001,執(zhí)行如下操作:
按均勻分布在面光源上隨機地產生nls個光源采樣點c002;在計算機存儲器中創(chuàng)建nls個數(shù)據(jù)結構lspd類型的變量,其與nls個光源采樣點c002一一對應;把每個光源采樣點c002的空間位置賦值給與之對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的空間位置pls成員變量;對于每個光源采樣點c002,判斷從光源采樣點c002的空間位置到可視場景點b001的線段是否與三維場景的幾何對象相交,如果相交,則令與光源采樣點c002對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為0,否則令與光源采樣點c002對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為1;把nls個光源采樣點c002對應的nls個數(shù)據(jù)結構lspd類型的變量添加到可視場景點b001對應的虛擬像素平面上的像素對應的數(shù)組ls的元素存儲的列表c001中。
2)估計每個可視場景點的直接光照值,并繪制出三維場景的直接光照效果,具體步驟如下:
步驟step201:創(chuàng)建一個包含m行、n列元素的數(shù)組ilu,m為虛擬像素平面上的像素行數(shù),n為虛擬像素平面上的像素列數(shù);數(shù)組ilu的每個元素與虛擬像素平面上的像素一一對應,數(shù)組ilu的每個元素用于保存虛擬像素平面上的像素對應的可視場景點的直接光照值;令數(shù)組ilu的每個元素的值為背景色對應的光照值;
步驟step202:對每個可視場景點b001,執(zhí)行如下操作:
步驟step202-1:找到可視場景點b001對應的虛擬像素平面上的像素b002;在虛擬像素平面上找出到像素b002的距離小于dpix的所有像素b003并把它們保存到列表c003中,列表c003中不包括像素b002;
步驟step202-2:在計算機存儲器中創(chuàng)建一個列表lcs來存儲一系列數(shù)據(jù)結構lspd類型的變量,令列表lcs為空;把可視場景點b001對應的虛擬像素平面上的像素b002對應的數(shù)組ls的元素存儲的列表c001中的所有變量添加到列表lcs中;對列表c003中的每個像素c004,執(zhí)行如下操作:
如果從視點出發(fā)穿過像素c004的光線a001與三維場景的幾何對象有交,則找到像素c004對應的可視場景點c005,可視場景點c005到視點的距離為d1、可視場景點b001到視點的距離為d2、可視場景點c005所在表面的歸一化法向量為v1、可視場景點b001所在表面的歸一化法向量為v2,如果|d1?d2|<td且v1?v2>tv,則把可視場景點c005對應的虛擬像素平面上的像素c004對應的數(shù)組ls的元素存儲的列表c001中的所有變量添加到列表lcs中,v1?v2表示v1和v2的點乘;td表示距離差異閾值,tv表示法向量方向差異閾值;
步驟step202-3:令ns1為列表lcs中存儲的數(shù)據(jù)結構lspd類型的變量個數(shù);如果ns1≥num,則轉步驟step202-4,否則按均勻分布在面光源上隨機地產生num?ns1個光源采樣點c006,在計算機存儲器中創(chuàng)建num?ns1個數(shù)據(jù)結構lspd類型的變量,其與num?ns1個光源采樣點c006一一對應,把每個光源采樣點c006的空間位置賦值給與之對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的空間位置pls成員變量;對于每個光源采樣點c006,判斷從光源采樣點c006的空間位置到可視場景點b001的線段是否與三維場景的幾何對象相交,如果相交,則令與光源采樣點c006對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為0,否則令與光源采樣點c006對應的數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量為1;把num?ns1個光源采樣點c006對應的num?ns1個數(shù)據(jù)結構lspd類型的變量添加到列表lcs中;
步驟step202-4:根據(jù)列表lcs中存儲的所有數(shù)據(jù)結構lspd類型的變量的光源采樣點的空間位置pls成員變量的值來確定可視場景點b001的蒙特卡洛直接光照值估計所需的光源采樣點,用列表lcs中存儲的所有數(shù)據(jù)結構lspd類型的變量的光源采樣點的可見性vls成員變量的值作為對應的光源采樣點對可視場景點b001的可見性近似值,并使用蒙特卡洛直接光照值估計技術來計算可視場景點b001的直接光照近似值c007;
步驟step202-5:計算可視場景點b001對應的虛擬像素平面上的像素b002在虛擬像素平面上所在的行號irow和列號jcol;把數(shù)組ilu的第irow行、第jcol列的元素賦值為直接光照近似值c007;
步驟step203:把數(shù)組ilu的每個元素保存的直接光照值轉換成三維場景畫面圖像像素顏色值,并把三維場景畫面圖像顯示在顯示器上。
在本實施例中,dpix取值為2.9,nls取值為5,m取值為768,n取值為1024,num取值為30,td取值為0.001,tv取值為0.9。