本發(fā)明涉及一種三維場景立體畫面繪制中的間接光照復用方法,屬于真實感三維場景繪制技術領域。
背景技術:
3d電影技術目前已得到廣泛應用。3d電影中的許多畫面通常都用計算機真實感三維場景繪制技術來生成。3d場景的立體畫面由左眼畫面和右眼畫面組成。可以通過圖1所示的方式,使用兩個虛擬相機來拍攝三維場景的立體畫面,左眼畫面對應的虛擬相機(101)拍攝左眼畫面,右眼畫面對應的虛擬相機(102)拍攝右眼畫面,虛擬相機(101)在左眼視點位置,虛擬相機(102)在右眼視點位置,從左眼視點發(fā)射穿過虛擬相機(101)的虛擬像素平面(103)上的像素的光線與幾何對象(105)交于點p1,從右眼視點發(fā)射穿過虛擬相機(102)的虛擬像素平面(104)上的像素的光線與幾何對象(105)交于點p1。在播放立體畫面時,觀眾的左眼只能看到左眼畫面,觀眾的右眼只能看到右眼畫面,通過人腦合成產(chǎn)生立體視覺效果。
在繪制三維場景的立體畫面時,需要分別繪制左眼畫面和右眼畫面。由于每幀立體畫面實際包含兩幅畫面,因此其繪制時間相比于非立體畫面繪制時間更長。雖然左眼畫面和右眼畫面通常存在一定的差異,但是二者也具有明顯的相似性;如果已經(jīng)繪制出左眼畫面,則在繪制右眼畫面時可以在一定程度上復用左眼畫面的部分計算結果,從而節(jié)省繪制時間。在電影三維場景繪制中,通常需要繪制出場景的全局光照效果。全局光照可以分為直接光照和間接光照兩部分。直接光照是光源發(fā)出的光直接到達可視場景點產(chǎn)生的光照貢獻;間接光照是光源發(fā)出的光先經(jīng)其他物體散射后,再入射到可視場景點產(chǎn)生的光照貢獻。通過觀察現(xiàn)實生活場景可以發(fā)現(xiàn),直接光照效果的空間變化在視覺上一般比間接光照效果的空間變化明顯。這意味著間接光照比直接光照更適合于在空間上進行復用。此外,生活經(jīng)驗表明,鏡面反射物體的光照視覺效果具有很強的方向依賴性,這會給鏡面反射間接光照復用帶來困難。因此,在繪制左右眼畫面時,本發(fā)明只對漫反射物體上的可視場景點的間接光照進行復用,鏡面反射物體上的可視場景點的間接光照則重新計算。由于實際三維場景通常包含大量漫反射類型的物體,因此本發(fā)明的間接光照復用方法能明顯縮短立體畫面繪制時間。
光線跟蹤(raytracing)是一種常用的真實感三維場景繪制技術。通常光線跟蹤采用逆向跟蹤策略,即不是從光源出發(fā)跟蹤光線在三維場景中的傳播,而是從視點出發(fā)逆向跟蹤光線在三維場景中的傳播。用光線跟蹤可以很好地繪制出鏡面反射物體的間接光照效果。然而,用傳統(tǒng)光線跟蹤技術繪制漫反射物體的間接光照效果則比較低效。光線跟蹤和光子映射(photonmapping)技術經(jīng)常被結合在一起用來繪制三維場景的全局光照效果。首先使用光子跟蹤技術創(chuàng)建光子圖,然后利用光線跟蹤技術找到可視場景點。對每個漫反射類型的可視場景點,可從光子圖中搜索與該可視場景點鄰近的光子并據(jù)此計算該可視場景點的間接光照。然而,這種直接根據(jù)光子圖中的光子計算可視場景點間接光照的方式會導致三維場景畫面中出現(xiàn)明顯的低頻噪聲。解決這一問題的方法是使用最終聚集(finalgathering)技術。最終聚集技術從漫反射類型的可視場景點向該可視場景點的法向量指向的半球空間隨機發(fā)射一系列射線,該可視場景點也稱為最終光照聚集點,計算這些射線與三維場景幾何對象的交點,這些交點稱為光照采集點。最終聚集技術通過從光子圖中搜索與光照采集點鄰近的光子來計算光照采集點的間接光照值,進而根據(jù)光照采集點的間接光照值來計算最終光照聚集點的間接光照值??梢晥鼍包c的法向量指向的半球空間如圖2所示,其中法向量與半球底面垂直,可視場景點在半球底面的中心位置。最終聚集技術在許多文獻中有專門論述,例如2010年morgankaufmann出版社出版的由m.pharr和g.humphreys撰寫的書《physicallybasedrendering:fromtheorytoimplementation,2ndedition》、山東大學2014年崔云鵬的碩士學位論文《基于renderman的光子映射算法研究與實現(xiàn)》等。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種三維場景立體畫面繪制中的間接光照復用方法,其在繪制右眼畫面時通過對繪制左眼畫面時聚集得到的間接光照結果進行復用,來提高三維場景立體畫面的繪制效率。
本發(fā)明的技術方案是這樣實現(xiàn)的:一種三維場景立體畫面繪制中的間接光照復用方法,其特征在于:首先使用光子跟蹤技術創(chuàng)建光子圖,然后繪制左眼畫面的全局光照效果,接著再繪制右眼畫面的全局光照效果,具體實現(xiàn)步驟如下:
1)使用光子跟蹤技術創(chuàng)建光子圖,具體方法如下:
首先創(chuàng)建一個不包含任何光子記錄的光子圖pmap;使用光子跟蹤技術從光源向三維場景發(fā)射num個光子,跟蹤這num個光子在三維場景中傳播時與幾何對象發(fā)生碰撞而被散射的過程;對于每個光子a001,在跟蹤光子a001在三維場景中傳播時與幾何對象發(fā)生碰撞而被散射的過程中,從光子a001第二次與三維場景幾何對象發(fā)生碰撞開始,每發(fā)生一次碰撞就向光子圖pmap中添加一個光子記錄,每個光子記錄包括光子與三維場景幾何對象的碰撞位置ppos、光子在碰撞位置ppos處的歸一化入射方向向量pvi、光子在碰撞位置ppos處的入射功率pw共三個分量。
2)綜合利用光線跟蹤和光子映射技術繪制三維場景左眼畫面的全局光照效果,其中用光線跟蹤技術繪制三維場景左眼畫面的直接光照效果和所有鏡面反射類型的可視場景點的間接光照效果,用最終聚集技術計算三維場景左眼畫面的所有漫反射類型的可視場景點的間接光照,具體步驟如下:
步驟step201:創(chuàng)建一個包含m行、n列元素的數(shù)組lim,m表示左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素行數(shù),n表示左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素列數(shù);把數(shù)組lim的每個元素賦值為背景色對應的光照值;數(shù)組lim的元素和左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素一一對應;利用光線跟蹤技術,從左眼視點發(fā)射穿過左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的各個像素的光線a002,光線a002和虛擬像素平面lvcpp上的像素一一對應;對于每條光線a002,做如下操作:
步驟step201-1:計算光線a002對應的虛擬像素平面lvcpp上的像素對應的數(shù)組lim的元素的行號irow和列號jcol;判斷光線a002與三維場景幾何對象是否相交,如果相交,則轉步驟step201-2,否則轉步驟step201-5;
步驟step201-2:計算光線a002與三維場景幾何對象的離左眼視點最近的交點b001,交點b001是一個可視場景點lvspoint,光線a002與可視場景點lvspoint一一對應;根據(jù)光線跟蹤技術使用的直接光照計算方法計算交點b001的直接光照b002,同時進一步判斷交點b001所在的幾何對象表面是漫反射表面還是鏡面反射表面,如果是漫反射表面,則轉步驟step201-3,如果是鏡面反射表面則轉步驟step201-4;
步驟step201-3:根據(jù)光子圖pmap,使用最終聚集技術計算交點b001的間接光照b003,把數(shù)組lim的第irow行、第jcol列的元素賦值為直接光照b002與間接光照b003之和;轉步驟step201-5;
步驟step201-4:使用光線跟蹤技術計算交點b001的間接光照b004,把數(shù)組lim的第irow行、第jcol列的元素賦值為直接光照b002與間接光照b004之和;
步驟step201-5:對光線a002的操作結束。
步驟step202:把數(shù)組lim的每個元素的值轉換成三維場景左眼畫面圖像像素顏色值,并把三維場景左眼畫面圖像保存到計算機磁盤文件之中。
3)綜合利用光線跟蹤和光子映射技術繪制三維場景右眼畫面的全局光照效果,其中用光線跟蹤技術繪制三維場景右眼畫面的直接光照效果和所有鏡面反射類型的可視場景點的間接光照效果,另外如果繪制右眼畫面時計算得到的漫反射類型的可視場景點在左眼畫面對應的空間區(qū)域中,則直接復用繪制左眼畫面時聚集得到的間接光照結果,否則用最終聚集技術計算該漫反射類型的可視場景點的間接光照,具體步驟如下:
步驟step301:創(chuàng)建一個包含m行、n列元素的數(shù)組rim,m表示右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的像素行數(shù),n表示右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的像素列數(shù);把數(shù)組rim的每個元素賦值為背景色對應的光照值;數(shù)組rim的元素和右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的像素一一對應;利用光線跟蹤技術,從右眼視點發(fā)射穿過右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的各個像素的光線c002,光線c002和虛擬像素平面rvcpp上的像素一一對應;對于每條光線c002,做如下操作:
步驟step301-1:計算光線c002對應的虛擬像素平面rvcpp上的像素對應的數(shù)組rim的元素的行號irow和列號jcol;判斷光線c002與三維場景幾何對象是否相交,如果相交,則轉步驟step301-2,否則轉步驟step301-8;
步驟step301-2:計算光線c002與三維場景幾何對象的離右眼視點最近的交點d001,交點d001是一個可視場景點rvspoint,光線c002與可視場景點rvspoint一一對應;根據(jù)光線跟蹤技術使用的直接光照計算方法計算交點d001的直接光照d002,同時進一步判斷交點d001所在的幾何對象表面是漫反射表面還是鏡面反射表面,如果是漫反射表面,則轉步驟step301-3,如果是鏡面反射表面則轉步驟step301-7;
步驟step301-3:計算交點d001在左眼畫面對應的虛擬相機的相機坐標系corsl中的坐標posl,相機坐標系corsl的原點在左眼視點位置,相機坐標系corsl的w方向為左眼畫面對應的虛擬相機的觀察正前方向的反方向,相機坐標系corsl的v方向為左眼畫面對應的虛擬相機的觀察向上方向,相機坐標系corsl的u方向與相機坐標系corsl的v方向和相機坐標系corsl的w方向相互垂直,相機坐標系corsl的u方向、v方向、w方向符合右手三維直角坐標系規(guī)范;令坐標posl在u方向上的分量為u,坐標posl在v方向上的分量為v,坐標posl在w方向上的分量為w,左眼畫面對應的虛擬相機在u方向上的視場角為α,左眼畫面對應的虛擬相機在v方向上的視場角為β;如果|u/w|≤tan(α/2)且|v/w|≤tan(β/2)且w<0,則轉步驟step301-4,否則轉步驟step301-6;
步驟step301-4:創(chuàng)建一條光線ray,光線ray的起點為左眼視點,光線ray的方向為從左眼視點指向坐標posl所在位置的方向,計算光線ray穿過左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素的行號ir和列號jc;如果虛擬像素平面lvcpp上的第ir行、第jc列像素對應的光線a002與三維場景幾何對象相交,且虛擬像素平面lvcpp上的第ir行、第jc列像素對應的光線a002對應的可視場景點lvspoint所在的幾何對象表面和交點d001所在的幾何對象表面是同一個幾何對象表面,則轉步驟step301-5,否則轉步驟step301-6;
步驟step301-5:把數(shù)組rim的第irow行、第jcol列的元素賦值為直接光照d002與虛擬像素平面lvcpp上的第ir行、第jc列像素對應的光線a002對應的可視場景點lvspoint的間接光照b003之和;轉步驟step301-8;
步驟step301-6:根據(jù)光子圖pmap,使用最終聚集技術計算交點d001的間接光照d003,把數(shù)組rim的第irow行、第jcol列的元素賦值為直接光照d002與間接光照d003之和;轉步驟step301-8;
步驟step301-7:使用光線跟蹤技術計算交點d001的間接光照d004,把數(shù)組rim的第irow行、第jcol列的元素賦值為直接光照d002與間接光照d004之和;
步驟step301-8:對光線c002的操作結束。
步驟step302:把數(shù)組rim的每個元素的值轉換成三維場景右眼畫面圖像像素顏色值,并把三維場景右眼畫面圖像保存到計算機磁盤文件之中。
本發(fā)明的積極效果是利用了三維場景立體畫面的左右眼畫面的間接光照存在相似性的特點,在繪制右眼畫面的全局光照效果時復用那些在繪制左眼畫面時已經(jīng)計算出的漫反射可視場景點間接光照結果,從而在繪制右眼畫面時節(jié)省了執(zhí)行最終聚集操作所需的時間開銷,提高了三維場景立體畫面的繪制效率。
附圖說明
圖1為使用左眼和右眼虛擬相機拍攝三維場景立體畫面的示意圖。
圖2為可視場景點的法向量指向的半球空間示意圖。
圖3為左眼畫面對應的虛擬相機的相機坐標系corsl示意圖。
具體實施方式
為了使本方法的特征和優(yōu)點更加清楚明白,下面結合具體實施例對本方法作進一步的描述。本實施例考慮包含一面鏡子和一張床的臥室三維場景,鏡子表面被指定為鏡面反射表面,床、臥室墻、臥室天花板、臥室地板都被指定為漫反射表面。計算機系統(tǒng)的cpu選擇intel(r)xeon(r)cpue3-1225v3@3.20ghz,內(nèi)存選擇金士頓8gbddr31333,磁盤選擇buffalohd-ce1.5tu2,顯卡選用nvidiaquadrok2000;計算機操作系統(tǒng)選用windows7,軟件編程工具選用vc++2010。
一種三維場景立體畫面繪制中的間接光照復用方法,首先使用光子跟蹤技術創(chuàng)建光子圖,然后繪制左眼畫面的全局光照效果,接著再繪制右眼畫面的全局光照效果,具體實現(xiàn)步驟如下:
1)使用光子跟蹤技術創(chuàng)建光子圖,具體方法如下:
首先創(chuàng)建一個不包含任何光子記錄的光子圖pmap;使用光子跟蹤技術從光源向三維場景發(fā)射num個光子,跟蹤這num個光子在三維場景中傳播時與幾何對象發(fā)生碰撞而被散射的過程;對于每個光子a001,在跟蹤光子a001在三維場景中傳播時與幾何對象發(fā)生碰撞而被散射的過程中,從光子a001第二次與三維場景幾何對象發(fā)生碰撞開始,每發(fā)生一次碰撞就向光子圖pmap中添加一個光子記錄,每個光子記錄包括光子與三維場景幾何對象的碰撞位置ppos、光子在碰撞位置ppos處的歸一化入射方向向量pvi、光子在碰撞位置ppos處的入射功率pw共三個分量。
2)綜合利用光線跟蹤和光子映射技術繪制三維場景左眼畫面的全局光照效果,其中用光線跟蹤技術繪制三維場景左眼畫面的直接光照效果和所有鏡面反射類型的可視場景點的間接光照效果,用最終聚集技術計算三維場景左眼畫面的所有漫反射類型的可視場景點的間接光照,具體步驟如下:
步驟step201:創(chuàng)建一個包含m行、n列元素的數(shù)組lim,m表示左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素行數(shù),n表示左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素列數(shù);把數(shù)組lim的每個元素賦值為背景色對應的光照值;數(shù)組lim的元素和左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素一一對應;利用光線跟蹤技術,從左眼視點發(fā)射穿過左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的各個像素的光線a002,光線a002和虛擬像素平面lvcpp上的像素一一對應;對于每條光線a002,做如下操作:
步驟step201-1:計算光線a002對應的虛擬像素平面lvcpp上的像素對應的數(shù)組lim的元素的行號irow和列號jcol;判斷光線a002與三維場景幾何對象是否相交,如果相交,則轉步驟step201-2,否則轉步驟step201-5;
步驟step201-2:計算光線a002與三維場景幾何對象的離左眼視點最近的交點b001,交點b001是一個可視場景點lvspoint,光線a002與可視場景點lvspoint一一對應;根據(jù)光線跟蹤技術使用的直接光照計算方法計算交點b001的直接光照b002,同時進一步判斷交點b001所在的幾何對象表面是漫反射表面還是鏡面反射表面,如果是漫反射表面,則轉步驟step201-3,如果是鏡面反射表面則轉步驟step201-4;
步驟step201-3:根據(jù)光子圖pmap,使用最終聚集技術計算交點b001的間接光照b003,把數(shù)組lim的第irow行、第jcol列的元素賦值為直接光照b002與間接光照b003之和;轉步驟step201-5;
步驟step201-4:使用光線跟蹤技術計算交點b001的間接光照b004,把數(shù)組lim的第irow行、第jcol列的元素賦值為直接光照b002與間接光照b004之和;
步驟step201-5:對光線a002的操作結束。
步驟step202:把數(shù)組lim的每個元素的值轉換成三維場景左眼畫面圖像像素顏色值,并把三維場景左眼畫面圖像保存到計算機磁盤文件之中。
3)綜合利用光線跟蹤和光子映射技術繪制三維場景右眼畫面的全局光照效果,其中用光線跟蹤技術繪制三維場景右眼畫面的直接光照效果和所有鏡面反射類型的可視場景點的間接光照效果,另外如果繪制右眼畫面時計算得到的漫反射類型的可視場景點在左眼畫面對應的空間區(qū)域中,則直接復用繪制左眼畫面時聚集得到的間接光照結果,否則用最終聚集技術計算該漫反射類型的可視場景點的間接光照,具體步驟如下:
步驟step301:創(chuàng)建一個包含m行、n列元素的數(shù)組rim,m表示右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的像素行數(shù),n表示右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的像素列數(shù);把數(shù)組rim的每個元素賦值為背景色對應的光照值;數(shù)組rim的元素和右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的像素一一對應;利用光線跟蹤技術,從右眼視點發(fā)射穿過右眼畫面對應的虛擬相機的虛擬像素平面rvcpp上的各個像素的光線c002,光線c002和虛擬像素平面rvcpp上的像素一一對應;對于每條光線c002,做如下操作:
步驟step301-1:計算光線c002對應的虛擬像素平面rvcpp上的像素對應的數(shù)組rim的元素的行號irow和列號jcol;判斷光線c002與三維場景幾何對象是否相交,如果相交,則轉步驟step301-2,否則轉步驟step301-8;
步驟step301-2:計算光線c002與三維場景幾何對象的離右眼視點最近的交點d001,交點d001是一個可視場景點rvspoint,光線c002與可視場景點rvspoint一一對應;根據(jù)光線跟蹤技術使用的直接光照計算方法計算交點d001的直接光照d002,同時進一步判斷交點d001所在的幾何對象表面是漫反射表面還是鏡面反射表面,如果是漫反射表面,則轉步驟step301-3,如果是鏡面反射表面則轉步驟step301-7;
步驟step301-3:計算交點d001在左眼畫面對應的虛擬相機的相機坐標系corsl中的坐標posl,相機坐標系corsl的原點在左眼視點位置,相機坐標系corsl的w方向為左眼畫面對應的虛擬相機的觀察正前方向的反方向,相機坐標系corsl的v方向為左眼畫面對應的虛擬相機的觀察向上方向,相機坐標系corsl的u方向與相機坐標系corsl的v方向和相機坐標系corsl的w方向相互垂直,相機坐標系corsl的u方向、v方向、w方向符合右手三維直角坐標系規(guī)范;令坐標posl在u方向上的分量為u,坐標posl在v方向上的分量為v,坐標posl在w方向上的分量為w,左眼畫面對應的虛擬相機在u方向上的視場角為α,左眼畫面對應的虛擬相機在v方向上的視場角為β;如果|u/w|≤tan(α/2)且|v/w|≤tan(β/2)且w<0,則轉步驟step301-4,否則轉步驟step301-6;
步驟step301-4:創(chuàng)建一條光線ray,光線ray的起點為左眼視點,光線ray的方向為從左眼視點指向坐標posl所在位置的方向,計算光線ray穿過左眼畫面對應的虛擬相機的虛擬像素平面lvcpp上的像素的行號ir和列號jc;如果虛擬像素平面lvcpp上的第ir行、第jc列像素對應的光線a002與三維場景幾何對象相交,且虛擬像素平面lvcpp上的第ir行、第jc列像素對應的光線a002對應的可視場景點lvspoint所在的幾何對象表面和交點d001所在的幾何對象表面是同一個幾何對象表面,則轉步驟step301-5,否則轉步驟step301-6;
步驟step301-5:把數(shù)組rim的第irow行、第jcol列的元素賦值為直接光照d002與虛擬像素平面lvcpp上的第ir行、第jc列像素對應的光線a002對應的可視場景點lvspoint的間接光照b003之和;轉步驟step301-8;
步驟step301-6:根據(jù)光子圖pmap,使用最終聚集技術計算交點d001的間接光照d003,把數(shù)組rim的第irow行、第jcol列的元素賦值為直接光照d002與間接光照d003之和;轉步驟step301-8;
步驟step301-7:使用光線跟蹤技術計算交點d001的間接光照d004,把數(shù)組rim的第irow行、第jcol列的元素賦值為直接光照d002與間接光照d004之和;
步驟step301-8:對光線c002的操作結束。
步驟step302:把數(shù)組rim的每個元素的值轉換成三維場景右眼畫面圖像像素顏色值,并把三維場景右眼畫面圖像保存到計算機磁盤文件之中。
圖3示出了步驟step301-3中提及的左眼畫面對應的虛擬相機的相機坐標系corsl示意圖,能被虛擬相機拍攝到的幾何對象在相機坐標系corsl的w軸的負向空間中。
在本實施例中,num取值為1000,m取值為768,n取值為1024,α取值為45度,β取值為45度。對于立體畫面繪制,左眼畫面對應的虛擬相機的虛擬像素平面上的像素行數(shù)等于右眼畫面對應的虛擬相機的虛擬像素平面上的像素行數(shù),左眼畫面對應的虛擬相機的虛擬像素平面上的像素列數(shù)等于右眼畫面對應的虛擬相機的虛擬像素平面上的像素列數(shù)。