專利名稱:一種由鏡面反射產(chǎn)生的3d虛擬場景面焦散效果的繪制方法
技術(shù)領(lǐng)域:
本發(fā)明屬于真實 感3D虛擬場景繪制技術(shù)領(lǐng)域,涉及一種繪制由鏡面反射產(chǎn)生的 3D虛擬場景的面焦散效果的方法。
背景技術(shù):
真實感3D虛擬場景繪制技術(shù)在數(shù)字娛樂、影視特效、建筑CAD、廣告動畫等領(lǐng)域受 到人們的廣泛關(guān)注。目前3D虛擬場景繪制技術(shù)雖然已經(jīng)得到深入的研究,但是如何快速繪 制具有高度真實感的3D虛擬場景畫面仍然是一個有待進一步解決的難題。當光源發(fā)出的 光線入射到光滑表面上時,光滑表面的鏡面反射過程可能對反射光線產(chǎn)生聚焦或者離焦作 用,從而導致反射光線形成復(fù)雜的空間分布。當這些空間分布復(fù)雜的反射光線再次入射到 不透明的反射表面上時,就會在反射表面上產(chǎn)生形狀復(fù)雜的亮斑,這就是由鏡面反射產(chǎn)生 的面焦散。光子映射是一種繪制面焦散效果的經(jīng)典方法。標準的光子映射算法首先對大量的 從光源發(fā)射的光子進行跟蹤,將這些光子與場景表面的碰撞位置及其相關(guān)數(shù)據(jù)記錄在光子 緩存中;然后根據(jù)光子緩存中的數(shù)據(jù)計算場景的焦散圖;最后利用類似陰影映射的方法把 焦散圖投影到場景表面上,從而繪制出面焦散效果。由于大量的光子跟蹤計算存在較大的 系統(tǒng)執(zhí)行時間和存儲空間開銷,因此利用光子映射算法繪制面焦散效果的效率通常不高。隨著3D虛擬場景繪制技術(shù)的不斷發(fā)展,影視特效、游戲、視景仿真等3D應(yīng)用對繪 制畫面的真實感要求變得越來越高。在這些3D應(yīng)用中加入由鏡面反射產(chǎn)生的3D虛擬場景 的面焦散效果可顯著增強繪制畫面的真實感。目前人們迫切需要在不明顯降低繪制效率的 條件下,將面焦散效果加入到3D虛擬場景的繪制之中。因此設(shè)計快速繪制由鏡面反射產(chǎn)生 的3D虛擬場景的面焦散效果的方法具有重要的意義。值得注意的是,在大多數(shù)3D虛擬場 景中,僅繪制由一次鏡面反射(即對光源直接光照的鏡面反射)產(chǎn)生的面焦散效果就可以 獲得很好的真實感。充分利用這一特點,可以設(shè)計出不需光子跟蹤的算法來繪制由鏡面反 射產(chǎn)生的面焦散效果。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種快速繪制由鏡面反射產(chǎn)生的3D虛擬場景的面焦散效 果的方法。本方法首先計算所有鏡面反射三角形面片頂點位置處的反射光線,根據(jù)這些反 射光線確定3D虛擬場景中的所有焦散照明體;在繪制3D虛擬場景時,如果待繪制場景點處 于某個焦散照明體之中,則在該場景點的光照值中加入此焦散照明體的貢獻,從而實現(xiàn)對 面焦散效果的繪制。本發(fā)明首先提供一種存儲3D虛擬場景(A001)中的鏡面反射三角形面片的頂點 位置(A002)、頂點法向量(A003)以及頂點位置處的反射光線方向向量(A004)的數(shù)據(jù)結(jié)構(gòu) (A005),在本發(fā)明中稱數(shù)據(jù)結(jié)構(gòu)(A005)為鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006);如圖1所示,鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006)包括頂點位置的χ坐標Px(101)、頂點位置的y坐標Py(102)、 頂點位置的ζ坐標Pz (103)、頂點法向量的χ分量nx (104)、頂點法向量的y分量ny (105)、頂 點法向量的ζ分量nz (106)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處 的反射光線方向向量的y分量Ry(IOS)、頂點位置處的反射光線方向向量的ζ分量Rz(109) 等9個成員變量。本發(fā)明的方法(010)部分創(chuàng)建3D虛擬場景(A001)中的鏡面反射頂點列表 (B001),并計算各鏡面反射頂點位置處的反射光線方向向量,具體步驟如下步驟(SOll)將3D虛擬場景(A001)中的所有鏡面反射三角形面片的頂點位 置(B002)及其法向量(B003)存入鏡面反射頂點列表(B001)中,其中鏡面反射頂點列表 (B001)的每個元素(B004)都是一個鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006)類型的變量;步驟(S012)對鏡面反射頂點列表(B001)中的每個元素(B004),做如下計算①計算從元素(B004)包含的頂點位置指向點光源(207)位置的向量(B005);②對向量(B005)進行歸一化運算;③將元素(B004)包含的頂點法向量(B003)與向量(B005)進行點乘運算,如果點 乘運算的結(jié)果小于或等于0,則將元素(B004)從鏡面反射頂點列表(B001)中刪除,否則以 向量(B005)與元素(B004)包含的頂點法向量(B003)的夾角為入射角,根據(jù)鏡面反射定律 計算元素(B004)包含的頂點位置處的反射光線方向向量(B006),并將反射光線方向向量 (B006)的χ分量、y分量、ζ分量分別存儲在元素(B004)的Rx (107)、Ry (108)、Rz (109)成員 變量之中。本發(fā)明的方法(020)部分創(chuàng)建產(chǎn)生焦散照明體的三角形列表(C001),具體步驟如 下步驟(S021)將3D虛擬場景(A001)中的所有鏡面反射三角形面片存入一個鏡面 反射三角形列表(C002)中;步驟(S022)對于鏡面反射三角形列表(C002)中的每個三角形面片(C003),如果 在鏡面反射頂點列表(B001)中不能一一找到與三角形面片(C003)的各個頂點位置對應(yīng)的 元素,則將三角形面片(C003)從鏡面反射三角形列表(C002)中刪除;步驟(S023)將鏡面反射三角形列表(C002)賦值給三角形列表(C001)。本發(fā)明的方法(030)部分實現(xiàn)場景點(D001)的焦散光照值的計算,具體步驟如 下步驟(S031)創(chuàng)建一個包含場景點(D001)的平面(D002),且平面(D002)的法向 量平行于場景點(D001)的法向量;步驟(S032)對于三角形列表(C001)中的每個三角形面片(D003),做如下計算①在鏡面反射頂點列表(B001)中找出與三角形面片(D003)包含的三個頂點位置 對應(yīng)的元素的索引號,并分別賦值給索引變量idp id2和id3 ;②將索引變量Id1對應(yīng)的鏡面反射頂點列表(B001)的元素賦值給變量V1,將索引 變量id2對應(yīng)的鏡面反射頂點列表(B001)的元素賦值給變量V2,將索引變量1(13對應(yīng)的鏡 面反射頂點列表(B001)的元素賦值給變量V3 ; ③根據(jù)變量V1包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂 點位置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的反射光線方向向量的1分量Ry (108)、頂點位置處的反射光線方向向量的Z分量Rz (109)等6個成員變量,創(chuàng)建一條起始于變量V1包含的頂點位置,方向平行于變量V1包含的頂點位 置處的反射光線方向向量的射線(D004),并判斷射線(D004)與平面(D002)是否相交,如果 相交則計算出對應(yīng)的交點(D005)并置Flagl = 1,否則置Flagl = 0 ;④根據(jù)變量V2包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂 點位置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的 反射光線方向向量的y分量Ry (108)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等 6個成員變量,創(chuàng)建一條起始于變量V2包含的頂點位置,方向平行于變量V2包含的頂點位 置處的反射光線方向向量的射線(D006),并判斷射線(D006)與平面(D002)是否相交,如果 相交則計算出對應(yīng)的交點(D007)并置Flag2 = 1,否則置Flag2 = 0 ;⑤根據(jù)變量V3包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂 點位置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的 反射光線方向向量的y分量Ry (108)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等 6個成員變量,創(chuàng)建一條起始于變量V3包含的頂點位置,方向平行于變量V3包含的頂點位 置處的反射光線方向向量的射線(D008),并判斷射線(D008)與平面(D002)是否相交,如果 相交則計算出對應(yīng)的交點(D009)并置Flag3 = 1,否則置Flag3 = 0 ;⑥如果Flagl = 1且Flag2 = 1且Flag3 = 1,則轉(zhuǎn)⑦,否則三角形面片(D003)產(chǎn) 生的焦散照明體對場景點(D001)的光照貢獻為0,結(jié)束三角形面片(D003)產(chǎn)生的焦散照明 體對場景點(D001)的光照貢獻計算;⑦如果場景點(D001)處于由交點(D005)、交點(D007)和交點(D009)確定的三角 形之內(nèi)(或者確定的直線段之上),則轉(zhuǎn)⑧,否則三角形面片(D003)產(chǎn)生的焦散照明體對場 景點(D001)的光照貢獻為0,結(jié)束三角形面片(D003)產(chǎn)生的焦散照明體對場景點(D001) 的光照貢獻計算;⑧首先創(chuàng)建一個包含場景點(D001)的平面(D010),且平面(D010)的法向量平行 于三角形面片(D003)的法向量,然后計算射線(D004)與平面(D010)的交點(DOll),計算 射線(D006)與平面(D010)的交點(D012),計算射線(D008)與平面(D010)的交點(D013); 根據(jù)變量V1、變量V2、變量V3包含的頂點位置處的反射光線方向向量,通過插值計算出, 在由交點(DOll)、交點(D012)和交點(D013)確定的三角形內(nèi)(或者直線段上),場景點 (D001)位置處的反射光線方向向量(D014);⑨創(chuàng)建一條起始于場景點(D001)位置,方向平行于反射光線方向向量(D014)的 反向向量的射線(D015);計算射線(D015)與三角形面片(D003)的交點(D016);創(chuàng)建一條 起始于交點(D016),終止于點光源(207)位置的線段(D017);測試3D虛擬場景(A001)中 是否有三角形面片(D018)與線段(D017)有交,如果無交則轉(zhuǎn)⑩,否則三角形面片(D003) 相對于點光源(207)被部分遮擋,其產(chǎn)生的焦散照明體對場景點(D001)的光照貢獻為0,結(jié) 束三角形面片(D003)產(chǎn)生的焦散照明體對場景點(D001)的光照貢獻計算;⑩計算由交點(DOll)、交點(D012)和交點(D013)確定的三角形的面積與三角 形面片(D003)的面積之比α (D019);創(chuàng)建從交點(D016)指向點光源(207)位置的向量 (D020);對向量(D020)進行歸一化計算;根據(jù)三角形面片(D003)的三個頂點位置,計算 三角形面片(D003)的表面法向量(D021);根據(jù)點光源(207)到交點(D016)的距離、向量(D020)與表面法向量(D021)的夾角以及點光源(207)的輻射亮度,計算三角形面片 (D003)的照明度(D022),將照明度(D022)乘以面積之比α (D019)并賦值給變量I (D023); 根據(jù)變量I(D023)的值、場景點(D001)的材質(zhì)屬性以及場景點(D001)的法向量與反射光 線方向向量(D014)的反向向量的夾角,按照光照反射模型計算三角形面片(D003)產(chǎn)生的 焦散照明體對場景點(D001)的光照貢獻值,并將其加到場景點(D001)的總光照值之中。有益效果本發(fā)明提供了一種由鏡面反射產(chǎn)生的3D虛擬場景面焦散效果的繪制方法。本發(fā) 明方法與光子映射方法相比,避免了對大量的從光源發(fā)射的光子的跟蹤運算,提高了面焦 散效果的繪制效率。另外,本發(fā)明方法能夠很容易地集成到光線跟蹤等全局光照繪制算法 框架之中,可顯著地提高3D虛擬場景畫面繪制的真實感。
圖1是鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)示意圖。
具體實施例方式為了使本發(fā)明的特征和優(yōu)點更加清楚明白,下面參照附圖結(jié)合具體實施例對本發(fā) 明 作進一步的描述。在本實施例中,使用光線跟蹤算法繪制3D虛擬場景。由于光線跟蹤算法只對鏡面 反射光線進行遞歸跟蹤,因此無法繪制出漫反射表面上的面焦散效果。為此,需要在場景點 的光照值計算中增加一個新過程,以便獲得場景點的焦散光照值。計算出所有待繪制場景 點的焦散光照值,就實現(xiàn)了對3D虛擬場景面焦散效果的繪制。將焦散光照值加到標準光線 跟蹤算法計算出的場景點光照值之中,可進一步地把面焦散效果合成到最終的3D虛擬場 景繪制結(jié)果之中。下面將講述這個新增加過程的具體實施方式
。本發(fā)明首先提供一種存儲3D虛擬場景(A001)中的鏡面反射三角形面片的頂點 位置(A002)、頂點法向量(A003)以及頂點位置處的反射光線方向向量(A004)的數(shù)據(jù)結(jié)構(gòu) (A005),在本發(fā)明中稱數(shù)據(jù)結(jié)構(gòu)(A005)為鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006);如圖1所示,鏡 面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006)包括頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、 頂點位置的ζ坐標Pz (103)、頂點法向量的χ分量nx (104)、頂點法向量的y分量ny (105)、頂 點法向量的ζ分量nz (106)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處 的反射光線方向向量的y分量Ry(IOS)、頂點位置處的反射光線方向向量的ζ分量Rz(109) 等9個成員變量。本發(fā)明的方法(010)部分創(chuàng)建3D虛擬場景(A001)中的鏡面反射頂點列表 (B001),并計算各鏡面反射頂點位置處的反射光線方向向量,具體步驟如下步驟(SOll)將3D虛擬場景(A001)中的所有鏡面反射三角形面片的頂點位 置(B002)及其法向量(B003)存入鏡面反射頂點列表(B001)中,其中鏡面反射頂點列表 (B001)的每個元索(B004)都是一個鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006)類型的變量;步驟(S012)對鏡面反射頂點列表(B001)中的每個元素(B004),做如下計算①計算從元素(B004)包含的頂點位置指向點光源(207)位置的向量(B005);②對向量(B005)進行歸一化運算;
③將元素(B004)包含的頂點法向量(B003)與向量(B005)進行點乘運算,如果點 乘運算的結(jié)果小于或等于0,則將元素(B004)從鏡面反射頂點列表(B001)中刪除,否則以 向量(B005)與元素(B004)包含的頂點法向量(B003)的夾角為入射角,根據(jù)鏡面反射定律 計算元素(B004)包含的頂點位置處的反射光線方向向量(B006),并將反射光線方向向量 (B006)的χ分量、y分量、ζ分量分別存儲在元素(B004)的Rx (107)、Ry (108)、Rz (109)成員 變量之中。本發(fā)明的方法(020)部分創(chuàng)建產(chǎn)生焦散照明體的三角形列表(C001),具體步驟如 下步驟(S021)將3D虛擬場景(A001)中的所有鏡面反射 三角形面片存入一個鏡面 反射三角形列表(C002)中;步驟(S022)對于鏡面反射三角形列表(C002)中的每個三角形面片(C003),如果 在鏡面反射頂點列表(B001)中不能一一找到與三角形面片(C003)的各個頂點位置對應(yīng)的 元素,則將三角形面片(C003)從鏡面反射三角形列表(C002)中刪除;步驟(S023)將鏡面反射三角形列表(C002)賦值給三角形列表(C001)。本發(fā)明的方法(030)部分實現(xiàn)場景點(D001)的焦散光照值的計算,具體步驟如 下步驟(S031)創(chuàng)建一個包含場景點(D001)的平面(D002),且平面(D002)的法向 量平行于場景點(D001)的法向量;步驟(S032)對于三角形列表(C001)中的每個三角形面片(D003),做如下計算①在鏡面反射頂點列表(B001)中找出與三角形面片(D003)包含的三個頂點位置 對應(yīng)的元素的索引號,并分別賦值給索引變量idp id2和id3 ;②將索引變量Id1對應(yīng)的鏡面反射頂點列表(B001)的元素賦值給變量V1,將索引 變量id2對應(yīng)的鏡面反射頂點列表(B001)的元素賦值給變量V2,將索引變量1(13對應(yīng)的鏡 面反射頂點列表(B001)的元素賦值給變量V3 ;③根據(jù)變量V1包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂 點位置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的 反射光線方向向量的y分量Ry (108)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等 6個成員變量,創(chuàng)建一條起始于變量V1包含的頂點位置,方向平行于變量V1包含的頂點位 置處的反射光線方向向量的射線(D004),并判斷射線(D004)與平面(D002)是否相交,如果 相交則計算出對應(yīng)的交點(D005)并置Flagl = 1,否則置Flagl = 0 ;④根據(jù)變量V2包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂 點位置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的 反射光線方向向量的y分量Ry (108)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等 6個成員變量,創(chuàng)建一條起始于變量V2包含的頂點位置,方向平行于變量V2包含的頂點位 置處的反射光線方向向量的射線(D006),并判斷射線(D006)與平面(D002)是否相交,如果 相交則計算出對應(yīng)的交點(D007)并置Flag2 = 1,否則置Flag2 = 0 ;⑤根據(jù)變量V3包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂 點位置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的 反射光線方向向量的y分量Ry (108)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等6個成員變量,創(chuàng)建一條起始于變量V3包含的頂點位置,方向平行于變量V3包含的頂點位 置處的反射光線方向向量的射線(D008),并判斷射線(D008)與平面(D002)是否相交,如果 相交則計算出對應(yīng)的交點(D009)并置Flag3 = 1,否則置Flag3 = O ;⑥如果Flagl = 1且Flag2 = 1且Flag3 = 1,則轉(zhuǎn)⑦,否則三角形面片(D003)產(chǎn) 生的焦散照明體對場景點(D001)的光照貢獻為0,結(jié)束三角形面片(D003)產(chǎn)生的焦散照明 體對場景點(D001)的光照貢獻計算;⑦如果場景點(D001)處于由交點(D005)、交點(D007)和交點(D009)確定的三角 形之內(nèi)(或者確定的直線段之上),則轉(zhuǎn)⑧,否則三角形面片(D003)產(chǎn)生的焦散照明體對場 景點(D001)的光照貢獻為0,結(jié)束三角形面片(D003)產(chǎn)生的焦散照明體對場景點(D001) 的光照貢獻計算;⑧首先創(chuàng)建一個包含場景點(D001)的平面(D010),且平面(D010)的法向量平行 于三角形面片(D003)的法向量,然后計算射線(D004)與平面(D010)的交點(DOll),計算 射線(D006)與平面(D010)的交點(D012),計算射線(D008)與平面(D010)的交點(D013); 根據(jù)變量V1、變量V2、變量V3包含的頂點位置處的反射光線方向向量,通過插值計算出, 在由交點(DOll)、交點(D012)和交點(D013)確定的三角形內(nèi)(或者直線段上),場景點 (D001)位置處的反射光線方向向量(D014);⑨創(chuàng)建一條起始于場景點(D001)位置,方向平行于反射光線方向向量(D014)的 反向向量的射線(D015);計算射線(D015)與三角形面片(D003)的交點(D016);創(chuàng)建一條 起始于交點(D016),終止于點光源(207)位置的線段(D017);測試3D虛擬場景( A001)中 是否有三角形面片(D018)與線段(D017)有交,如果無交則轉(zhuǎn)⑩,否則三角形面片(D003) 相對于點光源(207)被部分遮擋,其產(chǎn)生的焦散照明體對場景點(D001)的光照貢獻為0,結(jié) 束三角形面片(D003)產(chǎn)生的焦散照明體對場景點(D001)的光照貢獻計算;⑩計算由交點(DOll)、交點(D012)和交點(D013)確定的三角形的面積與三角 形面片(D003)的面積之比α (D019);創(chuàng)建從交點(D016)指向點光源(207)位置的向量 (D020);對向量(D020)進行歸一化計算;根據(jù)三角形面片(D003)的三個頂點位置,計算 三角形面片(D003)的表面法向量(D021);根據(jù)點光源(207)到交點(D016)的距離、向 量(D020)與表面法向量(D021)的夾角以及點光源(207)的輻射亮度,計算三角形面片 (D003)的照明度(D022),將照明度(D022)乘以面積之比α (D019)并賦值給變量I (D023); 根據(jù)變量I(D023)的值、場景點(D001)的材質(zhì)屬性以及場景點(D001)的法向量與反射光 線方向向量(D014)的反向向量的夾角,按照光照反射模型計算三角形面片(D003)產(chǎn)生的 焦散照明體對場景點(D001)的光照貢獻值,并將其加到場景點(D001)的總光照值之中。
權(quán)利要求
1. 一種由鏡面反射產(chǎn)生的3D虛擬場景面焦散效果的繪制方法,其特征在于,所需的數(shù) 據(jù)結(jié)構(gòu)及實現(xiàn)步驟如下所需的數(shù)據(jù)結(jié)構(gòu)本發(fā)明提供一種存儲3D虛擬場景(A001)中的鏡面反射三角形面片 的頂點位置(A002)、頂點法向量(A003)以及頂點位置處的反射光線方向向量(A004)的數(shù) 據(jù)結(jié)構(gòu)(A005),在本發(fā)明中稱數(shù)據(jù)結(jié)構(gòu)(A005)為鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006);鏡面反射 頂點數(shù)據(jù)結(jié)構(gòu)(A006)包括頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂點位 置的ζ坐標Pz(103)、頂點法向量的χ分量nx(104)、頂點法向量的y分量ny (105)、頂點法向 量的ζ分量nz (106)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的反射 光線方向向量的y分量Ry(IOS)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等9個 成員變量; 實現(xiàn)步驟本發(fā)明的方法(010)部分創(chuàng)建3D虛擬場景(A001)中的鏡面反射頂點列表(B001),并 計算各鏡面反射頂點位置處的反射光線方向向量,具體步驟如下步驟(SOll)將3D虛擬場景(A001)中的所有鏡面反射三角形面片的頂點位置(B002) 及其法向量(BOO; )存入鏡面反射頂點列表(B001)中,其中鏡面反射頂點列表(B001)的每 個元素(B004)都是一個鏡面反射頂點數(shù)據(jù)結(jié)構(gòu)(A006)類型的變量;步驟(S012)對鏡面反射頂點列表(B001)中的每個元素(B004),做如下計算①計算從元素(B004)包含的頂點位置指向點光源(207)位置的向量(B005);②對向量¢00 進行歸一化運算;③將元素(B004)包含的頂點法向量¢00 與向量¢00 進行點乘運算,如果點乘 運算的結(jié)果小于或等于0,則將元素(B004)從鏡面反射頂點列表(B001)中刪除,否則以向 量¢00 與元素(B004)包含的頂點法向量(BO(XB)的夾角為入射角,根據(jù)鏡面反射定律 計算元素(B004)包含的頂點位置處的反射光線方向向量(B006),并將反射光線方向向量 (B006)的χ分量、y分量、ζ分量分別存儲在元素(B004)的Rx (107)、Ry (108)、Rz (109)成員 變量之中;本發(fā)明的方法(020)部分創(chuàng)建產(chǎn)生焦散照明體的三角形列表(C001),具體步驟如下 步驟(S021)將3D虛擬場景(A001)中的所有鏡面反射三角形面片存入一個鏡面反射 三角形列表(C002)中;步驟(S022)對于鏡面反射三角形列表(C002)中的每個三角形面片(C003),如果在 鏡面反射頂點列表(B001)中不能一一找到與三角形面片(COO; )的各個頂點位置對應(yīng)的元 素,則將三角形面片(C003)從鏡面反射三角形列表(C002)中刪除;步驟(S02!3)將鏡面反射三角形列表(0)0 賦值給三角形列表(C001); 本發(fā)明的方法(030)部分實現(xiàn)場景點(D001)的焦散光照值的計算,具體步驟如下 步驟(S031)創(chuàng)建一個包含場景點(D001)的平面(D002),且平面(D002)的法向量平 行于場景點(D001)的法向量;步驟(S03》對于三角形列表(C001)中的每個三角形面片(D003),做如下計算①在鏡面反射頂點列表(B001)中找出與三角形面片(D00;3)包含的三個頂點位置對應(yīng) 的元素的索引號,并分別賦值給索引變量idp id2和id3 ;②將索引變量Id1對應(yīng)的鏡面反射頂點列表(B001)的元素賦值給變量V1,將索引變量id2對應(yīng)的鏡面反射頂點列表(B001)的元素賦值給變量V2,將索引變量id3對應(yīng)的鏡面反 射頂點列表(B001)的元素賦值給變量V3 ;③根據(jù)變量V1包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂點位 置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的反射 光線方向向量的y分量Ry(IOS)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等6個 成員變量,創(chuàng)建一條起始于變量V1包含的頂點位置,方向平行于變量V1包含的頂點位置處 的反射光線方向向量的射線(D004),并判斷射線(D004)與平面(D002)是否相交,如果相交 則計算出對應(yīng)的交點(D005)并置Flagl = 1,否則置Flagl = 0 ;④根據(jù)變量V2包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂點位 置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的反射 光線方向向量的y分量Ry(IOS)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等6個 成員變量,創(chuàng)建一條起始于變量V2包含的頂點位置,方向平行于變量V2包含的頂點位置處 的反射光線方向向量的射線(D006),并判斷射線(D006)與平面(D002)是否相交,如果相交 則計算出對應(yīng)的交點(D007)并置Flag2 = 1,否則置Flag2 = 0 ;⑤根據(jù)變量V3包含的頂點位置的χ坐標Px(IOl)、頂點位置的y坐標Py(102)、頂點位 置的ζ坐標Pz (103)、頂點位置處的反射光線方向向量的χ分量Rx (107)、頂點位置處的反射 光線方向向量的y分量Ry(IOS)、頂點位置處的反射光線方向向量的ζ分量Rz (109)等6個 成員變量,創(chuàng)建一條起始于變量V3包含的頂點位置,方向平行于變量V3包含的頂點位置處 的反射光線方向向量的射線(D008),并判斷射線(D008)與平面(D002)是否相交,如果相交 則計算出對應(yīng)的交點(D009)并置Flag3 = 1,否則置Flag3 = 0 ;⑥如果Flagl= 1且Flag2 = 1且Flag3 = 1,則轉(zhuǎn)⑦,否則三角形面片(D003)產(chǎn)生的 焦散照明體對場景點(D001)的光照貢獻為0,結(jié)束三角形面片(D003)產(chǎn)生的焦散照明體對 場景點(D001)的光照貢獻計算;⑦如果場景點(D001)處于由交點(D005)、交點(D007)和交點(D009)確定的三角形 之內(nèi)(或者確定的直線段之上),則轉(zhuǎn)⑧,否則三角形面片(D003)產(chǎn)生的焦散照明體對場景 點(D001)的光照貢獻為0,結(jié)束三角形面片(D003)產(chǎn)生的焦散照明體對場景點(D001)的 光照貢獻計算;⑧首先創(chuàng)建一個包含場景點(D001)的平面(D010),且平面(D010)的法向量平行于三 角形面片(D003)的法向量,然后計算射線(D004)與平面(D010)的交點(DOll),計算射線 (D006)與平面(D010)的交點(D012),計算射線(D008)與平面(D010)的交點(D013);根 據(jù)變量V1、變量V2、變量V3包含的頂點位置處的反射光線方向向量,通過插值計算出,在由 交點(D011)、交點(D012)和交點(D013)確定的三角形內(nèi)(或者直線段上),場景點(D001) 位置處的反射光線方向向量(D014);⑨創(chuàng)建一條起始于場景點(D001)位置,方向平行于反射光線方向向量O014)的反向 向量的射線(D015);計算射線(D015)與三角形面片(D003)的交點(D016);創(chuàng)建一條起始 于交點(D016),終止于點光源(207)位置的線段(D017);測試3D虛擬場景(A001)中是否 有三角形面片(D018)與線段(D017)有交,如果無交則轉(zhuǎn)⑩,否則三角形面片(D003)相對 于點光源(207)被部分遮擋,其產(chǎn)生的焦散照明體對場景點(D001)的光照貢獻為0,結(jié)束三 角形面片(D00;3)產(chǎn)生的焦散照明體對場景點(D001)的光照貢獻計算;⑩計算由交點(DOll)、交點(D012)和交點(D013)確定的三角形的面積與三角形面片 (D003)的面積之比α (D019);創(chuàng)建從交點(D016)指向點光源(207)位置的向量(D020); 對向量(D020)進行歸一化計算;根據(jù)三角形面片(DO(XB)的三個頂點位置,計算三角形面 片(D003)的表面法向量(D021);根據(jù)點光源(207)到交點(D016)的距離、向量(D020) 與表面法向量(D021)的夾角以及點光源Ο07)的輻射亮度,計算三角形面片(D003)的照 明度(D022),將照明度(D022)乘以面積之比α (D019)并賦值給變量I (D023);根據(jù)變量 I (D023)的值、場景點(D001)的材質(zhì)屬性以及場景點(D001)的法向量與反射光線方向向 量(D014)的反向向量的夾角,按照光照反射模型計算三角形面片(D003)產(chǎn)生的焦散照明 體對場景點(D001)的光照貢獻值,并將其加到場景點(D001)的總光照值之中。
全文摘要
本發(fā)明公開一種由鏡面反射產(chǎn)生的3D虛擬場景面焦散效果的繪制方法,屬于真實感3D虛擬場景繪制技術(shù)領(lǐng)域。當前,常用光子映射算法繪制3D虛擬場景的面焦散效果。光子映射算法要求對光源發(fā)射的大量光子進行跟蹤計算,這會嚴重降低3D虛擬場景面焦散效果的繪制效率。本發(fā)明首先計算所有鏡面反射三角形面片頂點位置處的反射光線,再根據(jù)這些反射光線確定3D虛擬場景中的所有焦散照明體;在繪制3D虛擬場景時,如果待繪制場景點處于某個焦散照明體之中,則在該場景點的光照值中加入此焦散照明體的貢獻,從而實現(xiàn)對面焦散效果的繪制。本發(fā)明方法可以很容易地集成到光線跟蹤算法框架之中,能顯著地提高3D虛擬場景繪制的真實感。
文檔編號G06T17/00GK102074041SQ201010597769
公開日2011年5月25日 申請日期2010年12月21日 優(yōu)先權(quán)日2010年12月21日
發(fā)明者丁瑩, 馮欣, 底曉強, 李奇, 楊華民, 范靜濤, 蔣振剛, 陳占芳, 陳純毅, 韓成 申請人:長春理工大學