本發(fā)明涉及交互渲染領(lǐng)域,特別涉及一種基于模擬折射和全局光照的3D模型渲染方法及系統(tǒng)。
背景技術(shù):
:在很多應(yīng)用中,交互操作比真實感更重要。這使得很多研究者為了滿足速度的要求模擬真實的效果,通過并行計算增加可用的計算能力使得用標(biāo)準(zhǔn)的光線追蹤、路徑追蹤技術(shù)實現(xiàn)交互式真實感成為可能,盡管在主流應(yīng)用中較高的計算開銷抑制了這種并行計算。因此,研究者們開發(fā)出增強(qiáng)硬件的陰影模擬,焦散線,全局光照,反射,以及基本反射效果。現(xiàn)有技術(shù)中,基于GPU的折射算法的限制為:只能計算出一次折射的效果。而現(xiàn)實場景中很少出現(xiàn)折射光線只通過一個面的情況。由于人們經(jīng)常通過類似眼鏡的絕緣物體看到折射光線通過多個面的效果,所以計算折射光線通過多個面之后的效果非常重要。目前,研究者們已經(jīng)提出了很多方案來模擬折射光線通過一個面的效果。一種方法是使用GPUs的可編程接口來計算折射光線。折射之后的顏色決定于折射系數(shù)和環(huán)境映像,或者取決于描述附近幾何信息的變化的紋理。Schmidt使用一種基于幾何的技術(shù),類似于Ofek和Rappoport實現(xiàn)折射效果的方法。當(dāng)計算物體凹表面的時候,Ofek的方法會出現(xiàn)問題,但是Schmidt的方法在計算物體凹表面的折射效果時也出現(xiàn)同樣的問題。在這種情況下,將反射之后的頂點信息準(zhǔn)確地連接到渲染流程證明比較困難。一些研究者考慮過多面反射,比如,Guy和Soler交互地渲染簡單凸幾何表面的折射效果。由于他們經(jīng)過分析計算折射后的頂點并每三幀更新分析后的面片,他們的方法無法適用于復(fù)雜的物體。又比如,Kay和Greenburg介紹了一個“thickness”(厚度)參數(shù)來計算兩次反射的物體;這個方法只適用于標(biāo)準(zhǔn)的、薄的物體,比如窗子,但是很多物體的厚度并不均勻。再比如,Diefenbach和Badler使用了一個多步驟的方法在圖形硬件上交互地渲染。而Ohbuchi提出一種定點追蹤的預(yù)處理來模擬在一個多媒體原型處理器上的交互式折射效果。再比如,Heidrich等人使用光域來中和交互操作帶來的較高的內(nèi)存消耗。又比如,Hakura等人通過影響GPU資源來提高光線追蹤的速度。但是,這種方法不能用在實時應(yīng)用中,即使當(dāng)CPU和GPU都被優(yōu)化。技術(shù)實現(xiàn)要素:本發(fā)明要解決的技術(shù)問題是,如何解決了目前很多交互應(yīng)用致力于真實感渲染,但是應(yīng)用對幀速率的要求往往使得圖形硬件無法在保證速率的情況下實現(xiàn)某些效果的逼真渲染的問題,即如何通過實現(xiàn)折射效果,并實現(xiàn)了全局光照的繪制。解決上述技術(shù)問題,本發(fā)明提供了一種基于模擬折射和全局光照的3D模型渲染方法,包括如下步驟:對圖像進(jìn)行光柵化處理,得到每個像素點的基礎(chǔ)特征值:{入射方向擊中表面的第一折射位置P1,P1點所在表面的法向量根據(jù)所述基礎(chǔ)特征值得到第一次折射光線方向通過模擬第二次折射位置P2點和P2所在表面的法向量計算得到第二次折射光線根據(jù)所述進(jìn)行全局光照的繪制后完成3D模型渲染。更進(jìn)一步,模擬P2點的計算方法進(jìn)一步為:其中,d表示P2和P1的距離,已知P1和近似的位置只需要要找到一個近似的距離故:其中,γ為漸進(jìn)系數(shù),其中,其中,θi表示入射向量和表面法向量的夾角,θt表示傳輸向量和表面法向量的逆向量的夾角,和分別指:法向量與物體的交點距離、入射向量與物體的交點距離,用于計算P2的位置。更進(jìn)一步,所述法向量的計算方法進(jìn)一步為:根據(jù)所述按照與眼睛最遠(yuǎn)的表面的距離或者第二個表面與眼睛的距離,得到法向量更進(jìn)一步,模擬P2點時,基于Fragmentshaders面片著色計算TIR全內(nèi)反射,同時將θ_i的值限制在一個閥值θ_crit以內(nèi),用以使折射光線射向退出的面。更進(jìn)一步,模擬P2點時,光線追蹤在RIT區(qū)域使用16次或64次采樣。更進(jìn)一步,在模擬P2點時使射出的法向量垂直于攝像機(jī)的lookat向量更進(jìn)一步,所述進(jìn)行全局光照的繪制的方法具體為:基于一個四元數(shù)其中,表示表面上的一點,S表示表面的幾何特性,fr表示在處對于不同入射角ω'和出射角ω的BRDF光學(xué)材料特定,Le表示處往ω方向上自發(fā)出的光能,We是作用方程的集合;進(jìn)一步,由能量守恒公式和輻射率定義,可以得到繪制方程用以進(jìn)行全局光照的繪制,用以描述了兩點之間的一次作用的輻射率變化情況:更進(jìn)一步,所述能量守恒公式的建立步驟為:RadiancePower/Flux定義光通量Φ為單位時間通過有限區(qū)域的指定光頻范圍的輻射能量,根據(jù)能量守恒,對于表面一點的鄰近區(qū)域,其出射光通量Φout等于自發(fā)射光通量Φe與對從各個方向入射的光通量Φin的積分之和,用公式表示為:其中,是入射光的微分立體角,ω是出射光的立體角,θ是入射光方向與所在表面法向的夾角,fr為所在區(qū)域的BRDF方程。更進(jìn)一步,所述輻射率公式定義的步驟為:Radiance輻射率定義為L,dω為在指定方向上的單位立體角和通過垂直此方向的區(qū)域dA的單位面積輻射通量,用公式表示為:基于上述本發(fā)明還提供了一種基于模擬折射和全局光照的3D模型渲染系統(tǒng),包括:預(yù)處理單元,用以對圖像進(jìn)行光柵化處理,得到每個像素點的基礎(chǔ)特征值:{入射方向擊中表面的點P1,P1點所在表面的法向量以及,根據(jù)所述基礎(chǔ)特征值得到第一次折射光線方向模擬單元,通過模擬第二次反射位置P2點和P2所在表面的法向量計算得到第二次折射光線全局光照單元,用以根據(jù)所述進(jìn)行全局光照的繪制后完成3D模型渲染本發(fā)明的有益效果:本發(fā)明基于模擬折射和全局光照的3D模型渲染方法,在GPU上分為兩步,可以實現(xiàn)二次折射的效果,且可以在現(xiàn)在一般的圖形硬件上運行,而現(xiàn)今的交互技術(shù)往往局限于一次折射。本發(fā)明基于模擬折射和全局光照的3D模型渲染系統(tǒng),提出了一個基于圖像空間的方法來模擬二次折射效果,并進(jìn)行了全局光照的繪制。該系統(tǒng)可以在當(dāng)前的GPUs上面交互運行,能夠有效渲染復(fù)雜模型的折射效果。附圖說明圖1本發(fā)明一實施例中的基于模擬折射和全局光照的3D模型渲染方法流程示意圖。圖2是基礎(chǔ)折射的原理示意圖。圖3a-圖3f是不同處理方式下的顯示結(jié)果。圖4a-圖4d表示折射效果示意圖。圖5是不同視角下的折射效果示意圖。圖6a-圖6c表示不同方式下折射效果示意圖(飛機(jī))。圖7a-圖7c表示不同方式下折射效果示意圖(墻壁)。圖8是基于模擬折射和全局光照的3D模型渲染系統(tǒng)結(jié)構(gòu)示意圖。具體實施方式現(xiàn)在將參考一些示例實施例描述本公開的原理??梢岳斫?,這些實施例僅出于說明并且?guī)椭绢I(lǐng)域的技術(shù)人員理解和實施例本公開的目的而描述,而非建議對本公開的范圍的任何限制。在此描述的本公開的內(nèi)容可以以下文描述的方式之外的各種方式實施。如本文中所述,術(shù)語“包括”及其各種變體可以被理解為開放式術(shù)語,其意味著“包括但不限于”。術(shù)語“基于”可以被理解為“至少部分地基于”。術(shù)語“一個實施例”可以被理解為“至少一個實施例”。術(shù)語“另一實施例”可以被理解為“至少一個其它實施例”?!窕A(chǔ)折射給定一個點P1(如圖2)及其表面信息,計算該點的一次折射相對容易。折射光線的路徑服從Snell法則,即:nisinθi=ntsinθt其中,ni和nt表示入射介質(zhì)和傳輸截止的反射系數(shù)。θi表示入射向量和表面法向量的夾角,θt表示傳輸向量和表面法向量的逆向量的夾角。光線追蹤的時候,通過復(fù)雜物體的折射光線的路徑比較復(fù)雜,因為折射光線會獨立地與幾何面相交,并遵守Snell法則循環(huán)折射。不幸的是,GPU處理不同像素的并行計算開銷很大。如圖2所示,光柵化決定了P1和一個簡單的面片著色可以計算出但是,P2的具體位置無法得知,除非使用基于光線的方法。由于GPU上的光線追蹤技術(shù)比較慢,復(fù)雜模型的多個面的反射計算無法實現(xiàn)交互的速度。向量與茶壺表面的P1點相交,以相對與法向量折射角為θi為基礎(chǔ)、射向折射方向在P2、P3、P4點的折射由物理計算獲得。本申請的方法只折射兩次,使用距離和計算P2的位置?!窕趫D像的渲染相比于使用基于GPU的光線追蹤,本申請?zhí)岢鐾ㄟ^光柵化即可計算的模擬用于兩次反射的信息,考慮到光柵化之后被獲知的信息。對每個像素,可以很容易知道下述信息:入射方向擊中表面的點P1,以及P1點所在表面的法向量使用上述信息,傳輸方向可以通過Snell法則倍計算出來??紤]需要找出兩次折射后的光線所需的信息。為了計算點P2和法向量就以足夠。由于找到很容易,我們的主要貢獻(xiàn)是用一個簡單的方法模擬P2和再次強(qiáng)調(diào),我們使用近似的點P2和法向量因為準(zhǔn)確獲取它們的值需要進(jìn)行每個像素的光線追蹤。計算出之后,在本申請中假設(shè)折射光線設(shè)想一個無限的環(huán)境映像去獲取一個折射的顏色。在圖2中,向量與茶壺表面的P1點相交,以相對與法向量折射角為θi為基礎(chǔ)、射向折射方向在P2、P3、P4點的折射由物理計算獲得。我們的方法只折射兩次,使用距離和計算P2的位置。請參考,圖1本發(fā)明一實施例中的基于模擬折射和全局光照的3D模型渲染方法流程示意圖,包括如下步驟:步驟S100對圖像進(jìn)行光柵化處理,得到每個像素點的基礎(chǔ)特征值:{入射方向擊中表面的第一折射位置P1,P1點所在表面的法向量步驟S101根據(jù)所述基礎(chǔ)特征值得到第一次折射光線方向步驟S102通過模擬第二次折射位置P2點和P2所在表面的法向量計算得到第二次折射光線步驟S103根據(jù)所述進(jìn)行全局光照的繪制后完成3D模型渲染。在所述步驟S102中,作為本實施例中的優(yōu)選,模擬P2點的計算方法進(jìn)一步為:其中,d表示P2和P1的距離,已知P1和近似的位置只需要要找到一個近似的距離故:其中,γ為漸進(jìn)系數(shù),其中,其中,θi表示入射向量和表面法向量的夾角,θt表示傳輸向量和表面法向量的逆向量的夾角,和分別指:法向量與物體的交點距離、入射向量與物體的交點距離,用于計算P2的位置。在所述步驟S102中,優(yōu)選地,所述法向量的計算方法進(jìn)一步為:根據(jù)所述按照與眼睛最遠(yuǎn)的表面的距離或者第二個表面與眼睛的距離,得到法向量在所述步驟S102中,模擬P2點時,基于Fragmentshaders面片著色計算TIR全內(nèi)反射,同時將θ_i的值限制在一個閥值θ_crit以內(nèi),用以使折射光線射向退出的面。在所述步驟S102中,模擬P2點時,光線追蹤在RIT區(qū)域使用16次或64次采樣。在所述步驟S102中,在模擬P2點時使射出的法向量垂直于攝像機(jī)的lookat向量在所述步驟S103中,所述進(jìn)行全局光照的繪制的方法具體為:基于一個四元數(shù)其中,表示表面上的一點,S表示表面的幾何特性,fr表示在處對于不同入射角ω'和出射角ω的BRDF光學(xué)材料特定,Le表示處往ω方向上自發(fā)出的光能,We是作用方程的集合;進(jìn)一步,由能量守恒公式和輻射率定義,可以得到繪制方程用以進(jìn)行全局光照的繪制,用以描述了兩點之間的一次作用的輻射率變化情況:作為本實施例中的優(yōu)選,所述能量守恒公式的建立步驟為:RadiancePower/Flux定義光通量Φ為單位時間通過有限區(qū)域的指定光頻范圍的輻射能量,根據(jù)能量守恒,對于表面一點的鄰近區(qū)域,其出射光通量Φout等于自發(fā)射光通量Φe與對從各個方向入射的光通量Φin的積分之和,用公式表示為:其中,是入射光的微分立體角,ω是出射光的立體角,θ是入射光方向與所在表面法向的夾角,fr為所在區(qū)域的BRDF方程。作為本實施例中的優(yōu)選,所述輻射率公式定義的步驟為:Radiance輻射率定義為L,dω為在指定方向上的單位立體角和通過垂直此方向的區(qū)域dA的單位面積輻射通量,用公式表示為:1.1模擬P2點由于光線追蹤計算開銷太大,其不能提供有價值的信號,來表明如何近似第二次反射的位置??紤]一個光線的參數(shù)在本申請的場景中,本申請可以將光線寫成其中d表示P2和P1的距離。知道了P1和近似的位置只需要要找到一個近似的距離所以:其中γ為漸進(jìn)系數(shù)。最簡單的模擬的方法是幾何前面和背部的沒有經(jīng)過反射的距離這種方法的實現(xiàn)很簡單,可以通過渲染反深度信息來獲取。(比如,使用GL_GREATER而不是GL_LESS),將z緩沖存入一個紋理(圖3a),再次渲染法線圖(圖3b),并通過兩個表面的z的值計算距離值(表3c)。這種簡單的近似在計算不太復(fù)雜的反射系數(shù)較小的凸幾何體時效果較好。由于反射光線朝著逆向的法向量方向向內(nèi)彎曲(因為nt>ni),當(dāng)nt變得很大時,接近于-這表明我們需要在和之間進(jìn)行插值,基于θi和θt,來獲取一個更準(zhǔn)確的的模擬。我們使用這種方法來運行結(jié)果,預(yù)計算每個頂點的但并使用下述公式進(jìn)行插值:預(yù)計算的d的樣本可以實現(xiàn)更準(zhǔn)確的效果,如果以緊湊的、易于訪問的方式存儲模型。我們嘗試將模型存儲為64*64的幾何圖片,并從64*64個方向?qū)缀螆D片里的每個圖元的d進(jìn)行采樣。這樣我們就獲得4096*4096個包含采樣的d的值的紋理。但是,用這種方法插值會產(chǎn)生明顯的離散化的d的值,從而產(chǎn)生更糟糕的結(jié)果,相比于之前描述的方法。其中,圖3a-圖3f具體為:到后表面的距離圖3a,到前表面圖3b,前、后表面之間圖3c。后表面的法線圖3d以及前表面的法線圖3e。最終結(jié)果圖3f。1.2確定法向量N2確定了之后,計算的最后要求是計算法向量法向量和面片存儲在頂點處,但是確定哪一個多邊形與相交開銷比較大,除非我們使用基于圖像的方法??紤]凸表面物體,我們通過兩個步驟光柵化所有的幾何圖形:一個圖形裁剪前面,另一個裁剪后面。如果我們在第一步將表面法向量作為像素值渲染入紋理(如圖3d所示),那么在第二步我們可以把估算的射出點投射到紋理空間,并且標(biāo)記紋理空間以找到法向量。用這種方法計算凸?fàn)钗矬w的折射效果會產(chǎn)生一些問題,因為多個表面可能會投射到相同的z緩沖圖元上。我們的方法將會為多余的折射增加紋理,但我們?nèi)耘f不清楚如何模擬更多折射產(chǎn)生的相交坐標(biāo)(比如,圖2中的P3、P4)。與此同時,計算二次折射的效果能夠滿足多次折射的效果。如果我們不為折射產(chǎn)生的相交坐標(biāo)擴(kuò)展紋理,可以使用另外兩種方法來解決凹物體表面的折射效果:計算第二次折射相交的點根據(jù)與眼睛最遠(yuǎn)的表面的距離或者第二個表面(比如,第一個背部表面)與眼睛的距離(圖2中的黃色或黑色的點)。唯一的不同是在第一步驟將哪個表面渲染到紋理,并在第二步驟中用以計算和圖4a-圖4d和圖5表示了這種不同。佛像的基座,使用圖4a最遠(yuǎn)的多邊形,或者圖4b第二個面來計算我們的二次折射效果,圖4c使用一次折射,以及圖4d使用計算6次折射的光線追蹤生成的效果。圖5是一具馬的模型在兩個視角下的效果。參考圖像是使用光線追蹤對每個像素進(jìn)行64次采樣的結(jié)果,右邊的圖像比較了我們的方法與光線追蹤對每個像素進(jìn)行一次采樣所生成折射效果。如果渲染深度比較復(fù)雜的物體,使用最遠(yuǎn)的多邊形會產(chǎn)生較好的折射效果,而使用第二個面的紋理會產(chǎn)生更平滑的效果,但使用第二個面就忽視了距離眼睛更遠(yuǎn)的多邊形的折射效果。對于近乎凸表面的無題來說,上述的不同效果可以忽視。1.3遺留問題我們的方法存在三個問題:沒有預(yù)處理計算來生成內(nèi)部反射的效果,可能無法投射到一個背面多邊形上,或者可能由于凹物體表面投射到一個不正確的多邊形上。面片著色(Fragmentshaders)可以計算全內(nèi)反射(TIR),使用前面與背面的循環(huán)光線反彈。但是,這會極大降低了代碼的運行速度,因為會由于圖像空間方法產(chǎn)生的誤差產(chǎn)生冗余計算。我們在實現(xiàn)的時候?qū)ⅵ萯的值限制在一個閥值θcrit以內(nèi)。使用閥值會有效地使折射光線射向退出的面。RIT區(qū)域在使用一次采樣的時候會產(chǎn)生走樣;對于復(fù)雜的物體,光線追蹤在RIT區(qū)域使用16次或64次采樣能夠避免走樣現(xiàn)象。盡管我們的方法在物理角度并不準(zhǔn)確,但這種方法在TIR區(qū)域使用1次采樣能夠相對平滑的效果。這里我們來考慮當(dāng)?shù)闹捣浅4蟮那闆r。的值過大會使得的位置落在物體之外,如圖3d中所示的黑色紋理像素。從概念角度來講,這表示與物體的邊緣相交。這個問題會偶爾發(fā)生,通常當(dāng)物體的表面凹進(jìn)去并且折射系數(shù)大于1.5。為了使我們的結(jié)果避免走樣,我們使射出的法向量垂直于攝像機(jī)的lookat向量特別地,我們將投射到垂直于(比如,的平面。改善的值會避免這個問題。最后一個問題主要發(fā)生在這樣的物體上:折射介質(zhì)凹進(jìn)去,并且距離視點較近,其深度復(fù)雜值大于2。如圖5所示,由從視點發(fā)出的光線與馬的模型的身體相較于點點可能會被投射到馬腿上,盡管點P2的實際位置不再馬的身體上。不管第二次折射選擇哪個面進(jìn)行計算,這個問題我們的方法產(chǎn)生的走樣現(xiàn)象,并且當(dāng)物體表面凹得很明顯的時候走樣現(xiàn)象會很突出?!袢止庹赵谇懊娌襟E的基礎(chǔ)上,我們進(jìn)一步進(jìn)行全局光照的計算。全局光照的計算本質(zhì)上是解決繪制問題。繪制問題可以表示為一個四元數(shù)問題,其中,表示表面上的一點,S表示表面的幾何特性,fr表示在處對于不同入射角ω'和出射角ω的BRDF光學(xué)材料特定,Le表示處往ω方向上自發(fā)出的光能,We是作用方程的集合。繪制問題對光與表面的相互作用We進(jìn)行建模,設(shè)法計算出從表面輻射出去并到達(dá)接收設(shè)備的光能量。繪制方程被提出來解決繪制問題,首先定義光通量(RadiancePower/Flux)Φ為單位時間通過有限區(qū)域的指定光頻范圍的輻射能量。根據(jù)能量守恒,對于表面一點的鄰近區(qū)域,其出射光通量Φout等于自發(fā)射光通量Φe與對從各個方向入射的光通量Φin的積分之和,用公式表示為:其中,是入射光的微分立體角,ω是出射光的立體角,θ是入射光方向與所在表面法向的夾角,fr為所在區(qū)域的BRDF方程。光通量與表面面積的大小有光,對于一個很小的區(qū)域,為了表示方便,定義輻射率(Radiance)L,dω為在指定方向上的單位立體角和通過垂直此方向的區(qū)域dA的單位面積輻射通量,用公式表示為:由能量守恒公式和輻射率定義,可以得到繪制方程,它描述了兩點之間的一次作用的輻射率變化情況:●結(jié)果我們在OpenGL上實現(xiàn)了本申請,使用Cg頂點和面片著色。該算法分為兩個步驟。第一步渲染從視點到背部多邊形的距離,并存儲這些多邊形的法向量,如圖3a、d所示。第二步渲染前面多邊形并在面片著色中計算折射效果。假設(shè)BackfaceZBuf和BackfaceNormals是在第一步中計算的紋理,其偽代碼如下所示:forallfragmentsF(給出P1,和),do運行后,我們獲取到渲染1024*1024大小的圖片的運行時間。我們的代碼沒有優(yōu)化這三種技術(shù),但我們對復(fù)雜模型的渲染仍保持很高的速度。注意用于我們的演示視頻的運行時間沒有在這里描述。本申請中的大多數(shù)結(jié)果采用的折射系數(shù)是1.2。復(fù)雜的模型可能會導(dǎo)致不正確的折射現(xiàn)象。在這種情況下對每個像素進(jìn)行1次采樣不能解決問題。我們使用OpenGL中的多重采樣會解決這個問題:對每個像素進(jìn)行至少4次采樣。表1:對比本申請的方法和光線追蹤計算復(fù)雜物體的折射效果的運行時間。多邊形數(shù)量二次折射一次折射光線追蹤計算場景佛像50,00053.3fps136.8fps121.9s奶牛5,804122.9fps285.7fps31.6sF-164,592149.2fps395.9fps26.8s球1,600164.3fps323.5fps6.1s茶壺6,320115.7fps306.9fps49.3s金星100,00037.9fps112.2fps147.2s其中,圖6a一次折射的效果,圖6b本申請的方法產(chǎn)生的折射效果,以及圖6c光線追蹤的效果。飛機(jī)的折射系數(shù)是1.2,墻壁的折射系數(shù)是1.5。其中,圖7a一次折射的效果,圖7b本申請的方法產(chǎn)生的折射效果,以及圖7c光線追蹤的效果。圖8是基于模擬折射和全局光照的3D模型渲染系統(tǒng)結(jié)構(gòu)示意圖,預(yù)處理單元1,用以對圖像進(jìn)行光柵化處理,得到每個像素點的基礎(chǔ)特征值:{入射方向擊中表面的點P1,P1點所在表面的法向量以及,根據(jù)所述基礎(chǔ)特征值得到第一次折射光線方向模擬單元2,通過模擬第二次反射位置P2點和P2所在表面的法向量計算得到第二次折射光線全局光照單元3,用以根據(jù)所述進(jìn)行全局光照的繪制后完成3D模型渲染本申請?zhí)岢隽艘粋€基于圖像空間的方法來模擬二次折射效果,并進(jìn)行了全局光照的繪制。這個方法可以在當(dāng)前的GPUs上面交互運行,能夠有效渲染復(fù)雜模型的折射效果。雖然本公開以具體結(jié)構(gòu)特征和/或方法動作來描述,但是可以理解在所附權(quán)利要求書中限定的本公開并不必然限于上述具體特征或動作。而是,上述具體特征和動作僅公開為實施權(quán)利要求的示例形式。當(dāng)前第1頁1 2 3