一種基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法
【專利摘要】本發(fā)明公開一種基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法,包括如下步驟:A、遍歷場(chǎng)景內(nèi)所有在虛擬相機(jī)可見范圍內(nèi)的對(duì)象。B、構(gòu)建一個(gè)光源空間,并創(chuàng)建一個(gè)用于保存屏幕空間內(nèi)深度的紋理,生成一張shadow?map。C、經(jīng)過投影變換將世界位置坐標(biāo)轉(zhuǎn)化到燈光空間,獲得像素的新位置的深度圖。D、將像素的新位置的深度和shadow?map進(jìn)行比較,判定哪些像素處于陰影中,從而得到一張shadow?mask。E、對(duì)shadow?mask進(jìn)行高斯模糊處理。F、將模糊后的shadow?mask與場(chǎng)景顏色進(jìn)行疊加,實(shí)現(xiàn)軟陰影效果。本發(fā)明改良了傳統(tǒng)基于采樣紋理的PCF,有效的解決了場(chǎng)景模型邊界出現(xiàn)鋸齒的現(xiàn)象,實(shí)現(xiàn)了較好的軟陰影效果,而且對(duì)于較復(fù)雜的場(chǎng)景實(shí)現(xiàn)軟陰影的效果也非常好,繪制效率高。
【專利說明】一種基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟陰影【技術(shù)領(lǐng)域】,尤其涉及一種基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn) 方法。
【背景技術(shù)】
[0002] 作為游戲引擎中一個(gè)非常重要功能的光影效果,陰影在虛擬的游戲有著至關(guān)重要 的作用,加入了此效果,圖像的立體感和層次將更加的豐富,同時(shí)也提高了場(chǎng)景的真實(shí)感受 度。陰影可以分為軟硬兩種陰影,硬陰影算法比較簡(jiǎn)單,而實(shí)時(shí)軟陰影比硬陰影更具有真 實(shí)感,可是動(dòng)態(tài)的軟陰影的實(shí)現(xiàn)是計(jì)算機(jī)圖形學(xué)研究的一個(gè)難點(diǎn)。傳統(tǒng)實(shí)時(shí)軟陰影的實(shí)現(xiàn) 過程如下:首先以光源為視點(diǎn)生成包含場(chǎng)景深度信息的深度圖(shadow map),然后從觀察 者視點(diǎn)將場(chǎng)景渲染到一張屏幕紋理緩沖中,進(jìn)而對(duì)此采樣的紋理進(jìn)行多次采樣取平均值 (percentage closer filtering, PCF),這種方法產(chǎn)生的軟陰影質(zhì)量和采樣次數(shù)有直接關(guān) 系,如果要得到比較柔和的軟陰影效果,則需要大量的紋理采樣,效率低下。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明的目的在于通過一種基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法,來解決以 上【背景技術(shù)】部分提到的問題。
[0004] 為達(dá)此目的,本發(fā)明采用以下技術(shù)方案:
[0005] -種基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法,包括如下步驟:
[0006] A、遍歷場(chǎng)景內(nèi)所有在虛擬相機(jī)可見范圍內(nèi)的對(duì)象;
[0007] B、構(gòu)建一個(gè)光源空間,并創(chuàng)建一個(gè)用于保存屏幕空間內(nèi)深度的紋理,生成一張 shadow map ;
[0008] C、經(jīng)過投影變換將世界位置坐標(biāo)轉(zhuǎn)化到燈光空間,獲得像素的新位置的深度圖;
[0009] D、將所述像素的新位置的深度和shadow map進(jìn)行比較,判定哪些像素處于陰影 中,從而得到一張 shadow mask ;
[0010] E、對(duì)所述shadow mask進(jìn)行高斯模糊處理;
[0011] F、將模糊后的shadow mask與場(chǎng)景顏色進(jìn)行疊加,實(shí)現(xiàn)軟陰影效果。
[0012] 特別地,所述步驟B具體包括:在相機(jī)可見范圍內(nèi),構(gòu)建一個(gè)光源空間,將相機(jī)的 朝向與光源方向調(diào)為一致,并創(chuàng)建一個(gè)用于保存屏幕空間內(nèi)深度的紋理,然后繪制場(chǎng)景、 讀取深度緩沖的內(nèi)容,將場(chǎng)景的深度緩沖信息渲染到浮點(diǎn)格式的紋理中,生成一張 shadow map。
[0013] 特別地,所述步驟E具體包括:首先創(chuàng)建一個(gè)紋理并獲得紋理的表面信息,然后利 用高斯模糊對(duì)紋理表面進(jìn)行處理,其中,在渲染該紋理時(shí)需要渲染兩個(gè)目標(biāo):水平方向和垂 直方向;對(duì)shadow mask做高斯模糊,經(jīng)過GPU光柵化后,渲染出一個(gè)屏幕大小的方形即模 糊后的紋理。
[0014] 本發(fā)明提出的基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法改良了傳統(tǒng)基于采樣紋 理的PCF,有效的解決了場(chǎng)景模型邊界出現(xiàn)鋸齒的現(xiàn)象,實(shí)現(xiàn)了較好的軟陰影效果,而且對(duì) 于較復(fù)雜的場(chǎng)景實(shí)現(xiàn)軟陰影的效果也非常好,繪制效率高。
【專利附圖】
【附圖說明】
[0015] 圖1為本實(shí)施例提供的基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法流程圖;
[0016] 圖2為本實(shí)施例提供的模糊前紋理圖;
[0017] 圖3為本實(shí)施例提供的模糊后紋理圖;
[0018] 圖4為本實(shí)施例提供的中心點(diǎn)相鄰像素所占的權(quán)重示意圖。
【具體實(shí)施方式】
[0019] 下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明??梢岳斫獾氖?,此處所描述的具 體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說明的是,為了便于描 述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容。
[0020] 請(qǐng)參照?qǐng)D1所示,圖1為本實(shí)施例提供的基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方 法流程圖。
[0021] 本實(shí)施例中基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法包括如下步驟:
[0022] 步驟S101、遍歷場(chǎng)景內(nèi)所有在虛擬相機(jī)可見范圍內(nèi)的對(duì)象。遍歷場(chǎng)景中的對(duì)象是 否在虛擬相機(jī)可見范圍內(nèi),只渲染相機(jī)內(nèi)可見的區(qū)域。
[0023] 步驟S102、構(gòu)建一個(gè)光源空間,并創(chuàng)建一個(gè)用于保存屏幕空間內(nèi)深度的紋理,生成 一張 shadow map。在相機(jī)可見范圍內(nèi),構(gòu)建一個(gè)光源空間,將相機(jī)的朝向與光源方向調(diào)為一 致,并創(chuàng)建一個(gè)用于保存屏幕空間內(nèi)深度的紋理,然后繪制場(chǎng)景、讀取深度緩沖的內(nèi)容,將 場(chǎng)景的深度緩沖信息渲染到浮點(diǎn)格式的紋理中,生成一張 shadow map即深度圖。
[0024] 步驟S103、經(jīng)過投影變換將世界位置坐標(biāo)轉(zhuǎn)化到燈光空間,獲得像素的新位置的 深度圖。根據(jù)步驟S102生成的shadow map,在屏幕空間計(jì)算陰影的過程中,經(jīng)過投影變換 將世界位置坐標(biāo)轉(zhuǎn)化到燈光空間。
[0025] 步驟S104、將所述像素的新位置和深度圖進(jìn)行比較,判定哪些像素處于陰影中,從 而得到一張 shadow mask,S卩非陰影的地方是白色,陰影的地方是黑色。從燈光空間渲染場(chǎng) 景時(shí),把該空間下場(chǎng)景中的像素逐個(gè)和shadow map中保存的深度進(jìn)行比較,當(dāng)像素深度大 于深度圖的深度時(shí),則判定該像素是受陰影的,當(dāng)?shù)扔谏疃葓D的深度時(shí),則判定該像素是受 光的,從而得到一張屏幕大小紋理圖的shadow mask即陰影遮罩。
[0026] 步驟S105、對(duì)所述shadow mask進(jìn)行高斯模糊處理。首先創(chuàng)建一個(gè)紋理并獲得紋 理的表面信息,然后利用高斯模糊對(duì)紋理表面進(jìn)行處理,其中,在渲染該紋理時(shí)需要渲染兩 個(gè)目標(biāo):水平方向和垂直方向;對(duì)shadow mask做高斯模糊,經(jīng)過GPU光柵化后,渲染出一個(gè) 屏幕大小的方形即模糊后的紋理。其中,GPU是Graphic Processing Unit的縮寫,簡(jiǎn)稱圖 形處理單元。模糊處理后的效果對(duì)比如圖2和圖3所示,圖2為模糊前的紋理圖,圖3為模 糊后的紋理圖。
[0027] 高斯模糊是一種圖像模糊的濾波器,它正態(tài)分布計(jì)算圖像中每個(gè)像素的變換,因 為深度信息是記錄二維空間的坐標(biāo)信息,則它在二維空間的方程為: / 、 1 ~(u2+v2)/
[0028] G(U,V)=_L^e /2σ 2 2πσ2
[0029] 其中,〇是正態(tài)分布的方差,u和v是像素的坐標(biāo)值。利用相鄰像素的加權(quán)值來表 示該點(diǎn)的像素值,它的應(yīng)用原理是取shadow mask中每個(gè)像素的周邊像素的平均值。具體 過程如下:一、計(jì)算權(quán)重值。需要根據(jù)σ的值來確定,一般取值為σ =2。如圖4所示,把 w5所占格子的像素定為中心像素,臨近的w8像素的權(quán)重值和中心像素相加并平均,就可以 得到中心像素的權(quán)重值,但是由于所有像素權(quán)重值的總和必須為1,因此把所有的像素權(quán)重 除以中心像素的權(quán)重值就可以了。由此得到相鄰每個(gè)像素的權(quán)重值。二、獲得各個(gè)像素的 權(quán)重值和各個(gè)像素的顏色值后就可以計(jì)算高斯模糊了。把每個(gè)點(diǎn)的像素值*對(duì)應(yīng)像素的權(quán) 重值,然后就把9個(gè)值加在一起即為中心點(diǎn)的高斯模糊值。
[0030] 步驟S106、將模糊后的shadow mask與場(chǎng)景顏色進(jìn)行疊加,實(shí)現(xiàn)軟陰影效果。模糊 后的紋理投射到屏幕上,實(shí)現(xiàn)實(shí)時(shí)軟陰影。
[0031] 本發(fā)明的技術(shù)方案改良了傳統(tǒng)基于采樣紋理的PCF,有效的解決了場(chǎng)景模型邊界 出現(xiàn)鋸齒的現(xiàn)象,實(shí)現(xiàn)了較好的軟陰影效果,而且對(duì)于較復(fù)雜的場(chǎng)景實(shí)現(xiàn)軟陰影的效果也 非常好,繪制效率高。
[0032] 注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解, 本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來說能夠進(jìn)行各種明顯的變化、 重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過以上實(shí)施例對(duì)本發(fā)明進(jìn)行 了較為詳細(xì)的說明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還 可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。
【權(quán)利要求】
1. 一種基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法,其特征在于,包括如下步驟: A、 遍歷場(chǎng)景內(nèi)所有在虛擬相機(jī)可見范圍內(nèi)的對(duì)象; B、 構(gòu)建一個(gè)光源空間,并創(chuàng)建一個(gè)用于保存屏幕空間內(nèi)深度的紋理,生成一張 shadow map ; C、 經(jīng)過投影變換將世界位置坐標(biāo)轉(zhuǎn)化到燈光空間,獲得像素的新位置的深度圖; D、 將所述像素的新位置的深度和shadow map進(jìn)行比較,判定哪些像素處于陰影中,從 而得到一張 shadow mask ; E、 對(duì)所述shadow mask進(jìn)行高斯模糊處理; F、 將模糊后的shadow mask與場(chǎng)景顏色進(jìn)行疊加,實(shí)現(xiàn)軟陰影效果。
2. 根據(jù)權(quán)利要求1所述的基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法,其特征在于,所 述步驟B具體包括:在相機(jī)可見范圍內(nèi),構(gòu)建一個(gè)光源空間,將相機(jī)的朝向與光源方向調(diào)為 一致,并創(chuàng)建一個(gè)用于保存屏幕空間內(nèi)深度的紋理,然后繪制場(chǎng)景、讀取深度緩沖的內(nèi)容, 將場(chǎng)景的深度緩沖信息渲染到浮點(diǎn)格式的紋理中,生成一張 shadow map。
3. 根據(jù)權(quán)利要求1或2任一項(xiàng)所述的基于圖像屏幕空間的實(shí)時(shí)軟陰影實(shí)現(xiàn)方法,其特 征在于,所述步驟E具體包括:首先創(chuàng)建一個(gè)紋理并獲得紋理的表面信息,然后利用高斯模 糊對(duì)紋理表面進(jìn)行處理,其中,在渲染該紋理時(shí)需要渲染兩個(gè)目標(biāo):水平方向和垂直方向; 對(duì)shadow mask做高斯模糊,經(jīng)過GPU光柵化后,渲染出一個(gè)屏幕大小的方形即模糊后的紋 理。
【文檔編號(hào)】G06T15/60GK104103089SQ201410367545
【公開日】2014年10月15日 申請(qǐng)日期:2014年7月29日 優(yōu)先權(quán)日:2014年7月29日
【發(fā)明者】張翼 申請(qǐng)人:無錫梵天信息技術(shù)股份有限公司