利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法
【專利摘要】本發(fā)明公開一種利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法,屬于三維動畫繪制【技術(shù)領(lǐng)域】。本方法將場景中的幾何對象分為靜態(tài)幾何對象和動態(tài)幾何對象,分別用不同的場景圖進行組織和管理。在對光源的光照發(fā)射空間進行光線采樣的基礎(chǔ)上,求解這些光線與場景幾何對象的交點,并在交點處創(chuàng)建虛擬點光源照射動畫三維場景,進而實現(xiàn)動畫三維場景的間接光照繪制。本方法能夠在連續(xù)幀間大量重用虛擬點光源,可支持同時存在視點和幾何對象運動的動畫三維場景的全局光照繪制。在三維動畫制作中使用本發(fā)明,可以提高三維動畫的視覺質(zhì)量。
【專利說明】利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于三維動畫繪制【技術(shù)領(lǐng)域】,涉及一種利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法。
【背景技術(shù)】
[0002]目前三維動畫在產(chǎn)品展示、廣告、影視娛樂等行業(yè)得到廣泛應(yīng)用。為了提高三維動畫畫面的真實感,往往要求實現(xiàn)動畫三維場景的全局光照繪制。全局光照可分解成直接光照和間接光照兩部分。三維場景的直接光照繪制相對比較簡單,已有不少成熟技術(shù)。實際上,三維場景的全局光照繪制的難點在于,如何高效地計算間接光照。對大多數(shù)動畫三維場景來說,往往僅計算一次反射產(chǎn)生的間接光照貢獻就可以繪制出真實感較強的畫面。從光源發(fā)射一系列光線,在這些光線與三維場景對象相交的地方生成一系列虛擬點光源。用這些虛擬點光源照射三維場景即可模擬一次反射產(chǎn)生的間接光照貢獻。與靜態(tài)三維場景的繪制結(jié)果不同,動畫三維場景的繪制結(jié)果由一系列連續(xù)的幀畫面組成。在繪制動畫三維場景時,如果連續(xù)幀畫面之間固有的光照時間相關(guān)性得不到很好的保持,則最終的動畫會出現(xiàn)畫面閃爍現(xiàn)象,進而影響觀眾的視覺體驗效果。當利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制時,如果某一個虛擬點光源在連續(xù)的多幀中都有效,則此虛擬點光源應(yīng)當在這些連續(xù)幀的繪制中都被使用,以便保持連續(xù)幀畫面之間的光照時間相關(guān)性。
[0003]對于實際動畫三維場景,往往只有少數(shù)幾何對象在各幀中會發(fā)生運動或者變化,多數(shù)幾何對象在各幀中保持靜止狀態(tài)。此外,許多實際動畫三維場景中的光源在各幀中都不會發(fā)生變化。例如一個表現(xiàn)人在辦公室中行走的動畫,辦公室中的光源往往都是固定的。如果在動畫三維場景的各幀中不存在原有幾何對象消失或者新幾何對象產(chǎn)生的現(xiàn)象,則可以將動畫三維場景中的幾何對象分為靜止幾何對象和動態(tài)幾何對象兩類,并對它們分別進行組織和管理。如果動畫三維場景中的光源在各幀中不發(fā)生變化,對于與靜止幾何對象相關(guān)的光照貢獻中間計算結(jié)果,滿足一定條件時,可很容易地在各幀中進行重用,從而保持連續(xù)幀畫面之間的光照時間相關(guān)性。
【發(fā)明內(nèi)容】
[0004]本方法的目的在于提供一種利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法。本方法的技術(shù)解決方案:將動畫三維場景中的幾何對象分為靜態(tài)幾何對象和動態(tài)幾何對象,所有靜態(tài)幾何對象用一個場景圖SSG來組織和管理,所有動態(tài)幾何對象用一個場景圖DSG來組織和管理;對光源的光照發(fā)射空間進行光線采樣,即從光源位置向光源的光照發(fā)射空間中投射一系列光線,如圖1和圖2所示,分別計算這些光線與場景圖SSG和場景圖DSG中的幾何對象的交點;在這些交點處創(chuàng)建虛擬點光源來照射三維場景,通過計算這些虛擬點光源對三維場景點的直接光照貢獻來近似繪制主光源產(chǎn)生的間接光照。建立以光源位置為原點的局部坐標系C0R,局部坐標系COR的z軸正方向取為光源的主光照出射方向,局部坐標系COR的X軸和y軸任意選取,只需保證局部坐標系COR的x軸、y軸、z軸兩兩正交即可;為了簡化對從光源投射的光線的方向的描述,如圖3所示,使用方位角和仰角來描述光線的方向。
[0005]本方法首先提供一種數(shù)據(jù)結(jié)構(gòu)DS,用于存儲與虛擬點光源相關(guān)的數(shù)據(jù);數(shù)據(jù)結(jié)構(gòu)DS包括虛擬點光源的位置、虛擬點光源所在位置的法向量、虛擬點光源的發(fā)光強度、虛擬點光源的主光照出射方向、虛擬點光源類型、虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF、與虛擬點光源相關(guān)聯(lián)的光線的方位角、與虛擬點光源相關(guān)聯(lián)的光線的仰角共八個成員變量。
[0006]本方法的第一部分在計算機系統(tǒng)中計算三維場景中的光源AOOl的光照發(fā)射空間的采樣光線與場景圖SSG中的幾何對象的交點,并在交點位置處創(chuàng)建虛擬點光源,具體步驟如下:
[0007]SteplOl:令列表A002為空;令列表LVPLS為空;
[0008]Stepl02:從光源AOOl所在位置向光源AOOl的光照發(fā)射空間投射一系列光線,并將這些光線存放在列表A002中;
[0009]St印103:對列表A002中的每條光線A003,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印103-1至St印103-3:
[0010]St印103-1:測試光線A003是否與場景圖SSG中的幾何對象相交,如果不相交,則轉(zhuǎn)子步驟St印103-3 ;
[0011]St印103-2:計算光線A003與場景圖SSG中的幾何對象之間的距光源AOOl最近的交點A004,創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量A005 ;將交點A004所在的位置賦值給變量A005的虛擬點光源的位置成員變量,將交點A004所在的位置的法向量賦值給變量A005的虛擬點光源所在位置的法向量成員變量,將交點A004所在幾何對象的表面的雙向反射分布函數(shù)BRDF賦值給變量A005的虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF成員變量;如果交點A004所在幾何對象的表面為漫反射面,則將變量A005的虛擬點光源類型成員變量賦值為“半球全向光源類型”,否則將變量A005的虛擬點光源類型成員變量賦值為“聚光燈類型”;將光線A003在局部坐標系COR中的方位角和仰角分別賦值給變量A005的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;根據(jù)光源AOOl的發(fā)光強度和位置、交點A004的位置、交點A004所在的位置的法向量、交點A004所在幾何對象的表面的雙向反射分布函數(shù)BRDF計算變量A005的虛擬點光源的發(fā)光強度成員變量的值;如果變量A005的虛擬點光源類型成員變量為“半球全向光源類型”,則將變量A005的虛擬點光源的主光照出射方向成員變量賦值為交點A004所在的位置的法向量,否則將變量A005的虛擬點光源的主光照出射方向成員變量賦值為光線A003在交點A004處發(fā)生理想鏡面反射時的反射光線方向;將變量A005加入列表LVPLS中。
[0012]St印103-3:針對光線A003的計算結(jié)束。
[0013]本方法的第二部分逐幀地完成動畫三維場景的全局光照繪制,具體步驟如下:
[0014]St印201:令幀編號變量ID為I ;
[0015]St印202:令列表LVPLD為空;
[0016]St印203:對本方法的第一部分中得到的列表A002中的每條光線A003,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印203-1至St印203-3:
[0017]St印203-1:測試光線A003是否與場景圖DSG中的幾何對象相交,如果不相交,則轉(zhuǎn)子步驟St印203-3 ;
[0018]St印203-2:計算光線A003與場景圖DSG中的幾何對象之間的距光源AOOl最近的交點B004,創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B005 ;將交點B004所在的位置賦值給變量B005的虛擬點光源的位置成員變量,將交點B004所在的位置的法向量賦值給變量B005的虛擬點光源所在位置的法向量成員變量,將交點B004所在幾何對象的表面的雙向反射分布函數(shù)BRDF賦值給變量B005的虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF成員變量;如果交點B004所在幾何對象的表面為漫反射面,則將變量B005的虛擬點光源類型成員變量賦值為“半球全向光源類型”,否則將變量B005的虛擬點光源類型成員變量賦值為“聚光燈類型”;將光線A003在局部坐標系COR中的方位角和仰角分別賦值給變量B005的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;根據(jù)光源AOOl的發(fā)光強度和位置、交點B004的位置、交點B004所在的位置的法向量、交點B004所在幾何對象的表面的雙向反射分布函數(shù)BRDF計算變量B005的虛擬點光源的發(fā)光強度成員變量的值;如果變量B005的虛擬點光源類型成員變量為“半球全向光源類型”,則將變量B005的虛擬點光源的主光照出射方向成員變量賦值為交點B004所在的位置的法向量,否則將變量B005的虛擬點光源的主光照出射方向成員變量賦值為光線A003在交點B004處發(fā)生理想鏡面反射時的反射光線方向;將變量B005加入列表LVPLD中。
[0019]St印203-3:針對光線A003的計算結(jié)束;
[0020]St印204:令列表LVPLU為空;
[0021]St印205:對本方法的第一部分中得到的列表LVPLS中的每個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B006,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印205-1至St印205-4:
[0022]St印205-1:判斷列表LVPLD中是否存在一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B007,變量B007的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量分別等于變量B006的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;如果不存在,則轉(zhuǎn)子步驟Step205-3 ;
[0023]St印205-2:根據(jù)變量B006的虛擬點光源的位置成員變量和光源AOOl的位置,計算變量B006對應(yīng)的虛擬點光源與光源AOOl之間的距離Dl ;根據(jù)變量B007的虛擬點光源的位置成員變量和光源AOOl的位置,計算變量B007對應(yīng)的虛擬點光源與光源AOOl之間的距離D2 ;如果Dl≥D2,將變量B007加入列表LVPLU中,否則將變量B006加入列表LVPLU中;刪除列表LVPLD中的變量B007 ;轉(zhuǎn)子步驟Step205_4 ;
[0024]St印205-3:將變量B006加到列表LVPLU中;
[0025]St印205-4:針對數(shù)據(jù)結(jié)構(gòu)DS類型的變量B006的計算結(jié)束;
[0026]Step206:將列表LVPLD中剩余的變量加到列表LVPLU中;
[0027]St印207:在GPU并行計算設(shè)備上,用光線投射算法計算動畫三維場景的第ID幀畫面的直接光照結(jié)果,并將其保存在變量Vl中;
[0028]Step208:對列表LVPLU中的每個數(shù)據(jù)結(jié)構(gòu)DS類型的變量C001,在GPU并行計算設(shè)備上并行地執(zhí)行子步驟St印208-1至St印208-4:
[0029]St印208-1:如果變量COOl的虛擬點光源類型成員變量為“半球全向光源類型”,轉(zhuǎn)子步驟St印208-3 ;
[0030]St印208-2:用變量COOl對應(yīng)的虛擬點光源照射第ID幀對應(yīng)的動畫三維場景,變量COOl對應(yīng)的虛擬點光源表示的聚光燈的角衰系數(shù)取值為COOl對應(yīng)的虛擬點光源所在位置的幾何對象表面的高光系數(shù),變量COOl對應(yīng)的虛擬點光源表示的聚光燈的主光照出射方向與聚光燈的光錐的母線之間的夾角取值為90度;用光線投射算法計算變量COOl對應(yīng)的虛擬點光源對第ID幀對應(yīng)的動畫三維場景產(chǎn)生的直接光照結(jié)果,并將其累加到變量Vl中;轉(zhuǎn)子步驟St印208-4 ;
[0031]St印208-3:用變量COOl對應(yīng)的虛擬點光源照射第ID幀對應(yīng)的動畫三維場景;用光線投射算法計算變量COOl對應(yīng)的虛擬點光源對第ID幀對應(yīng)的動畫三維場景產(chǎn)生的直接光照結(jié)果,并將其累加到變量Vl中;
[0032]St印208-4:針對數(shù)據(jù)結(jié)構(gòu)DS類型的變量COOl的計算結(jié)束;
[0033]St印209:將變量Vl中的光照數(shù)據(jù)轉(zhuǎn)換為第ID幀的畫面圖像數(shù)據(jù)輸出到文件中;
[0034]St印210:將場景圖DSG中的幾何對象變換到第ID+1幀的狀態(tài);將變量ID的值加1,轉(zhuǎn)步驟St印202。
[0035]有益效果
[0036]本發(fā)明提供了一種利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法。本方法既可以繪制由漫反射表面對直接來自光源的光照的反射產(chǎn)生的間接光照,又可以繪制由具有較高光澤度的表面對直接來自光源的光照的反射產(chǎn)生的間接光照。通過將動畫三維場景的幾何對象分成靜態(tài)對象和動態(tài)對象,并分別用不同的場景圖進行組織和管理,實現(xiàn)了虛擬點光源在連續(xù)幀之間的大量重用,從而提高了連續(xù)幀畫面之間的光照時間相關(guān)性,顯著減小了動畫畫面的時間閃爍。本方法可以支持同時存在視點和幾何對象運動的動畫三維場景的全局光照繪制。在三維動畫制作中使用本發(fā)明,可以提高三維動畫的視覺質(zhì)量。
【專利附圖】
【附圖說明】
[0037]圖1為對聚光燈光源的光照發(fā)射空間進行光線采樣的示意圖。圖2為對全向點光源的光照發(fā)射空間進行光線采樣的示意圖。圖3為光線的方位角和仰角示意圖。
【具體實施方式】
[0038]為了使本方法的特征和優(yōu)點更加清楚明白,下面結(jié)合具體實施例對本方法作進一步的描述。在本實施例中,考慮包含一個聚光燈的動畫三維場景,三維場景中無透明的幾何對象。計算機系統(tǒng)的CPU選擇Intel (R)Xeon (R) CPU E3-1225v3i3.20GHz,內(nèi)存選擇金士頓8GB DDR31333,GPU 選擇 NVIDIA Quadro K2000,硬盤選擇 Buffalo HD-CE1.5TU2 ;軟件編程工具選用VC++2010、0penGL2.0、CUDA5.5 ;利用CUDA編寫運行在GPU上的并行程序。在本實施例中,對光源的光照發(fā)射空間進行光線采樣時,采用如下方式生成采樣光線:在垂直于聚光燈的主光照出射方向的平面上,求出與聚光燈的光錐外切的正方形;在該正方形內(nèi)產(chǎn)生一個NXN的均勻網(wǎng)格,從聚光燈的光錐頂點向各網(wǎng)格單元的中心點發(fā)射射線,只要網(wǎng)格單元的中心點在聚光燈的光錐內(nèi),與其對應(yīng)的射線就是一條采樣光線。聚光燈的主光照出射方向平行于聚光燈的光錐的中軸線方向。
[0039]本方法的技術(shù)解決方案:將動畫三維場景中的幾何對象分為靜態(tài)幾何對象和動態(tài)幾何對象,所有靜態(tài)幾何對象用一個場景圖SSG來組織和管理,所有動態(tài)幾何對象用一個場景圖DSG來組織和管理;對光源的光照發(fā)射空間進行光線采樣,即從光源位置向光源的光照發(fā)射空間中投射一系列光線,如圖1和圖2所示,分別計算這些光線與場景圖SSG和場景圖DSG中的幾何對象的交點;在這些交點處創(chuàng)建虛擬點光源來照射三維場景,通過計算這些虛擬點光源對三維場景點的直接光照貢獻來近似繪制主光源產(chǎn)生的間接光照。建立以光源位置為原點的局部坐標系COR,局部坐標系COR的z軸正方向取為光源的主光照出射方向,局部坐標系COR的X軸和y軸任意選取,只需保證局部坐標系COR的x軸、y軸、z軸兩兩正交即可;為了簡化對從光源投射的光線的方向的描述,如圖3所示,使用方位角和仰角來描述光線的方向。
[0040]本方法首先提供一種數(shù)據(jù)結(jié)構(gòu)DS,用于存儲與虛擬點光源相關(guān)的數(shù)據(jù);數(shù)據(jù)結(jié)構(gòu)DS包括虛擬點光源的位置、虛擬點光源所在位置的法向量、虛擬點光源的發(fā)光強度、虛擬點光源的主光照出射方向、虛擬點光源類型、虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF、與虛擬點光源相關(guān)聯(lián)的光線的方位角、與虛擬點光源相關(guān)聯(lián)的光線的仰角共八個成員變量。
[0041]本方法的第一部分在計算機系統(tǒng)中計算三維場景中的光源AOOl的光照發(fā)射空間的采樣光線與場景圖SSG中的幾何對象的交點,并在交點位置處創(chuàng)建虛擬點光源,具體步驟如下:
[0042]SteplOl:令列表A002為空;令列表LVPLS為空;
[0043]Stepl02:從光源AOOl所在位置向光源AOOl的光照發(fā)射空間投射一系列光線,并將這些光線存放在列表A002中;
[0044]St印103:對列表A002中的每條光線A003,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印103-1至St印103-3:
[0045]St印103-1:測試光線A003是否與場景圖SSG中的幾何對象相交,如果不相交,則轉(zhuǎn)子步驟St印103-3 ;
[0046]St印103-2:計算光線A003與場景圖SSG中的幾何對象之間的距光源AOOl最近的交點A004,創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量A005 ;將交點A004所在的位置賦值給變量A005的虛擬點光源的位置成員變量,將交點A004所在的位置的法向量賦值給變量A005的虛擬點光源所在位置的法向量成員變量,將交點A004所在幾何對象的表面的雙向反射分布函數(shù)BRDF賦值給變量A005的虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF成員變量;如果交點A004所在幾何對象的表面為漫反射面,則將變量A005的虛擬點光源類型成員變量賦值為“半球全向光源類型”,否則將變量A005的虛擬點光源類型成員變量賦值為“聚光燈類型”;將光線A003在局部坐標系COR中的方位角和仰角分別賦值給變量A005的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;根據(jù)光源AOOl的發(fā)光強度和位置、交點A004的位置、交點A004所在的位置的法向量、交點A004所在幾何對象的表面的雙向反射分布函數(shù)BRDF計算變量A005的虛擬點光源的發(fā)光強度成員變量的值;如果變量A005的虛擬點光源類型成員變量為“半球全向光源類型”,則將變量A005的虛擬點光源的主光照出射方向成員變量賦值為交點A004所在的位置的法向量,否則將變量A005的虛擬點光源的主光照出射方向成員變量賦值為光線A003在交點A004處發(fā)生理想鏡面反射時的反射光線方向;將變量A005加入列表LVPLS中。
[0047]St印103-3:針對光線A003的計算結(jié)束。
[0048]本方法的第二部分逐幀地完成動畫三維場景的全局光照繪制,具體步驟如下:[0049]St印201:令幀編號變量ID為I ;
[0050]St印202:令列表LVPLD為空;
[0051]St印203:對本方法的第一部分中得到的列表A002中的每條光線A003,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印203-1至St印203-3:
[0052]St印203-1:測試光線A003是否與場景圖DSG中的幾何對象相交,如果不相交,則轉(zhuǎn)子步驟St印203-3 ;
[0053]St印203-2:計算光線A003與場景圖DSG中的幾何對象之間的距光源AOOl最近的交點B004,創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B005 ;將交點B004所在的位置賦值給變量B005的虛擬點光源的位置成員變量,將交點B004所在的位置的法向量賦值給變量B005的虛擬點光源所在位置的法向量成員變量,將交點B004所在幾何對象的表面的雙向反射分布函數(shù)BRDF賦值給變量B005的虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF成員變量;如果交點B004所在幾何對象的表面為漫反射面,則將變量B005的虛擬點光源類型成員變量賦值為“半球全向光源類型”,否則將變量B005的虛擬點光源類型成員變量賦值為“聚光燈類型”;將光線A003在局部坐標系COR中的方位角和仰角分別賦值給變量B005的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;根據(jù)光源AOOl的發(fā)光強度和位置、交點B004的位置、交點B004所在的位置的法向量、交點B004所在幾何對象的表面的雙向反射分布函數(shù)BRDF計算變量B005的虛擬點光源的發(fā)光強度成員變量的值;如果變量B005的虛擬點光源類型成員變量為“半球全向光源類型”,則將變量B005的虛擬點光源的主光照出射方向成員變量賦值為交點B004所在的位置的法向量,否則將變量B005的虛擬點光源的主光照出射方向成員變量賦值為光線A003在交點B004處發(fā)生理想鏡面反射時的反射光線方向;將變量B005加入列表LVPLD中。
[0054]St印203-3:針對光線A003的計算結(jié)束;
[0055]St印204:令列表LVPLU為空;
[0056]St印205:對本方法的第一部分中得到的列表LVPLS中的每個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B006,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印205-1至St印205-4:
[0057]St印205-1:判斷列表LVPLD中是否存在一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B007,變量B007的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量分別等于變量B006的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;如果不存在,則轉(zhuǎn)子步驟Step205-3 ;
[0058]St印205-2:根據(jù)變量B006的虛擬點光源的位置成員變量和光源AOOl的位置,計算變量B006對應(yīng)的虛擬點光源與光源AOOl之間的距離Dl ;根據(jù)變量B007的虛擬點光源的位置成員變量和光源AOOl的位置,計算變量B007對應(yīng)的虛擬點光源與光源AOOl之間的距離D2 ;如果Dl≥D2,將變量B007加入列表LVPLU中,否則將變量B006加入列表LVPLU中;刪除列表LVPLD中的變量B007 ;轉(zhuǎn)子步驟Step205_4 ;
[0059]St印205-3:將變量B006加到列表LVPLU中; [0060]St印205-4:針對數(shù)據(jù)結(jié)構(gòu)DS類型的變量B006的計算結(jié)束;
[0061]Step206:將列表LVPLD中剩余的變量加到列表LVPLU中;
[0062]St印207:在GPU并行計算設(shè)備上,用光線投射算法計算動畫三維場景的第ID幀畫面的直接光照結(jié)果,并將其保存在變量Vl中;[0063]St印208:對列表LVPLU中的每個數(shù)據(jù)結(jié)構(gòu)DS類型的變量C001,在GPU并行計算設(shè)備上并行地執(zhí)行子步驟St印208-1至St印208-4:
[0064]St印208-1:如果變量COOl的虛擬點光源類型成員變量為“半球全向光源類型”,轉(zhuǎn)子步驟St印208-3:
[0065]St印208-2:用變量COOl對應(yīng)的虛擬點光源照射第ID幀對應(yīng)的動畫三維場景,變量COOl對應(yīng)的虛擬點光源表示的聚光燈的角衰系數(shù)取值為COOl對應(yīng)的虛擬點光源所在位置的幾何對象表面的高光系數(shù),變量COOl對應(yīng)的虛擬點光源表示的聚光燈的主光照出射方向與聚光燈的光錐的母線之間的夾角取值為90度;用光線投射算法計算變量COOl對應(yīng)的虛擬點光源對第ID幀對應(yīng)的動畫三維場景產(chǎn)生的直接光照結(jié)果,并將其累加到變量Vl中;轉(zhuǎn)子步驟St印208-4 ;
[0066]St印208-3:用變量COOl對應(yīng)的虛擬點光源照射第ID幀對應(yīng)的動畫三維場景;用光線投射算法計算變量COOl對應(yīng)的虛擬點光源對第ID幀對應(yīng)的動畫三維場景產(chǎn)生的直接光照結(jié)果,并將其累加到變量Vl中;
[0067]St印208-4:針對數(shù)據(jù)結(jié)構(gòu)DS類型的變量COOl的計算結(jié)束;
[0068]St印209:將變量Vl中的光照數(shù)據(jù)轉(zhuǎn)換為第ID幀的畫面圖像數(shù)據(jù)輸出到文件中;
[0069]St印210:將場景圖DSG中的幾何對象變換到第ID+1幀的狀態(tài);將變量ID的值加1,轉(zhuǎn)步驟St印202。
[0070]如果繪制包含一個全向點光源的動畫三維場景的全局光照。在對光源的光照發(fā)射空間進行光線采樣時,可在全向點光源周圍放置一個立方體,將全向點光源放置在立方體的中心位置;在立方體的每個面上,各產(chǎn)生一個NXN的均勻網(wǎng)格,從點光源位置向各網(wǎng)格單元的中心點發(fā)射射線,每條射線就是一條采樣光線。
【權(quán)利要求】
1.利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法,其特征在于,所需的數(shù)據(jù)結(jié)構(gòu)以及實現(xiàn)步驟如下: 本方法的目的在于提供一種利用虛擬點光源實現(xiàn)動畫三維場景的全局光照繪制的方法;本方法的技術(shù)解決方案:將動畫三維場景中的幾何對象分為靜態(tài)幾何對象和動態(tài)幾何對象,所有靜態(tài)幾何對象用一個場景圖SSG來組織和管理,所有動態(tài)幾何對象用一個場景圖DSG來組織和管理;對光源的光照發(fā)射空間進行光線采樣,即從光源位置向光源的光照發(fā)射空間中投射一系列光線,分別計算這些光線與場景圖SSG和場景圖DSG中的幾何對象的交點;在這些交點處創(chuàng)建虛擬點光源來照射三維場景,通過計算這些虛擬點光源對三維場景點的直接光照貢獻來近似繪制主光源產(chǎn)生的間接光照;建立以光源位置為原點的局部坐標系COR,局部坐標系COR的z軸正方向取為光源的主光照出射方向,局部坐標系COR的X軸和I軸任意選取,只需保證局部坐標系COR的X軸、y軸、z軸兩兩正交即可;為了簡化對從光源投射的光線的方向的描述,使用方位角和仰角來描述光線的方向; 本方法首先提供一種數(shù)據(jù)結(jié)構(gòu)DS,用于存儲與虛擬點光源相關(guān)的數(shù)據(jù);數(shù)據(jù)結(jié)構(gòu)DS包括虛擬點光源的位置、虛擬點光源所在位置的法向量、虛擬點光源的發(fā)光強度、虛擬點光源的主光照出射方向、虛擬點光源類型、虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF、與虛擬點光源相關(guān)聯(lián)的光線的方位角、與虛擬點光源相關(guān)聯(lián)的光線的仰角共八個成員變量; 本方法的第一部分在計算機系統(tǒng)中計算三維場景中的光源AOOl的光照發(fā)射空間的采樣光線與場景圖SSG中的幾何對象的交點,并在交點位置處創(chuàng)建虛擬點光源,具體步驟如下: SteplOl:令列表A002為空;令列表LVPLS為空; Stepl02:從光源AOOl所在位置向光源AOOl的光照發(fā)射空間投射一系列光線,并將這些光線存放在列表A002中; St印103:對列表A002中的每條光線A003,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印 103-1 至 St印 103-3: St印103-1:測試光線A003是否與場景圖SSG中的幾何對象相交,如果不相交,則轉(zhuǎn)子步驟St印103-3 ; St印103-2:計算光線A003與場景圖SSG中的幾何對象之間的距光源AOOl最近的交點A004,創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量A005 ;將交點A004所在的位置賦值給變量A005的虛擬點光源的位置成員變量,將交點A004所在的位置的法向量賦值給變量A005的虛擬點光源所在位置的法向量成員變量,將交點A004所在幾何對象的表面的雙向反射分布函數(shù)BRDF賦值給變量A005的虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF成員變量;如果交點A004所在幾何對象的表面為漫反射面,則將變量A005的虛擬點光源類型成員變量賦值為“半球全向光源類型”,否則將變量A005的虛擬點光源類型成員變量賦值為“聚光燈類型”;將光線A003在局部坐標系COR中的方位角和仰角分別賦值給變量A005的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;根據(jù)光源AOOI的發(fā)光強度和位置、交點A004的位置、交點A004所在的位置的法向量、交點A004所在幾何對象的表面的雙向反射分布函數(shù)BRDF計算變量A005的虛擬點光源的發(fā)光強度成員變量的值;如果變量A005的虛擬點光源類型成員變量為“半球全向光源類型”,則將變量A005的虛擬點光源的主光照出射方向成員變量賦值為交點A004所在的位置的法向量,否則將變量A005的虛擬點光源的主光照出射方向成員變量賦值為光線A003在交點A004處發(fā)生理想鏡面反射時的反射光線方向;將變量A005加入列表LVPLS中; St印103-3:針對光線A003的計算結(jié)束; 本方法的第二部分逐幀地完成動畫三維場景的全局光照繪制,具體步驟如下: St印201:令幀編號變量ID為I ; St印202:令列表LVPLD為空; St印203:對本方法的第一部分中得到的列表A002中的每條光線A003,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印203-1至St印203-3: St印203-1:測試光線A003是否與場景圖DSG中的幾何對象相交,如果不相交,則轉(zhuǎn)子步驟St印203-3 ; St印203-2:計算光線A003與場景圖DSG中的幾何對象之間的距光源AOOl最近的交點B004,創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B005 ;將交點B004所在的位置賦值給變量B005的虛擬點光源的位置成員變量,將交點B004所在的位置的法向量賦值給變量B005的虛擬點光源所在位置的法向量成員變量,將交點B004所在幾何對象的表面的雙向反射分布函數(shù)BRDF賦值給變量B005的虛擬點光源所在幾何對象表面的雙向反射分布函數(shù)BRDF成員變量;如果交點B004所在幾何對象的表面為漫反射面,則將變量B005的虛擬點光源類型成員變量賦值為“半球全向光源類型”,否則將變量B005的虛擬點光源類型成員變量賦值為“聚光燈類型”;將光線A003在局部坐 標系COR中的方位角和仰角分別賦值給變量B005的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;根據(jù)光源AOOl的發(fā)光強度和位置、交點B004的位置、交點B004所在的位置的法向量、交點B004所在幾何對象的表面的雙向反射分布函數(shù)BRDF計算變量B005的虛擬點光源的發(fā)光強度成員變量的值;如果變量B005的虛擬點光源類型成員變量為“半球全向光源類型”,則將變量B005的虛擬點光源的主光照出射方向成員變量賦值為交點B004所在的位置的法向量,否則將變量B005的虛擬點光源的主光照出射方向成員變量賦值為光線A003在交點B004處發(fā)生理想鏡面反射時的反射光線方向;將變量B005加入列表LVPLD中; St印203-3:針對光線A003的計算結(jié)束; St印204:令列表LVPLU為空; St印205:對本方法的第一部分中得到的列表LVPLS中的每個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B006,利用GPU并行計算設(shè)備并行地執(zhí)行子步驟St印205-1至St印205-4: St印205-1:判斷列表LVPLD中是否存在一個數(shù)據(jù)結(jié)構(gòu)DS類型的變量B007,變量B007的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量分別等于變量B006的與虛擬點光源相關(guān)聯(lián)的光線的方位角和與虛擬點光源相關(guān)聯(lián)的光線的仰角成員變量;如果不存在,則轉(zhuǎn)子步驟Step205-3 ; St印205-2:根據(jù)變量B006的虛擬點光源的位置成員變量和光源AOOl的位置,計算變量B006對應(yīng)的虛擬點光源與光源AOOl之間的距離Dl ;根據(jù)變量B007的虛擬點光源的位置成員變量和光源AOOl的位置,計算變量B007對應(yīng)的虛擬點光源與光源AOOl之間的距離D2 ;如果Dl≥D2,將變量B007加入列表LVPLU中,否則將變量B006加入列表LVPLU中;刪除列表LVPLD中的變量B007 ;轉(zhuǎn)子步驟Step205_4 ;St印205-3:將變量B006加到列表LVPLU中; St印205-4:針對數(shù)據(jù)結(jié)構(gòu)DS類型的變量B006的計算結(jié)束; St印206:將列表LVPLD中剩余的變量加到列表LVPLU中; St印207:在GPU并行計算設(shè)備上,用光線投射算法計算動畫三維場景的第ID幀畫面的直接光照結(jié)果,并將其保存在變量Vl中; St印208:對列表LVPLU中的每個數(shù)據(jù)結(jié)構(gòu)DS類型的變量⑶01,在GPU并行計算設(shè)備上并行地執(zhí)行子步驟St印208-1至St印208-4: St印208-1:如果變量COOl的虛擬點光源類型成員變量為“半球全向光源類型”,轉(zhuǎn)子步驟St印208-3 ; St印208-2:用變量COOl對應(yīng)的虛擬點光源照射第ID幀對應(yīng)的動畫三維場景,變量COOl對應(yīng)的虛擬點光源表示的聚光燈的角衰系數(shù)取值為COOl對應(yīng)的虛擬點光源所在位置的幾何對象表面的高光系數(shù),變量COOl對應(yīng)的虛擬點光源表示的聚光燈的主光照出射方向與聚光燈的光錐的母線之間的夾角取值為90度;用光線投射算法計算變量COOl對應(yīng)的虛擬點光源對第ID幀對應(yīng)的動畫三維場景產(chǎn)生的直接光照結(jié)果,并將其累加到變量Vl中;轉(zhuǎn)子步驟St印208-4 ; St印208-3:用變量COOl對應(yīng)的虛擬點光源照射第ID幀對應(yīng)的動畫三維場景;用光線投射算法計算變量COOl對應(yīng)的虛擬點光源對第ID幀對應(yīng)的動畫三維場景產(chǎn)生的直接光照結(jié)果,并將其累加到變量V l中; St印208-4:針對數(shù)據(jù)結(jié)構(gòu)DS類型的變量COOl的計算結(jié)束; Step209:將變量Vl中的光照數(shù)據(jù)轉(zhuǎn)換為第ID幀的畫面圖像數(shù)據(jù)輸出到文件中; St印210:將場景圖DSG中的幾何對象變換到第ID+1幀的狀態(tài);將變量ID的值加1,轉(zhuǎn)步驟St印202。
【文檔編號】G06T15/06GK104008563SQ201410263798
【公開日】2014年8月27日 申請日期:2014年6月7日 優(yōu)先權(quán)日:2014年6月7日
【發(fā)明者】陳純毅, 楊華民, 李巖芳, 李華, 蔣振剛, 范靜濤, 韓成, 曲福恒 申請人:長春理工大學