Kd-樹與Voronoi圖混合的輻射亮度計算方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計算機圖形學(xué)技術(shù)領(lǐng)域,具體涉及一種Kd-樹(Kd-tree)與Voronoi 圖混合的精確輻射亮度計算方法。
【背景技術(shù)】
[0002] 具有高度真實感的繪制技術(shù)是計算機圖形學(xué)中最震撼人心的研究領(lǐng)域之一,而其 中精確細致的全局光照明模擬尤其重要。光子映射算法(Photon Mapping,簡稱PM)是一 種基于光子圖實現(xiàn)的全局光照明算法(Jensen H.W. :Global illumination using photon maps. In Rendering Techniques 96. Springer, 1996, pp. 21 - 30),由于光子映射相比光線 追蹤能夠更好的模擬焦散現(xiàn)象和SDS,即經(jīng)過鏡面反射(折射)-漫反射-鏡面反射(折射) 所產(chǎn)生的現(xiàn)象,而且光線追蹤算法在采樣較低的條件下,使用蒙特卡洛采樣精確計算初始 的反射時會生成噪聲,因此光子映射算法可以得到更加逼真自然的圖像。
[0003] 光子映射算法中光子圖的生成也需要借助光線追蹤的方法,光線追蹤算法對鏡面 反射光線和透射光線的追蹤要優(yōu)于光子映射算法,在實際場景中往往選取二者的混合算法 解決繪制問題,即使用光線追蹤方法計算光源引起的直接光照,而使用光子圖計算環(huán)境引 起的間接漫反射光照。
[0004] 光子映射算法中核心的輻射亮度估計的精度常常嚴(yán)重依賴于半徑非常小的估算 內(nèi)核以及在估算內(nèi)核上的光子分布。對于幾何特征復(fù)雜的繪制場景,光子映射不能保證 在繪制中可以有效地控制偏差和噪聲錯誤的生成。光子映射算法是一個有偏算法,偏差 產(chǎn)生的原因在于福射亮度估算本質(zhì)上是計算X點處光子密度的過程,由于X點是抽象點 不存在體積和大小,只能近似的使用X點附近區(qū)域內(nèi)的平均光子密度來代替X點的光子 密度,這樣做必然會引入不精確的偏差。間接光照計算在光子數(shù)目趨近于無窮大是可以 趨近于正確的結(jié)果,但是實際上,由于光子映射的整個繪制方法中發(fā)射的光子數(shù)目不可能 達到無窮大(否則計算機系統(tǒng)無法進行處理),分布在輻射亮度估計區(qū)域內(nèi)的光子通常是 有限甚至是稀疏的,這樣就造成了估算內(nèi)核的半徑在有限光子的條件下不能趨近于〇,直 觀上,與相交點距離"較遠"的光子也會用于計算相交點的輻射亮度,這一部分輻射量是不 精確的。此外,傳統(tǒng)的光子映射算法的輻射亮度計算存在兩個假設(shè)條件:1.估算內(nèi)核圓盤 所在的局部物體表面是平坦的幾何表面,即在相交點X附近的局部表面可以完整地包含 估算內(nèi)核圓盤;2.所有與相交點X的距離小于r的光子都會對X點產(chǎn)生有效的輻射量貢 南犬(Toshiya T.,Ogaki S., Jensen H. ff. !Progressive photon mapping. ACM Trans. Grap h. 27, 5 (Dec. 2008),130:1 - 130:8)。同時,在光子映射方法中,光子圖往往存儲在三維空間 Kd-tree (Kd-樹)層次組織結(jié)構(gòu)中離散光子,已經(jīng)完全丟棄了待繪制三維場景的幾何信息, 而在進行光子收集階段由于對點X周圍的空間幾何信息完全未知,因此估算計算內(nèi)核對整 個圓盤范圍內(nèi)均有光子分布的假設(shè)在實際中也不能滿足,即輻射亮度估算方程的分子和分 母都是不精確的,這樣導(dǎo)致的錯誤輻射亮度估算結(jié)果為偏差錯誤。偏差問題所導(dǎo)致的場景 繪制結(jié)果的表現(xiàn)為模糊,即丟失了局部細節(jié)。
【發(fā)明內(nèi)容】
[0005] 針對上述問題,本發(fā)明提出一種Kd-tree與Voronoi圖混合的精確福射亮度計算 方法(Radiance Estimate),能夠利用局部表面光子分布的幾何特征進行更加精確的福射 亮度(Radiance)內(nèi)核估計。
[0006] 本發(fā)明采用的技術(shù)方案如下:
[0007] -種Kd-tree與Voronoi圖混合的精確福射亮度計算方法,其步驟包括:
[0008] 1)針對待繪制的三維場景,構(gòu)造場景拓撲結(jié)構(gòu)及其Kd-tree層次組織;
[0009] 2)光源發(fā)射光子并生成光子圖,以多邊形面片為單位存儲該光子圖,包括存儲光 子的基本屬性以及存儲光子所停留的多邊形面片的唯一標(biāo)識,同時每個多邊形都記錄落在 其中的光子的唯一標(biāo)識;
[0010] 3)遍歷三維場景表面的每個多邊形,針對每個多邊形,收集屬于該多邊形的光子 并組織成二維Kd-tree結(jié)構(gòu);
[0011] 4)對每個多邊形表面構(gòu)造 Voronoi圖劃分,并計算劃分出的Voronoi單元的福射 通量密度;
[0012] 5)計算從視點發(fā)射的射線與場景的相交點X ;
[0013] 6)根據(jù)相交點X所屬的多邊形面片,利用該多邊形面片所保存的二維Kd-tree結(jié) 構(gòu)收集臨近的光子;
[0014] 7)對收集到的光子,根據(jù)Voronoi圖劃分找到這些光子所覆蓋的精確的面積,并 利用福射亮度計算公式計算出X點的福射亮度。
[0015] 進一步地,根據(jù)步驟7)計算出的輻射亮度合成出最終的真實感圖像。
[0016] 進一步地,步驟1)構(gòu)造場景拓撲結(jié)構(gòu)的方法是:首先為每個場景中的節(jié)點建立鄰 域網(wǎng)格結(jié)構(gòu),通過遍歷一次場景中的網(wǎng)格結(jié)構(gòu),得到從網(wǎng)格的節(jié)點到鄰域網(wǎng)格集合的對應(yīng) 關(guān)系表;之后為每個網(wǎng)格建立1-鄰域網(wǎng)格集合,使用的方法是針對一個網(wǎng)格,遍歷它的所 有節(jié)點,選取每個節(jié)點鄰域網(wǎng)格集合的并集作為該網(wǎng)格的1-鄰域網(wǎng)格集合;待所有網(wǎng)格的 1-鄰域網(wǎng)格集合創(chuàng)建完成之后,遞歸地創(chuàng)建網(wǎng)格的2-鄰域網(wǎng)格集合,依次類推。
[0017] 進一步地,步驟4)構(gòu)造 Voronoi剖分時,首先利用Voronoi圖計算每個采樣光子 所在Voronoi單元格的面積大小,然后利用快速鄰近查找到以相交點為圓心以內(nèi)核半徑為 半徑的圓盤內(nèi)的所有光子,并獲取其有效的輻射度以及Voronoi單元格的面積。
[0018] 進一步地,步驟6)使用棧結(jié)構(gòu)收集臨近的光子。
[0019] 進一步地,步驟7)采用如下公式計算輻射亮度:
[0021] 其中,X是視點光線與物體表面相交點;η是相交點X附近用于輻射亮度估計的光 子數(shù)目;是出射方向;叫:是光子入射方向;/.(Λ·,《,ω;,)是雙向反射分布函數(shù);Δ辦(jc為) 是光子P所攜帶的有效福射通量;Λ Ap是包含光子ρ的Voronoi多邊形的面積。
[0022] 本發(fā)明提出了一種新的具備幾何感知的精確輻射亮度計算方法,能夠利用局部表 面光子分布的幾何特征進行更加精確的輻射亮度估算;為了實現(xiàn)更精確的內(nèi)核估算,本發(fā) 明提出每個光子占據(jù)的局部表面的Voronoi圖剖分單元的輻射度概念,利用該輻射度進行 精確的輻射亮度估計計算。與標(biāo)準(zhǔn)的光子映射算法不同,本發(fā)明能夠繪制中消除由于非精 確估算內(nèi)核導(dǎo)致的可見偏差。
【附圖說明】
[0023] 圖1是本發(fā)明的輻射亮度計算方法的步驟流程圖。
[0024] 圖2是全局光子與焦散光子不意圖。
[0025] 圖3是Kd-tree建樹過程示意圖。
[0026] 圖4是光子及其占據(jù)的Voronoi剖分單元的示意圖。
[0027] 圖5是相交點X的估算內(nèi)核范圍內(nèi)的Voronoi多邊形示意圖。
[0028] 圖6是傳統(tǒng)光子映射方法和本發(fā)明方法的繪制效果對比圖。
[0029] 圖7是本發(fā)明繪制的場景的真實感效果圖。
【具體實施方式】
[0030] 為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面通過具體實施例和 附圖,對本發(fā)明做進一步說明。
[0031] 本發(fā)明提出了一種新的具備幾何感知的精確輻射亮度計算方法,采用基于 Kd-tree與Voronoi圖混合結(jié)構(gòu)的算法,能夠利用局部表面光子分布的幾何特征進行更加 精確的輻射亮度內(nèi)核估計。本發(fā)明的整個新的光子映射方法(輻射亮度計算方法)的流程 如圖1所示:
[0032] 1)針對待繪制的三維場景,構(gòu)造場景拓撲結(jié)構(gòu)及其Kd-tree層次組織;
[0033] 2)光子跟蹤過程開始:光源發(fā)射光子生成光子圖,光子圖存儲以多邊形面片為單 位,即每個光子一旦停止跟蹤停留在某個場景的表面時,除了存儲其光子的基本屬性外,還 存儲該光子所停留(即所屬)多邊形面片的唯一標(biāo)識(ID),同時每個多邊形都記錄落在其 中的光子的唯一標(biāo)識(ID);
[0034] 3)遍歷三維場景表面的每個多邊形,針對每個多邊形,收集屬于該多邊形的光子 并組織成二維Kd-tree結(jié)構(gòu);
[0035] 4)對每個多邊形表面構(gòu)造 Voronoi圖劃分,并計算劃分出的Voronoi單元的福射 通量密度;
[0036] 5)光線跟蹤過程開始:計算從視點發(fā)射的射線與場景的相交點X ;
[0037] 6)根據(jù)相交點X所屬的多邊形面片,利用該多邊形面片所保存的二維Kd-tree結(jié) 構(gòu)收集臨近的光子;
[0038] 7)對收集到的光子,根據(jù)Voronoi圖劃分找到這些光子所覆蓋的精確的面積,并 利用福射亮度計算公式計算出X點的福射亮度;
[0039] 8)合成出最終的真實感圖像。
[0040] 上述過程中,構(gòu)造場景拓撲結(jié)構(gòu)和Kd-tree層次組織(步驟1)-光子跟蹤一光線 跟蹤一合成最終真實感圖像(步驟8),這四步基本步驟與現(xiàn)有的光子映射方法流程一致, 不具備創(chuàng)新性,但是光子跟蹤過程中的2、3、4三個步驟的方法與以往的光子跟蹤方法不 同,光線跟蹤過程中的6、7步驟與以往的光線跟蹤方法以及輻射亮度計算方法不同,具有 創(chuàng)新性。
[00