專利名稱:一種光照烘培的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機圖形學(xué)技術(shù)領(lǐng)域,尤其涉及一種光照烘培的方法。
背景技術(shù):
在計算機圖形學(xué)應(yīng)用領(lǐng)域,全局光照效果發(fā)揮著重要的作用。這些效果一般包括軟陰影、間接光照、反射和折射等。然而,它們算法一般比較復(fù)雜且耗時,對于復(fù)雜的應(yīng)用或場景,很難達到實時性能 。目前比較普 遍的解決方案,是提前將這些效果預(yù)計算好,然后把結(jié)果保存在頂點的屬性里或者以紋理的方式保存,也稱為烘焙。屬于該種類型的技術(shù)主要包括福射體(irradiance volume)、預(yù)計算的福射度傳播(pre-computed radiancetransfer PRT)、環(huán)境遮擋(ambient occlusion)和軟陰影(soft shadow)。最近的商業(yè)軟件,比如3dsmax、Blender、Beast、Maya,都提供了強大的建模和烘焙工具。應(yīng)用最廣的烘焙技術(shù)包括頂點烘焙和紋理烘焙。頂點烘焙將光照信息預(yù)計算并存儲在模型的頂點屬性里。這種技術(shù)一般需要較少的存儲,通過硬件插值操作來恢復(fù)原始光照信號。不過,對于面積比較大的三角形來說,這種方法一般不能重構(gòu)出光照信號,因為它所依賴的硬件插值操作,目前還不能支持復(fù)雜的插值函數(shù)。這樣會造成一些走樣問題,比如光照的不連續(xù)現(xiàn)象。紋理烘焙,通常也成為光照圖技術(shù),將光照信息存儲在紋理里面。由于紋理里面包含了更多的采樣并且硬件支持復(fù)雜的紋理過濾技術(shù),這種方法一般可以產(chǎn)生高質(zhì)量的實時視覺效果。不過,對于復(fù)雜場景來說,紋理以及紋理坐標一般會占用大量的存儲,這往往會對實時性能以及可用性產(chǎn)生很大的制約。為了更好的利用紋理存儲,還有一類方法通過在頂點上存儲約簡的數(shù)據(jù)來代替紋理,從而減少實時繪制時的存儲。Mesh Colors發(fā)表在2012年Transaction on Graphics的一篇文章。它在模型的頂點上存儲多個三角形內(nèi)部的顏色采樣值。這種虛擬細分的方法不需要紋理方法中的參數(shù)化,而且還能避免紋理方法中縫隙不連續(xù)的走樣問題。不過,它需要通過片元著色器(fragment shader)實現(xiàn)mip-map信號重構(gòu)算法。這在紋理方法里是伴隨著硬件插值和光柵化之后,通過硬件實現(xiàn)的。因此這種方法會嚴重的影響實時的性能,只能用于比較小的場景里。最小二乘頂點烘焙(Least Squares Vertex Baking)通過在頂點位置計算最小二乘意義的最優(yōu)顏色解,從而達到最大的近似原始光照圖信號的目的。為了避免顏色梯度不連續(xù),他們還提出一個修正項來最小化錯誤率從而保持最優(yōu)解。這種方法比其他的頂點烘焙方法可以產(chǎn)生更精確的頂點顏色屬性,適合低頻光照場景以及充分細分后的場景。然而,對于一些粗糙的模型,比如包含稍大三角形的模型,即使使用該種方法,也很難得到好的效果。最近,一些研究者開始嘗試使用混合方法來解決這個問題。Schafer等人混合基于頂點和基于紋理的存儲方式。他們在高頻的區(qū)域,使用紋理的方法,低頻的地方就是用最小二乘意義的優(yōu)化頂點顏色插值。通過這種方式恢復(fù)原始的光照圖信號。最后,他們?nèi)诤蟽煞N存儲方式,避免在接縫處的不連續(xù)。為了進一步約簡紋理數(shù)據(jù)存儲,同樣是Schafer等人在頂點處存儲多分辨率的屬性值,然后通過硬件細分操作實現(xiàn)近似紋理方法的效果。不過由于他們在數(shù)據(jù)結(jié)構(gòu)上使用了不連續(xù)的內(nèi)存布局(頂點、邊、面上的數(shù)據(jù)單獨存儲),在實時繪制時,屬性的查詢制約了性能。模型細分算法一直以來都是一個比較熱門的研究領(lǐng)域。Krivanek等人提出一種算法,可以在輻射度(Radiosity)預(yù)計算的時候,通過考慮相鄰面片的輻射度變化,從而在變化快的區(qū)域進一步細分。這種方法可以加快輻射度算法的預(yù)計算,不需要像傳統(tǒng)的均勻細分的方法一樣消耗大量的時間。Coombe等人提出一種硬件加速的逐步求精輻射度實現(xiàn)方法。他們在紋理空間細分面片,通過考慮輻射度梯度的變化量。不過這種方法僅能細分四邊形場景。后來Wallner改進了算法,可以支持任意的三角形場景的細分。Bosch等人提出一種基于自適應(yīng)細分的交互性日光光照系統(tǒng)。它提供了一種自適應(yīng)的模型細分方法。不過其細分算法依賴于迭代的可見性計算,這是個耗時很嚴重的步驟,限制了其性能。所有的上述細分方法,都是依賴于具體的渲染技術(shù),比如輻射度、PRT等。Schafer 發(fā)表在 Computer&Graphics2012 (CG2Ol2)的一篇文章,題目是 MemoryEffi cient Light Baking (內(nèi)存有效的光照烘焙),其要解決的問題是紋理烘焙過程中紋理存儲太多的問題。文章提出一種混合的光照烘焙方法,結(jié)合了頂點烘焙和紋理烘焙。具體的算法流程如下 首先,找到那些包含低頻信息的三角形,即通過簡單的頂點插值就可以恢復(fù)光照信息的三角形。之后,這些三角形頂點的顏色,通過最小二乘優(yōu)化的方法來計算。剩下的三角形都屬于需要貼紋理的三角形,算法將這些三角形提取出來,重新參數(shù)化,分組,排序,變形并映射到新的紋理里。這張紋理比起初始紋理要小很多。之后在這張紋理里計算新的光照信息。在實時繪制時,通過著色器(shader)技術(shù),完成頂點插值以及紋理查找的融合,平滑紋理三角形與頂點三角形邊界的光照信息。這種技術(shù)方案在一定程度上減少了實時繪制時紋理的存儲量,但是仍然存在兩個問題一是實時繪制時沒有完全消除紋理,仍然需要紋理訪問,只不過紋理大小比原來小了,算法實現(xiàn)復(fù)雜,效率不高,大部分都要在CPU里完成;二是實時繪制時,要通過片元著色器(Fragment shader)實現(xiàn)頂點插值以及紋理獲取,影響實時性能。
發(fā)明內(nèi)容
為解決上述技術(shù)問題,本發(fā)明提出了一種光照烘培的方法,在傳統(tǒng)的紋理烘焙的基礎(chǔ)上,以光照圖為輸入,通過硬件加速技術(shù),快速對原始模型進行細分,計算細分后的三角形頂點信息,實時繪制時,通過利用光照圖紋理和細分后的三角形頂點數(shù)據(jù)信息,建立最小二乘意義上的優(yōu)化方程,最終利用稀疏矩陣快速求解技術(shù),計算最優(yōu)的頂點顏色,從而近似模擬原始的光照圖紋理信號,達到光照圖約簡和節(jié)省存儲的目的。為達此目的,本發(fā)明采用以下技術(shù)方案步驟A、輸入預(yù)處理的光照圖紋理,利用所述光照圖紋理創(chuàng)建一張標記紋理;步驟B、通過所述標記紋理計算每個三角形的像素級別紋理,根據(jù)所述像素級別紋理計算每個三角形的細分級別,輸出一張三角形細分紋理,根據(jù)所述細分紋理細分三角形,并對細分后需要執(zhí)行縫合操作的三角形執(zhí)行縫合操作;步驟C、計算所有所述細分后的三角形的優(yōu)化的定點顏色,對場景進行著色操作。進一步地,步驟A中,利用所述光照圖紋理創(chuàng)建一個標記紋理,還包括以下步驟
輸入光照圖紋理,使用片元著色器在紋理空間繪制所有三角形,每個三角形的位置由其紋理坐標乘以預(yù)設(shè)值Res計算得出;使用硬件光柵化采樣每個三角形,產(chǎn)生的片元對應(yīng)于每個三角形的一個采樣點;對于每個采樣點,訪問光照圖對應(yīng)的圖素,然后計算對應(yīng)圖素與周圍顏色梯度的插值,如果該插值超過預(yù)設(shè)闕值Hfvalue,將其標記為高頻像素,否則將其標記為低頻像素,得到保存有采樣點的標記信息的一張標記紋理。進一步地,步驟B中,通過所述標記紋理計算每個三角形的像素級別紋理,還包括以下步驟創(chuàng)建一個幀緩存對象,視口的大小設(shè)為Res*Res,保證對光照圖和標記紋理做逐像素操作;
繪制所有三角形,為每個三角形綁定一張光照圖、一張標記紋理和不同的格式參數(shù),為片元著色器傳遞逐面的數(shù)據(jù);通過硬件光柵化采樣每個三角形得到片元采樣,計算每個片元對應(yīng)的紋理坐標TC。,方位標記紋理,獲取其圖素值;如果M。無效,輸出無效像素;如果M。是有效低頻像素,輸出低頻像素,不需要細分;如果M。是有效高頻像素,進一步判斷所述高頻像素所屬三角形是否需要細分及其細分級別,得到像素級別紋理,所述像素級別紋理的像素保存了所屬三角形細分級別參數(shù)以及三角形索引兒。進一步地,所述格式參數(shù)包括三角形頂點坐標和三角形索引凡。進一步地,所述進一步判斷所述高頻像素所屬三角形是否需要細分及其細分級另U,還包括以下步驟找到所述高頻像素的最近的子三角形采樣點,如果發(fā)現(xiàn)所述采樣點在某個子三角形頂點上,則判斷不需要在該細分級別下細分采樣所屬三角形,輸出上一級細分級別的高
頻像素;如果所述采樣點不在任何子三角形頂點上,計算其最近的子三角形Tnea,的三個頂點紋理坐標,通過訪問光照圖得到三個新的子三角形的采樣顏色值,計算所述最近的子三角形Tnea,在本細分級別下的新的重心坐標,計算所述最近的子三角形Tnea,的三個頂點的插值顏色Ci,訪問光照圖,得到當(dāng)前采樣的顏色C。,如果所述插值顏色Ci與所述當(dāng)前采樣的C。的插值超過Hfvalm,則輸出本級別細分級別的高頻像素,再次細分后重新計算,否則輸出上一級別聞頻像素。進一步地,步驟B中,根據(jù)所述像素級別紋理計算每個三角形的細分級別,輸出一張三角形細分紋理,還包括以下步驟繪制其數(shù)量為Res*Res的點,使用GPU中的發(fā)射法,頂點著色器做發(fā)射操作,對于每個頂點,計算其紋理坐標,訪問像素級別紋理,獲取所屬三角形的三角形索引Ti和細分級別參數(shù)R,根據(jù)所述所屬三角形的三角形索引Ti,計算頂點的正確位置后重新設(shè)置頂點位置,將所述細分級別參數(shù)R和所述所屬三角形的三角形索引Ti封裝發(fā)送至片元著色器,硬件片元邏輯操作,輸出三角形的正確的細分級別,得到一張大小等于三角形個數(shù)的三角形細分紋理,所述三角形細分紋理的每個像素保存了所屬三角形的細分級別參數(shù)。
進一步地,步驟B中,根據(jù)所述細分級別紋理細分三角形,還包括以下步驟如果三角形和周圍三角形具有相同的細分級別,則判斷其不需執(zhí)行縫合操作,利用該三角形的分辨率R,計算所有子三角形的頂點采樣坐標,具體為對于上三角A = [Pijj., Ph,j+1,PhJ,I 彡 i 彡 R,0 彡 j 彡 R_i
對于下三角▽^ R,0 ^ i ^ R-2,1 ^ j ^ R_l_i ;如果三角形和周圍三角形沒有相同的細分級別,則對三角形按其分辨率進行細分,得到細分三角形組Tsub和邊上的額外采樣點集S,并判斷其需要執(zhí)行縫合操作。進一步地,步驟B中,對細分后需要執(zhí)行縫合操作的三角形執(zhí)行縫合操作,還包括以下步驟對所述細分三角形組Tsub中的每個三角形t,找到其臨界三角形里分辨率最高的邊e,找到T類型的冗余無效頂點,找到所述分辨率最高的邊e上中間的采樣點S,連接所述采樣點s和其對應(yīng)的三角形t的對角頂點,將所述三角形t分割成兩個新的小三角形A和t2,將所述采樣點s和所述對應(yīng)的三角形t分別從所述額外采樣點集s和所述細分三角形組Tsub中刪除,將所述新的小三角形&和t2插入所述細分三角形組Tsub中,重復(fù)上述步驟,直到所述細分三角形組Tsub為空。進一步地,所述找到所述高頻像素的最近的子三角形采樣點,還包括以下步驟計算對于一個表面點P,距離最近的子三角形頂點采樣,具體為將距離表面點P最近計算最近的子三角形分為下三角和上三角,通過以下公式計算頂點采樣B = = I^ZJ, P 是 p 的重心坐標Co = [Oi, Co j, cok] = RP-B如果Co = 0,p恰好在子三角形的頂點采樣上,重心坐標就等于B ;如果Oi+Oj+Ok= I,最近的子三角形頂點為Pi+1,」,Pi, j+1, Pi, j ;如果Oi+Oj+Ok= I,最近的子三角形頂點為Pi, j+1, Pi+1,」,Pi+1,j+1。進一步地,步驟C中,計算所有所述細分后的三角形的優(yōu)化的頂點顏色,還包括以下步驟對整個模型采用均勻泊松采樣,對于泊松采樣集合P= {Pl,…,pm},每個采樣P保存其對應(yīng)的初始紋理中獲取的顏色值f (P),以及其對應(yīng)的三角形索引Ti ;設(shè)a (p),0 (p),
Y(P)是P在所述三角形索引Ti中的重心坐標三個分量,r、s和t是所述三角形索引Ti三個頂點的索引,c(k)表示索引為k的頂點顏色,I(p)是針對三角形Ti,使用重心坐標插值計算出來的插值顏色I(P) = a (p) c (r (p)) + @ (p) c (s (p)) + Y (p) c (t (p));插值出的顏色與初始紋理中顏色的最小二乘插值錯誤率F F = X aP(J(P)-f(P))2 ’因為p是泊松采樣,所以判斷每個采樣點所表示的模型
面積一樣,因此上式中的^^看做常量,為了最小化F,可以得到下面一個線性方程組Ax = b,其中
權(quán)利要求
1.一種光照烘培的方法,其特征在于,包括以下步驟 A、輸入預(yù)處理的光照圖紋理,利用所述光照圖紋理創(chuàng)建一張標記紋理; B、通過所述標記紋理計算每個三角形的像素級別紋理,根據(jù)所述像素級別紋理計算每個三角形的細分級別,輸出一張三角形細分紋理,根據(jù)所述細分紋理細分三角形,并對細分后需要執(zhí)行縫合操作的三角形執(zhí)行縫合操作; C、計算所有所述細分后的三角形的優(yōu)化的定點顏色,對場景進行著色操作。
2.根據(jù)權(quán)利要求I所述的光照烘培的方法,其特征在于,所述步驟A中,利用所述光照圖紋理創(chuàng)建一個標記紋理,進一步包括以下步驟 輸入光照圖紋理,使用片元著色器在紋理空間繪制所有三角形,每個三角形的位置由其紋理坐標乘以預(yù)設(shè)值Res計算得出; 使用硬件光柵化采樣每個三角形,產(chǎn)生的片元對應(yīng)于每個三角形的一個采樣點; 對于每個采樣點,訪問光照圖對應(yīng)的圖素,然后計算對應(yīng)圖素與周圍顏色梯度的插值,如果該插值超過預(yù)設(shè)闕值Hfvalm,將其標記為高頻像素,否則將其標記為低頻像素,得到保存有采樣點的標記信息的一張標記紋理。
3.根據(jù)權(quán)利要求I所述的光照烘培的方法,其特征在于,所述步驟B中,通過所述標記紋理計算每個三角形的像素級別紋理,進一步包括以下步驟 創(chuàng)建一個幀緩存對象,視口的大小設(shè)為Res乘以Res,保證對光照圖和標記紋理做逐像素操作; 繪制所有三角形,為每個三角形綁定一張光照圖、一張標記紋理和不同的格式參數(shù),為片元著色器傳遞逐面的數(shù)據(jù); 通過硬件光柵化采樣每個三角形得到片元采樣,計算每個片元對應(yīng)的紋理坐標TC。,方位標記紋理,獲取其圖素值; 如果M。無效,輸出無效像素; 如果M。是有效低頻像素,輸出低頻像素,不需要細分; 如果M。是有效高頻像素,進一步判斷所述高頻像素所屬三角形是否需要細分及其細分級別,得到像素級別紋理,所述像素級別紋理的像素保存了所屬三角形細分級別參數(shù)以及三角形索引兒。
4.根據(jù)權(quán)利要求3所述的光照烘培的方法,其特征在于,所述格式參數(shù)包括三角形頂點坐標和三角形索引凡。
5.根據(jù)權(quán)利要求3所述的光照烘培的方法,其特征在于,進一步判斷所述高頻像素所屬三角形是否需要細分及其細分級別,進一步包括以下步驟 找到所述高頻像素的最近的子三角形采樣點,如果發(fā)現(xiàn)所述采樣點在某個子三角形頂點上,則判斷不需要在該細分級別下細分采樣所屬三角形,輸出上一級細分級別的高頻像素; 如果所述采樣點不在任何子三角形頂點上,計算其最近的子三角形Tnea,的三個頂點紋理坐標,通過訪問光照圖得到三個新的子三角形的采樣顏色值,計算所述最近的子三角形Tnear在本細分級別下的新的重心坐標,計算所述最近的子三角形Tnea,的三個頂點的插值顏色Ci,訪問光照圖,得到當(dāng)前采樣的顏色C。,如果所述插值顏色Ci與所述當(dāng)前采樣的C。的插值超過HFvalue,則輸出本級別細分級別的高頻像素,再次細分后重新計算,否則輸出上一級別聞頻像素。
6.根據(jù)權(quán)利要求I所述的光照烘培的方法,其特征在于,所述步驟B中,根據(jù)所述像素級別紋理計算每個三角形的細分級別,輸出一張三角形細分紋理,進一步包括以下步驟 繪制其數(shù)量為Res*Res的點,使用GPU中的發(fā)射法,頂點著色器做發(fā)射操作,對于每個頂點,計算其紋理坐標,訪問像素級別紋理,獲取所屬三角形的三角形索引Ti和細分級別參數(shù)R,根據(jù)所述所屬三角形的三角形索引Ti,計算頂點的正確位置后重新設(shè)置頂點位置,將所述細分級別參數(shù)R和所述所屬三角形的三角形索引Ti封裝發(fā)送至片元著色器,硬件片元邏輯操作,輸出三角形的正確的細分級別,得到一張大小等于三角形個數(shù)的三角形細分紋理,所述三角形細分紋理的每個像素保存了所屬三角形的細分級別參數(shù)。
7.根據(jù)權(quán)利要求I所述的光照烘培的方法,其特征在于,所述步驟B中,根據(jù)所述細分級別紋理細分三角形,進一步包括以下步驟 如果三角形和周圍三角形具有相同的細分級別,則判斷其不需執(zhí)行縫合操作,利用該三角形的分辨率R,計算所有子三角形的頂點采樣坐標,具體為對于上三角A = [Pijj, Pi^ljjtl, Pi^ljj], I ^ i ^ R,0 ^ j ^ R-i 對于下三角 v = fc’U+J ,3 ^ R,0 ^ i ^ R-2,I ^ j ^ R-l-i ; 如果三角形和周圍三角形沒有相同的細分級別,則對三角形按其分辨率進行細分,得到細分三角形組Tsub和邊上的額外采樣點集S,并判斷其需要執(zhí)行縫合操作。
8.根據(jù)權(quán)利要求I所述的光照烘培的方法,其特征在于,所述步驟B中,對細分后需要執(zhí)行縫合操作的三角形執(zhí)行縫合操作,進一步包括以下步驟 對所述細分三角形組Tsub中的每個三角形t,找到其臨界三角形里分辨率最高的邊e,找到T類型的冗余無效頂點,找到所述分辨率最高的邊e上中間的采樣點S,連接所述采樣點s和其對應(yīng)的三角形t的對角頂點,將所述三角形t分割成兩個新的小三角形h和t2,將所述采樣點s和所述對應(yīng)的三角形t分別從所述額外采樣點集s和所述細分三角形組Tsub中刪除,將所述新的小三角形h和t2插入所述細分三角形組Tsub中,重復(fù)上述步驟,直到所述細分三角形組Tsub為空。
9.根據(jù)權(quán)利要求5所述的光照烘培的方法,其特征在于,找到所述高頻像素的最近的子三角形采樣點,進一步包括以下步驟 計算對于一個表面點P,距離最近的子三角形頂點采樣,具體為將距離表面點P最近計算最近的子三角形分為下三角和上三角,通過以下公式計算頂點采樣 B =,P是P的重心坐標 CO = [ CO J, CO j, COk] = RP-B 如果《 =0,p恰好在子三角形的頂點采樣上,重心坐標就等于B ; 如果Oi+Oj+Ok= I,最近的子三角形頂點為Pi+1,j, Pi.j+i, Pi, j ; 如果Oi+Oj+Ok= I,最近的子三角形頂點為Pi.j+i, Pi+1,j, Pi+1,j+1。
10.根據(jù)權(quán)利要求I所述的光照烘培的方法,其特征在于,步驟C中,計算所有所述細分后的三角形的優(yōu)化的頂點顏色,進一步包括以下步驟 對整個模型采用均勻泊松采樣,對于泊松采樣集合P= (P1,…,Pm},每個采樣P保存其對應(yīng)的初始紋理中獲取的顏色值f (P),以及其對應(yīng)的三角形索引Ti,設(shè)a (p),^ (p),Y (P)是P在所述三角形索引Ti中的重心坐標三個分量,r、s和t是所述三角形索引Ti三個頂點的索引,c(k)表示索引為k的頂點顏色,I(p)是針對三角形Ti,使用重心坐標插值計算出來的插值顏色 I(P) = a (p) c (r (p)) + 0 (p) c (s (p)) + Y (p) c (t (p)); 插值出的顏色與初始紋理中顏色的最小二乘插值錯誤率F
全文摘要
本發(fā)明公開了一種光照烘培的方法,首先,輸入預(yù)處理的光照圖紋理,利用所述光照圖紋理創(chuàng)建一張標記紋理;通過所述標記紋理計算每個三角形的像素級別紋理,根據(jù)所述像素級別紋理計算每個三角形的細分級別,輸出一張三角形細分紋理,根據(jù)所述細分紋理細分三角形,并對細分后需要執(zhí)行縫合操作的三角形執(zhí)行縫合操作;計算所有所述細分后的三角形的優(yōu)化的頂點顏色,對場景進行著色操作。本發(fā)明能夠利用硬件加速,快速細分三角形,計算最優(yōu)的頂點顏色,近似模擬原始的光照圖紋理信號,達到光照圖約簡和節(jié)省存儲的目的。
文檔編號G06T15/50GK102750728SQ20121021562
公開日2012年10月24日 申請日期2012年6月28日 優(yōu)先權(quán)日2012年6月28日
發(fā)明者李楊, 李淳芃, 王兆其 申請人:北京中科廣視科技有限公司