本發(fā)明涉及一種利用位置敏感可見性平滑濾波實現(xiàn)三維場景近似柔和陰影繪制的方法, 屬于三維圖形繪制技術(shù)領(lǐng)域。
背景技術(shù):
陰影是三維場景中的一種重要視覺效果,它能為三維場景的觀察者提供不同三維物體之間的空間位置關(guān)系信息。陰影生成是三維場景繪制中的核心操作。在許多實時交互式三維場景繪制應(yīng)用中,為了獲得能支持實時人機(jī)交互的繪制速度,往往使用點光源照射三維場景。點光源照射下的三維場景陰影通常呈現(xiàn)清晰的邊界,三維場景點要么處于陰影之中,要么可以被點光源直接照射,不存在從陰影區(qū)到非陰影區(qū)的過渡區(qū),這種陰影通常被稱為硬陰影。然而,現(xiàn)實生活場景中的陰影通常呈現(xiàn)柔和陰影特征,即從陰影區(qū)到非陰影區(qū)平滑過渡,沒有清晰的邊界。那些完全接收不到光源發(fā)射的光照的區(qū)域稱為本影區(qū),本影區(qū)和非陰影區(qū)之間的區(qū)域稱為半影區(qū)。為了生成真實感強(qiáng)的三維場景畫面,需要繪制出三維場景的柔和陰影效果。柔和陰影通常與面光源或者體光源聯(lián)系在一起。為了繪制出逼真的柔和陰影效果,需要對面光源或者體光源進(jìn)行采樣,同時計算場景點對每個光源采樣點的可見性。這通常會導(dǎo)致較大的計算開銷,從而影響三維場景的繪制速度。因此,在許多交互式應(yīng)用中,都不計算精確的柔和陰影結(jié)果,通常使用近似技術(shù)繪制近似柔和陰影效果。
陰影映射(Shadow Mapping)是一種基于圖像的硬陰影繪制方法,該方法利用陰影圖(Shadow Map)來實現(xiàn)場景點與點光源之間的可見性判斷,目前已經(jīng)得到廣泛應(yīng)用?,F(xiàn)有文獻(xiàn)中報道的各種近似柔和陰影繪制方法能夠在不同的近似程度上生成三維場景的近似柔和陰影。逼真的柔和陰影通常具有如下特征:①半影區(qū)的陰影應(yīng)該隨陰影投射對象到陰影接收對象的距離的增加而變得更柔和;②當(dāng)光源變得足夠大時,本影區(qū)應(yīng)該消失。不少現(xiàn)有近似柔和陰影繪制方法不能繪制出具備上述特征的柔和陰影,因此其繪制的近似柔和陰影的真實感并不是非常高。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種利用位置敏感可見性平滑濾波實現(xiàn)三維場景近似柔和陰影繪制的方法,通過對方向點光源照射下的三維場景中的光源可見性進(jìn)行位置敏感的平滑濾波,能繪制出近似柔和陰影,可顯著提高繪制出的三維場景直接光照效果畫面的真實感。
本方法技術(shù)方案是這樣實現(xiàn)的:一種利用位置敏感可見性平滑濾波實現(xiàn)三維場景近似柔和陰影繪制的方法,其特征在于:首先把相機(jī)放在方向點光源所在位置,使相機(jī)的正前方向朝著方向點光源的光錐軸方向,使相機(jī)的視場角等于方向點光源的光錐的錐頂角,繪制三維場景以創(chuàng)建陰影圖SM;然后把相機(jī)放在視點位置,按正常的觀察方向和視場角參數(shù)繪制三維場景,計算每個可視場景點的空間位置以及不考慮遮擋時的源自方向點光源的直接光照值NCDI,利用陰影圖SM判斷每個可視場景點與方向點光源之間是否存在遮擋,如果存在遮擋,可視場景點對應(yīng)的光源可見性值為0,否則可視場景點對應(yīng)的光源可見性值為1;把所有可視場景點對應(yīng)的光源可見性值保存成一個光源可見性圖VM,利用位置敏感可見性平滑濾波方法對光源可見性圖進(jìn)行濾波,得到每個可視場景點對應(yīng)的平滑光源可見性值SV;每個可視場景點的源自方向點光源的實際直接光照值等于直接光照值NCDI與平滑光源可見性值SV之乘積;最后把每個可視場景點的實際直接光照值轉(zhuǎn)換成對應(yīng)像素的顏色值,并輸出到計算機(jī)屏幕上,從而顯示出三維場景直接光照效果畫面中的柔和陰影。方向點光源只在光錐的錐頂角范圍內(nèi)發(fā)射光照,在與光錐軸方向夾成的夾角大于錐頂角的一半的方向上無光照發(fā)射??梢晥鼍包c就是從視點透過虛擬像素平面能直接看見的場景點,可視場景點與像素一一對應(yīng)。從視點出發(fā)的穿過虛擬像素平面的像素的射線與三維幾何對象相交,離視點最近的交點就是可視場景點。具體步驟如下:
一、創(chuàng)建陰影圖:
步驟S101:按照陰影映射方法的流程,把相機(jī)放在方向點光源所在位置,使相機(jī)的正前方向朝著方向點光源的光錐軸方向,使相機(jī)的視場角等于方向點光源的光錐的錐頂角,繪制三維場景以創(chuàng)建陰影圖SM;
二、計算不考慮遮擋時的可視場景點的源自方向點光源的直接光照值NCDI并創(chuàng)建可見性圖VM:
步驟S201:把相機(jī)放在視點位置,按正常的觀察方向和視場角參數(shù)繪制三維場景,計算每個可視場景點的空間位置以及不考慮遮擋時的源自方向點光源的直接光照值NCDI;在計算機(jī)系統(tǒng)的存儲器中創(chuàng)建一個二維數(shù)組DIS,二維數(shù)組DIS的行數(shù)等于虛擬像素平面的像素行數(shù),二維數(shù)組DIS的列數(shù)等于虛擬像素平面的像素列數(shù),把二維數(shù)組DIS的每個元素都賦值為?1,二維數(shù)組DIS的元素與虛擬像素平面上的像素一一對應(yīng),二維數(shù)組DIS的元素也與可視場景點一一對應(yīng);
步驟S202:使用陰影映射方法的技術(shù),利用陰影圖SM判斷每個可視場景點與方向點光源之間是否存在遮擋,如果存在遮擋,則令可視場景點對應(yīng)的光源可見性值為0,同時把與可視場景點對應(yīng)的二維數(shù)組DIS的元素賦值為陰影映射方法在執(zhí)行可視場景點與方向點光源之間的遮擋判斷操作時使用的陰影圖SM的像素值,否則令可視場景點對應(yīng)的光源可見性值為1;
步驟S203:在計算機(jī)系統(tǒng)的存儲器中創(chuàng)建一個二維數(shù)組B001,二維數(shù)組B001的行數(shù)等于虛擬像素平面的像素行數(shù),二維數(shù)組B001的列數(shù)等于虛擬像素平面的像素列數(shù),把二維數(shù)組B001的每個元素都賦值為1;
步驟S204:對于步驟S202中的每個可視場景點,計算出與之對應(yīng)的虛擬像素平面上的像素的行號irow和列號jcol,把二維數(shù)組B001的第irow行、第jcol列的元素賦值為可視場景點對應(yīng)的光源可見性值。
步驟S205:執(zhí)行完步驟S204后,二維數(shù)組B001就是最終得到的可見性圖VM;
三、計算每個可視場景點對應(yīng)的位置敏感可見性平滑濾波器的空間寬度:
步驟S301:在計算機(jī)系統(tǒng)的存儲器中創(chuàng)建一個二維數(shù)組C001,二維數(shù)組C001的行數(shù)等于虛擬像素平面的像素行數(shù),二維數(shù)組C001的列數(shù)等于虛擬像素平面的像素列數(shù),把二維數(shù)組C001的每個元素都賦值為0,二維數(shù)組C001的元素與步驟S202中的可視場景點一一對應(yīng);
步驟S302:對于步驟S202中的每個可視場景點,計算出與之對應(yīng)的虛擬像素平面上的像素的行號irow和列號jcol,如果可見性圖VM的第irow行、第jcol列的元素值為0,則令,并把二維數(shù)組C001的第irow行、第jcol列的元素賦值為K,其中dLP為可視場景點到方向點光源的距離,dCP為dLP與二維數(shù)組DIS的第irow行、第jcol列的元素值之差,c1為比例控制系數(shù),W表示虛擬面光源尺寸,w表示虛擬遮擋球尺寸,M表示位置敏感可見性平滑濾波器的空間寬度最大值,min(x, y)表示取x和y二者的最小值,max(x, y)表示取x和y二者的最大值,表示對x求向下取整運算。
四、對可見性圖VM進(jìn)行位置敏感可見性平滑濾波并根據(jù)濾波結(jié)果實現(xiàn)近似柔和陰影繪制:
步驟S401:對于步驟S202中的每個可視場景點,首先計算出與之對應(yīng)的虛擬像素平面上的像素的行號irow和列號jcol,然后令Kf等于二維數(shù)組C001的第irow行、第jcol列的元素的值,把可見性圖VM的以第irow行、第jcol列的元素為中心的包含(2Kf+1)×(2Kf+1)個元素的正方形區(qū)域內(nèi)的所有元素之和賦值給Vs,令Vf = Vs/[(2Kf+1)×(2Kf+1)],可視場景點的源自方向點光源的實際直接光照值等于可視場景點的直接光照值NCDI與Vf之乘積;可視場景點的直接光照值NCDI在步驟S201中計算得到,Vf就是對可見性圖VM進(jìn)行位置敏感可見性平滑濾波后得到的可視場景點對應(yīng)的平滑光源可見性值SV;
步驟S402:把所有可視場景點的實際直接光照值轉(zhuǎn)換成對應(yīng)像素的顏色值,并輸出到計算機(jī)屏幕上。
在步驟S401中,可視場景點的位置敏感可見性平滑濾波操作就是用一個包含(2Kf+1)×(2Kf+1)個元素的正方形空間平滑濾波模板覆蓋在可見性圖VM上,并使正方形空間平滑濾波模板的中心元素與可見性圖VM的第irow行、第jcol列的元素重合,進(jìn)而求解可見性圖VM的被正方形空間平滑濾波模板覆蓋的所有元素的值之平均值A(chǔ)VG的過程;平均值A(chǔ)VG就是步驟S401得到的Vf。對于給定的可視場景點,如果正方形空間平滑濾波模板覆蓋的區(qū)域超出了可見性圖VM的有效元素區(qū)域,則在執(zhí)行平滑濾波操作時對可見性圖VM進(jìn)行延展,使正方形空間平滑濾波模板覆蓋的所有區(qū)域都有可見性圖VM的元素,并令所有延展的可見性圖VM的元素的值為1。
本發(fā)明的積極效果是能夠根據(jù)可視場景點的位置及遮擋點的位置確定不同的可見性平滑濾波器的空間寬度,從而使繪制出的近似柔和陰影的柔和度依賴于場景點、方向點光源以及遮擋點的空間位置。本方法繪制的三維場景的半影區(qū)會隨陰影投射對象到陰影接收對象的距離的增加而變得更柔和,繪制的三維場景的本影區(qū)會隨光源靠近陰影接收對象而相應(yīng)地縮小。因此,本方法能夠繪制出更加符合人們的日常認(rèn)知的近似柔和陰影。
附圖說明
圖1為方向點光源示意圖。
圖2為視點、虛擬像素平面、像素和可視場景點之間的關(guān)系示意圖。
圖3為可見性平滑濾波中定義的正方形區(qū)域示意圖。
圖4為正方形空間平滑濾波模板覆蓋區(qū)域超出可見性圖VM的有效元素區(qū)域的示意圖。
具體實施方式
為了使本發(fā)明的特征和優(yōu)點更加清楚明白,下面結(jié)合具體實施例對本發(fā)明作進(jìn)一步的描述。
在本實施例中,計算機(jī)系統(tǒng)的CPU 選擇Intel(R) Xeon(R) CPU E3-1225 v3 @ 3.20GHz,內(nèi)存選擇金士頓 8GB DDR3 1333,磁盤選擇Buffalo HD-CE 1.5 TU2,顯卡選用NVidia Quadro K2000;計算機(jī)操作系統(tǒng)選用Windows 7,軟件編程工具選用VC++ 2010。在本實施例中,虛擬像素平面的像素行數(shù)為768,虛擬像素平面的像素列數(shù)為1024;三維場景為一個室內(nèi)場景,用一個方向點光源從天花板向下照射三維場景。
按照陰影映射方法的流程,首先把相機(jī)放在方向點光源所在位置,使相機(jī)的正前方向朝著方向點光源的光錐軸方向,使相機(jī)的視場角等于方向點光源的光錐的錐頂角,繪制三維場景以創(chuàng)建陰影圖SM;然后把相機(jī)放在視點位置,按正常的觀察方向和視場角參數(shù)繪制三維場景,計算每個可視場景點的空間位置以及不考慮遮擋時的源自方向點光源的直接光照值NCDI,利用陰影圖SM判斷每個可視場景點與方向點光源之間是否存在遮擋,如果存在遮擋,可視場景點對應(yīng)的光源可見性值為0,否則可視場景點對應(yīng)的光源可見性值為1;把所有可視場景點對應(yīng)的光源可見性值保存成一個光源可見性圖VM,利用位置敏感可見性平滑濾波方法對光源可見性圖進(jìn)行濾波,得到每個可視場景點對應(yīng)的平滑光源可見性值SV;每個可視場景點的源自方向點光源的實際直接光照值等于直接光照值NCDI與平滑光源可見性值SV之乘積;最后把每個可視場景點的實際直接光照值轉(zhuǎn)換成對應(yīng)像素的顏色值,并輸出到計算機(jī)屏幕上,從而顯示出三維場景直接光照效果畫面中的柔和陰影。方向點光源的光錐軸方向和光錐的錐頂角如圖1所示??梢晥鼍包c就是從視點透過虛擬像素平面能直接看見的場景點,可視場景點與像素一一對應(yīng)。視點、虛擬像素平面、像素和可視場景點之間的關(guān)系如圖2所示。下面詳細(xì)地說明如何實現(xiàn)本方法。
一、創(chuàng)建陰影圖SM,具體方法如下:
步驟S101:按照陰影映射方法的流程,把相機(jī)放在方向點光源所在位置,使相機(jī)的正前方向朝著方向點光源的光錐軸方向,使相機(jī)的視場角等于方向點光源的光錐的錐頂角,繪制三維場景以創(chuàng)建陰影圖SM;
二、計算不考慮遮擋時的可視場景點的源自方向點光源的直接光照值NCDI并創(chuàng)建可見性圖VM,具體方法如下:
步驟S201:把相機(jī)放在視點位置,按正常的觀察方向和視場角參數(shù)繪制三維場景,計算每個可視場景點的空間位置以及不考慮遮擋時的源自方向點光源的直接光照值NCDI;在計算機(jī)系統(tǒng)的存儲器中創(chuàng)建一個二維數(shù)組DIS,二維數(shù)組DIS的行數(shù)等于虛擬像素平面的像素行數(shù),二維數(shù)組DIS的列數(shù)等于虛擬像素平面的像素列數(shù),把二維數(shù)組DIS的每個元素都賦值為?1,二維數(shù)組DIS的元素與虛擬像素平面上的像素一一對應(yīng),二維數(shù)組DIS的元素也與可視場景點一一對應(yīng);
步驟S202:使用陰影映射方法的技術(shù),利用陰影圖SM判斷每個可視場景點與方向點光源之間是否存在遮擋,如果存在遮擋,則令可視場景點對應(yīng)的光源可見性值為0,同時把與可視場景點對應(yīng)的二維數(shù)組DIS的元素賦值為陰影映射方法在執(zhí)行可視場景點與方向點光源之間的遮擋判斷操作時使用的陰影圖SM的像素值,否則令可視場景點對應(yīng)的光源可見性值為1;
步驟S203:在計算機(jī)系統(tǒng)的存儲器中創(chuàng)建一個二維數(shù)組B001,二維數(shù)組B001的行數(shù)等于虛擬像素平面的像素行數(shù),二維數(shù)組B001的列數(shù)等于虛擬像素平面的像素列數(shù),把二維數(shù)組B001的每個元素都賦值為1;
步驟S204:對于步驟S202中的每個可視場景點,計算出與之對應(yīng)的虛擬像素平面上的像素的行號irow和列號jcol,把二維數(shù)組B001的第irow行、第jcol列的元素賦值為可視場景點對應(yīng)的光源可見性值。
步驟S205:執(zhí)行完步驟S204后,二維數(shù)組B001就是最終得到的可見性圖VM;
三、計算每個可視場景點對應(yīng)的位置敏感可見性平滑濾波器的空間寬度,具體方法如下:
步驟S301:在計算機(jī)系統(tǒng)的存儲器中創(chuàng)建一個二維數(shù)組C001,二維數(shù)組C001的行數(shù)等于虛擬像素平面的像素行數(shù),二維數(shù)組C001的列數(shù)等于虛擬像素平面的像素列數(shù),把二維數(shù)組C001的每個元素都賦值為0,二維數(shù)組C001的元素與步驟S202中的可視場景點一一對應(yīng);
步驟S302:對于步驟S202中的每個可視場景點,計算出與之對應(yīng)的虛擬像素平面上的像素的行號irow和列號jcol,如果可見性圖VM的第irow行、第jcol列的元素值為0,則令,并把二維數(shù)組C001的第irow行、第jcol列的元素賦值為K,其中dLP為可視場景點到方向點光源的距離,dCP為dLP與二維數(shù)組DIS的第irow行、第jcol列的元素值之差,c1為比例控制系數(shù),W表示虛擬面光源尺寸,w表示虛擬遮擋球尺寸,M表示位置敏感可見性平滑濾波器的空間寬度最大值,min(x, y)表示取x和y二者的最小值,max(x, y)表示取x和y二者的最大值,表示對x求向下取整運算。
四、可見性圖VM進(jìn)行位置敏感可見性平滑濾波并根據(jù)濾波結(jié)果實現(xiàn)近似柔和陰影繪制,具體方法如下:
步驟S401:對于步驟S202中的每個可視場景點,首先計算出與之對應(yīng)的虛擬像素平面上的像素的行號irow和列號jcol,然后令Kf等于二維數(shù)組C001的第irow行、第jcol列的元素的值,把可見性圖VM的以第irow行、第jcol列的元素為中心的包含(2Kf+1)×(2Kf+1)個元素的正方形區(qū)域內(nèi)的所有元素之和賦值給Vs,令Vf = Vs/[(2Kf+1)×(2Kf+1)],可視場景點的源自方向點光源的實際直接光照值等于可視場景點的直接光照值NCDI與Vf之乘積;可視場景點的直接光照值NCDI在步驟S201中計算得到,Vf就是對可見性圖VM進(jìn)行位置敏感可見性平滑濾波后得到的可視場景點對應(yīng)的平滑光源可見性值SV;
步驟S402:把所有可視場景點的實際直接光照值轉(zhuǎn)換成對應(yīng)像素的顏色值,并輸出到計算機(jī)屏幕上。
圖3示出了Kf = 2時的步驟S401中的包含(2Kf+1)×(2Kf+1)個元素的正方形區(qū)域,每個方格代表一個元素。在步驟S401中,可視場景點的位置敏感可見性平滑濾波操作就是用一個包含(2Kf+1)×(2Kf+1)個元素的正方形空間平滑濾波模板覆蓋在可見性圖VM上,并使正方形空間平滑濾波模板的中心元素與可見性圖VM的第irow行、第jcol列的元素重合,進(jìn)而求解可見性圖VM的被正方形空間平滑濾波模板覆蓋的所有元素的值之平均值A(chǔ)VG的過程;平均值A(chǔ)VG就是步驟S401得到的Vf。對于給定的可視場景點,如果正方形空間平滑濾波模板覆蓋的區(qū)域超出了可見性圖VM的有效元素區(qū)域,如圖4所示,則在執(zhí)行平滑濾波操作時對可見性圖VM進(jìn)行延展,使正方形空間平滑濾波模板覆蓋的所有區(qū)域都有可見性圖VM的元素,并令所有延展的可見性圖VM的元素的值為1。
在步驟S302中,設(shè)置W為整個三維場景的立方體包圍盒的最長邊的長度的1/50,設(shè)置w為W的1/6,設(shè)置c1為200,設(shè)置M為25。