一種基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法
【專利摘要】本發(fā)明公開一種基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,該方法將像素的世界坐標(biāo)轉(zhuǎn)換為太陽光空間的坐標(biāo)變換,得到陰影圖中像素在太陽光空間中的新位置,第二遍繪制場景內(nèi)物體時,逐像素對比相對光源的深度值和陰影圖中的深度,當(dāng)深度大于陰影圖中的深度時,判定該像素處于陰影中,進(jìn)行對應(yīng)的陰影混合,否則,判定該像素是受光可見的。本發(fā)明將陰影算法映射到圖形處理單元來執(zhí)行,從而加速復(fù)雜三維場景中實時陰影的繪制,提高了繪制效率;在帶來逼真的視覺效果,增強場景真實感的同時,保證了繪制的速度。
【專利說明】一種基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及實時動態(tài)陰影【技術(shù)領(lǐng)域】,尤其涉及一種基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法。
【背景技術(shù)】
[0002]現(xiàn)代圖形處理單元(Graphic Processing Unit, GPU)技術(shù)的發(fā)展極大的推進(jìn)了計算機實時的渲染技術(shù)的應(yīng)用,能夠產(chǎn)生更接近真實的陰影一直是視頻游戲領(lǐng)域一個很有挑戰(zhàn)的工作。陰影是不透明的物體阻擋光線而產(chǎn)生的黑暗范圍,那些光源看不到表面將處于陰影中,而那些能被光源看到的表面將處于陰影之外,陰影的邊界可以幫助人們理解物體的外型以及物體的相對位置,陰影在3D游戲中起著至關(guān)重要的作用,增加了圖像的立體感和層次感,提高了虛擬環(huán)境的真實感程度。但是,目前游戲中實現(xiàn)陰影的方法繪制速度和效率都較低,在游戲繪制的時候,首先遍歷場景中所有對象模型,而每個對象模型都有一個包圍盒,在相機可見范圍內(nèi),對相機中的模型進(jìn)行遍歷,基于平行光源為視點對場景進(jìn)行繪制,將模型相對光源的深度信息繪制到一張陰影圖(即深度圖)中,再利用計算好的陰影貼圖來繪制場景,在內(nèi)存中繪制的陰影圖始終是垂直于光源的方向。程序在每幀中都會生成這個陰影圖,將某一幀之前和該幀所投射到陰影中的像素對應(yīng)連接起來,得到一個四面體,而這個四面體所形成的周圍包圍盒最大,導(dǎo)致采樣周圍深度圖粗糙,精度低。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的在于通過一種基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,來解決以上【背景技術(shù)】部分提到的問題。
[0004]為達(dá)此目的,本發(fā)明采用以下技術(shù)方案:
[0005]一種基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,其包括如下步驟:
[0006]A、遍歷場景中所有對象;
[0007]B、檢測相機的對象是否可見;
[0008]C、獲取可見的投射對象列表和接受陰影對象;
[0009]D、從光源場景渲染整個場景,把深度圖保存到紋理中;
[0010]E、構(gòu)建light空間的相機矩陣;
[0011]F、構(gòu)建正交投影變換矩陣;
[0012]G、構(gòu)建旋轉(zhuǎn)空間的變換矩陣;
[0013]H、將所述步驟E、F、G的計算結(jié)果相乘,獲得采樣矩陣;
[0014]1、將所述采樣矩陣導(dǎo)入圖形處理單元,通過采樣深度緩沖器獲得陰影值。
[0015]特別地,所述步驟B中對象是否可見分三種情況:一、完全可見;二、完全不可見;三、部分可見。
[0016]特別地,所述步驟C中將相機的可見對象和部分可見對象插入投射對象列表和接受陰影對象。
[0017]特別地,所述步驟D具體包括:基于平行光源為視點對場景進(jìn)行繪制,將對象模型相對光源的深度信息繪制到一張陰影圖即深度圖中,從光源場景渲染整個場景,把深度圖保存到紋理中。
[0018]特別地,所述步驟I具體包括:將所述采樣矩陣導(dǎo)入圖形處理單元,將像素的UV坐標(biāo)轉(zhuǎn)換為世界坐標(biāo),再將世界坐標(biāo)轉(zhuǎn)換為太陽空間的坐標(biāo),得到陰影圖中像素在太陽光空間中的新位置,而深度圖是記錄相機內(nèi)可見視錐體,放到太陽的位置進(jìn)行正交照射整個場景,形成一個深度信息圖,與最小深度的深度進(jìn)行比較,若深度值大于最小深度,則該像素是受陰影的,否則是受光照的。
[0019]本發(fā)明提出的基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法將像素的世界坐標(biāo)轉(zhuǎn)換為太陽光空間的坐標(biāo)變換,得到陰影圖中像素在太陽光空間中的新位置,第二遍繪制場景內(nèi)物體時,逐像素對比相對光源的深度值和陰影圖中的深度,當(dāng)深度大于陰影圖中的深度時,判定該像素處于陰影中,進(jìn)行對應(yīng)的陰影混合,否則,判定該像素是受光可見的。本發(fā)明將陰影算法映射到圖形處理單元來執(zhí)行,從而加速復(fù)雜三維場景中實時陰影的繪制,提高了繪制效率;在帶來逼真的視覺效果,增強場景真實感的同時,保證了繪制的速度。
【專利附圖】
【附圖說明】
[0020]圖1為本發(fā)明基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法流程圖;
[0021]圖2a為場景中一個模型的包圍盒的俯視圖;
[0022]圖2b為相機內(nèi)各個模型包圍盒可見情況示意圖;
[0023]圖3為投射對象和接受陰影對象的形成示意圖;
[0024]圖4為在相機空間中視錐體模型的投影示意圖;
[0025]圖5為以視錐體為前提構(gòu)建旋轉(zhuǎn)矩陣的過程示意圖。
【具體實施方式】
[0026]下面結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步說明??梢岳斫獾氖牵颂幩枋龅木唧w實施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部內(nèi)容。
[0027]請參照圖1所示,圖1為本發(fā)明基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法流程圖。
[0028]本實施例中基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法具體包括如下步驟:
[0029]步驟S101、遍歷場景中所有對象。
[0030]步驟S102、檢測相機的對象是否可見。對象是否可見分三種情況:一、完全可見;二、完全不可見;三、部分可見。場景中一個模型的包圍盒的俯視圖如圖2a所示。相機內(nèi)各個模型包圍盒可見情況示意圖如圖2b所示。
[0031]步驟S103、獲取可見的投射對象列表和接受陰影對象。
[0032]遍歷后把相機中的對象分為投射對象列表和接受陰影對象。如圖3所示,一、相機的可見對象和部分可見對象插入投射對象列表和接受陰影對象。二、對于不可見對象,將對其進(jìn)行重新檢測,這次檢測的體積是一個包圍球,是以模型的包圍盒中心為球心,包圍盒的半徑為球的半徑建立的一個球體。如果包圍球和視錐體存在交叉部分,就把該對象模型插入投射對象列表。三、在相機內(nèi)部的可見區(qū)域不僅有對象模型,同時也有游戲場景中的地面,在游戲中地形有N多個地形塊組成,把相機內(nèi)可見和部分可見的地形塊插入到接受陰影列表。
[0033]步驟S104、從光源場景渲染整個場景,把深度圖保存到紋理中。在相機可見范圍內(nèi),對相機中的模型進(jìn)行遍歷,基于平行光源為視點對場景進(jìn)行繪制,將對象模型相對光源的深度信息繪制到一張陰影圖即深度圖中,從光源場景渲染整個場景,把深度圖保存到紋理中。
[0034]步驟S105、構(gòu)建light空間的相機矩陣。light空間即太陽光空間。該Light空間的up方向(即z方向),looked方向為相機的look at方向,Left方向是up叉乘lookat方向。
[0035]如圖4所示,把世界空間的視錐體的8個點從世界空間轉(zhuǎn)化為light空間,并以此構(gòu)建一個包圍盒。該包圍盒的最小Z和最大Z(即UP方向的最小值和最大值)分別記為min_frustum_z, max_frustum_z,其中up方向是太陽光方向。構(gòu)建投射對象列表的點集合,并轉(zhuǎn)成light空間。并構(gòu)建包圍盒,令最小深度和最大深度分別為min_cast_box.z, max_cast_box.Z0
[0036]確保min (min_frustum_z, min_cast_box.z)大于0,如果其值小于0,對其進(jìn)行糾正,具體的做法是:只要把這些點沿著+z平移;構(gòu)建一個平移矩陣。視錐體的8個點也沿著+z方向平移。
[0037]步驟S106、構(gòu)建正交投影變換矩陣。在Light空間,構(gòu)建視錐體的8個點的正交投影變換矩陣。具體做法是:計算8個點的AABB包圍盒,根據(jù)AABB包圍盒計算得到正交投影的中心點以及halfWidth, half Height, Depth參數(shù)信息。把8個點轉(zhuǎn)成正交投影空間。
[0038]步驟S107、構(gòu)建旋轉(zhuǎn)空間的變換矩陣。如圖5所示,左側(cè)圖為基于Iight空間下,包圍盒在坐標(biāo)系中的位置,右側(cè)圖為經(jīng)過旋轉(zhuǎn)Θ后包圍盒的坐標(biāo)位置。構(gòu)建一個旋轉(zhuǎn)空間,在步驟S106的正交投影空間下,取近裁切面和遠(yuǎn)裁切面中心點和此空間下的坐標(biāo)系,繞過中心點的z軸旋轉(zhuǎn),旋轉(zhuǎn)度數(shù)是Θ度數(shù),把包圍盒旋轉(zhuǎn)到d狀態(tài)。保證旋轉(zhuǎn)以后近裁切面和遠(yuǎn)裁切面的連線平行于V方向。把8個點轉(zhuǎn)成旋轉(zhuǎn)空間(先平移到中心點,然后旋轉(zhuǎn))。歸一化,把8個點構(gòu)建包圍盒并取包圍盒的最小X和最大X最小y和最大y。
[0039]步驟S108、將所述步驟S106、S107、S108的計算結(jié)果相乘,獲得采樣矩陣。
[0040]步驟S109、將所述采樣矩陣導(dǎo)入圖形處理單元,通過采樣深度緩沖器獲得陰影值。具體過程如下:將所述采樣矩陣導(dǎo)入圖形處理單元,將像素的UV坐標(biāo)轉(zhuǎn)換為世界坐標(biāo),再將世界坐標(biāo)轉(zhuǎn)換為太陽空間的坐標(biāo),得到陰影圖中像素在太陽光空間中的新位置,而深度圖是記錄相機內(nèi)可見視錐體,放到太陽的位置進(jìn)行正交照射整個場景,形成一個深度信息圖,與最小深度的深度進(jìn)行比較,若深度值大于最小深度,則該像素是受陰影的,否則是受光照的。
[0041]本發(fā)明的技術(shù)方案將像素的世界坐標(biāo)轉(zhuǎn)換為太陽光空間的坐標(biāo)變換,得到陰影圖中像素在太陽光空間中的新位置,第二遍繪制場景內(nèi)物體時,逐像素對比相對光源的深度值和陰影圖中的深度,當(dāng)深度大于陰影圖中的深度時,判定該像素處于陰影中,進(jìn)行對應(yīng)的陰影混合,否則,判定該像素是受光可見的。本發(fā)明的優(yōu)點如下:一、將陰影算法映射到圖形處理單元來執(zhí)行,從而加速復(fù)雜三維場景中實時陰影的繪制,提高了繪制效率;在帶來逼真的視覺效果,增強場景真實感的同時,保證了繪制的速度。二、通過旋轉(zhuǎn)視錐體的8個點使其能填充率最大化,提高了深度圖的填充率。雖然生成的陰影邊緣有鋸齒化,在游戲的后期制作時,可以采用擾動和模糊來處理,這樣就能應(yīng)用于所有的室外場景中由太陽光照射遮擋物體的陰影效果方案。
[0042]注意,上述僅為本發(fā)明的較佳實施例及所運用技術(shù)原理。本領(lǐng)域技術(shù)人員會理解,本發(fā)明不限于這里所述的特定實施例,對本領(lǐng)域技術(shù)人員來說能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會脫離本發(fā)明的保護(hù)范圍。因此,雖然通過以上實施例對本發(fā)明進(jìn)行了較為詳細(xì)的說明,但是本發(fā)明不僅僅限于以上實施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。
【權(quán)利要求】
1.一種基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,其特征在于,包括如下步驟: A、遍歷場景中所有對象; B、檢測相機的對象是否可見; C、獲取可見的投射對象列表和接受陰影對象; D、從光源場景渲染整個場景,把深度圖保存到紋理中; E、構(gòu)建light空間的相機矩陣; F、構(gòu)建正交投影變換矩陣; G、構(gòu)建旋轉(zhuǎn)空間的變換矩陣; H、將所述步驟E、F、G的計算結(jié)果相乘,獲得采樣矩陣; 1、將所述采樣矩陣導(dǎo)入圖形處理單元,通過采樣深度緩沖器獲得陰影值。
2.根據(jù)權(quán)利要求1所述的基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,其特征在于,所述步驟B中對象是否可見分三種情況:一、完全可見;二、完全不可見;三、部分可見。
3.根據(jù)權(quán)利要求2所述的基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,其特征在于,所述步驟C中將相機的可見對象和部分可見對象插入投射對象列表和接受陰影對象。
4.根據(jù)權(quán)利要求3所述的基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,其特征在于,所述步驟D具體包括:基于平行光源為視點對場景進(jìn)行繪制,將對象模型相對光源的深度信息繪制到一張陰影圖即深度圖中,從光源場景渲染整個場景,把深度圖保存到紋理中。
5.根據(jù)權(quán)利要求1至4之一所述的基于室外太陽光實現(xiàn)實時動態(tài)陰影的方法,其特征在于,所述步驟I具體包括:將所述采樣矩陣導(dǎo)入圖形處理單元,將像素的UV坐標(biāo)轉(zhuǎn)換為世界坐標(biāo),再將世界坐標(biāo)轉(zhuǎn)換為太陽空間的坐標(biāo),得到陰影圖中像素在太陽光空間中的新位置,深度圖記錄相機內(nèi)可見視錐體,放到太陽的位置進(jìn)行正交照射整個場景,形成一個深度信息圖;與最小深度的深度進(jìn)行比較,若深度值大于最小深度,則該像素是受陰影的,否則是受光照的。
【文檔編號】G06T15/60GK104299257SQ201410344363
【公開日】2015年1月21日 申請日期:2014年7月18日 優(yōu)先權(quán)日:2014年7月18日
【發(fā)明者】張翼 申請人:無錫梵天信息技術(shù)股份有限公司