一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)圖形領(lǐng)域,尤其涉及一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法及裝置。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)游戲,又稱“在線游戲”,簡(jiǎn)稱“網(wǎng)游”。是指以互聯(lián)網(wǎng)為傳輸媒介,以游戲運(yùn)營(yíng)商的服務(wù)器和用戶計(jì)算機(jī)為處理終端,以游戲客戶端軟件為信息交互的窗口,旨在實(shí)現(xiàn)娛樂(lè)、休閑、交流和取得虛擬成就的具有可持續(xù)性的個(gè)體性多人在線游戲。在3D網(wǎng)絡(luò)游戲中,模擬逼真的光影效果對(duì)游戲體驗(yàn)起到非常重要的作用,但對(duì)于用戶計(jì)算機(jī)而言,大規(guī)模實(shí)時(shí)計(jì)算光影無(wú)法承受。
[0003]基于逼真效果的模擬和用戶計(jì)算機(jī)的運(yùn)行能力的考慮,靜態(tài)光照貼圖成為了一種選擇方案,在3dsmax等軟件中,預(yù)先計(jì)算光影并將結(jié)果保存在一張貼圖里,之后在3D網(wǎng)絡(luò)游戲中直接使用該貼圖,就可以獲得很好的光影效果。但靜態(tài)光照貼圖的缺點(diǎn)是,由于光影信息是預(yù)先計(jì)算的,是靜態(tài)的,而游戲中有很多物體是可以移動(dòng)的,比如角色或者樹(shù)葉,是動(dòng)態(tài)的,動(dòng)態(tài)的物體無(wú)法使用靜態(tài)光照貼圖。對(duì)于動(dòng)態(tài)的物體可以使用實(shí)時(shí)計(jì)算光影方法,但只能計(jì)算玩家主角附近的物體,否則會(huì)帶來(lái)巨大的計(jì)算開(kāi)銷(xiāo)。但是遠(yuǎn)景如果沒(méi)有陰影效果,場(chǎng)景會(huì)顯得不真實(shí),降低游戲體驗(yàn)。
[0004]如果將靜態(tài)預(yù)計(jì)算光照貼圖和有限的(只計(jì)算附近少部分模型)動(dòng)態(tài)實(shí)時(shí)計(jì)算相結(jié)合的方案,這樣即可以保證效率,又可以滿足動(dòng)態(tài)物體的需求。此時(shí)帶來(lái)了另外一個(gè)問(wèn)題,如何將兩者完美融合,即動(dòng)態(tài)陰影和靜態(tài)陰影同時(shí)出現(xiàn)應(yīng)該如何融合。
[0005]目前主要通過(guò)按區(qū)選擇單一陰影渲染方法,例如在室內(nèi)使用靜態(tài)光影貼圖,在室外使用短距離動(dòng)態(tài)實(shí)時(shí)計(jì)算,避免動(dòng)態(tài)陰影和靜態(tài)陰影同時(shí)出現(xiàn)時(shí)的陰影融合問(wèn)題。
[0006]現(xiàn)有技術(shù)的缺點(diǎn)是:無(wú)法實(shí)現(xiàn)靜態(tài)陰影和動(dòng)態(tài)陰影的融合,畫(huà)面在較開(kāi)闊的場(chǎng)景中逼真度不高。
【發(fā)明內(nèi)容】
[0007]有鑒于此,本發(fā)明提供一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法及裝置,通過(guò)使靜態(tài)光照貼圖中的靜態(tài)陰影和動(dòng)態(tài)實(shí)時(shí)計(jì)算的動(dòng)態(tài)陰影相融合,使得開(kāi)闊場(chǎng)景在不需要承受巨大計(jì)算開(kāi)銷(xiāo)的同時(shí),還能夠保持較好的光影效果。
[0008]第一方面,本發(fā)明提供了一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法,包括:計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例,其中,陰影融合區(qū)包括靜態(tài)陰影和動(dòng)態(tài)陰影;根據(jù)所述比例計(jì)算陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值。
[0009]進(jìn)一步地,所述計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例,其中,陰影融合區(qū)包括靜態(tài)陰影和動(dòng)態(tài)陰影具體包括:依據(jù)如下公式,計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例:
[0010]F= (Ds-Xd) / (De-Ds),
[0011]其中,Ds為陰影融合區(qū)的起始像素點(diǎn)到相機(jī)的距離,De為陰影融合區(qū)的結(jié)束像素點(diǎn)到相機(jī)的距離,Xd為陰影融合區(qū)內(nèi)任一像素點(diǎn)到相機(jī)的距離。
[0012]進(jìn)一步地,所述根據(jù)所述比例計(jì)算陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值具體包括:依據(jù)如下公式,計(jì)算陰影融合區(qū)內(nèi)任一像素點(diǎn)的顏色值:
[0013]R = Xa*(!-F)+Xb*F
[0014]其中,Xa為該像素點(diǎn)在靜態(tài)陰影圖中的顏色值,Xb為該像素點(diǎn)在動(dòng)態(tài)陰影圖中的顏色值;
[0015]重復(fù)上述計(jì)算,得到陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值。
[0016]進(jìn)一步地,在根據(jù)所述比例計(jì)算陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值之后,還包括:采用計(jì)算出的陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值,設(shè)置所述陰影融合區(qū),得到融合后的陰影圖。
[0017]第二方面,本發(fā)明還提供了一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的裝置,包括:第一計(jì)算模塊,用于計(jì)算計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例;第二計(jì)算模塊,用于根據(jù)所述比例計(jì)算陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值。
[0018]進(jìn)一步地,所述第一計(jì)算模塊具體用于:依據(jù)如下公式,計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例:
[0019]F= (Ds-Xd) / (De-Ds),
[0020]其中,Ds為陰影融合區(qū)的起始像素點(diǎn)到相機(jī)的距離,De為陰影融合區(qū)的結(jié)束像素點(diǎn)到相機(jī)的距離,Xd為陰影融合區(qū)內(nèi)任一像素點(diǎn)到相機(jī)的距離。
[0021]進(jìn)一步地,所述第二計(jì)算模塊還包括顏色計(jì)算子模塊和重復(fù)計(jì)算子模塊;
[0022]顏色計(jì)算子模塊,用于依據(jù)如下公式,計(jì)算陰影融合區(qū)內(nèi)任一像素點(diǎn)的顏色值:
[0023]R = Xa*(l_F)+Xb*F
[0024]其中,Xa為該像素點(diǎn)在靜態(tài)陰影圖中的顏色值,Xb為該像素點(diǎn)在動(dòng)態(tài)陰影圖中的顏色值;
[0025]重復(fù)計(jì)算子模塊,用于重復(fù)上述計(jì)算,得到陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值。
[0026]進(jìn)一步地,所述裝置還包括:陰影圖模塊,用于對(duì)陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值進(jìn)行儲(chǔ)存。
[0027]本發(fā)明提供的一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法及裝置,通過(guò)計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例和根據(jù)所述比例計(jì)算陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值,實(shí)現(xiàn)靜態(tài)陰影和動(dòng)態(tài)陰影的融合。使得在不增加計(jì)算開(kāi)銷(xiāo)的同時(shí),遠(yuǎn)處的物體也能夠有陰影,提高了游戲畫(huà)面的逼真度。
【附圖說(shuō)明】
[0028]通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯;
[0029]圖1是本發(fā)明實(shí)施例一提供的一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法流程圖;
[0030]圖2a是本發(fā)明實(shí)施例一提供的一種實(shí)時(shí)計(jì)算動(dòng)態(tài)陰影實(shí)物圖;
[0031]圖2b是本發(fā)明實(shí)施例一提供一種融合陰影實(shí)物圖;
[0032]圖3是本發(fā)明實(shí)施例二提供的一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的裝置模塊圖。
【具體實(shí)施方式】
[0033]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容。
[0034]實(shí)施例一
[0035]本發(fā)明實(shí)施例一提供一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法。圖1是本發(fā)明實(shí)施例一提供的一種計(jì)算光照?qǐng)D的靜態(tài)陰影和動(dòng)態(tài)陰影融合的方法流程圖。如圖1所示,所述方法包括:
[0036]步驟110、計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例,其中,陰影融合區(qū)包括靜態(tài)陰影和動(dòng)態(tài)陰影;
[0037]為了節(jié)省計(jì)算開(kāi)銷(xiāo),3D游戲中都會(huì)在玩家主角附近預(yù)設(shè)一個(gè)固定的動(dòng)態(tài)陰影渲染距離,在此距離內(nèi)的物體會(huì)渲染動(dòng)態(tài)陰影,且在此距離內(nèi)不會(huì)被渲染靜態(tài)陰影。但是,在一些較開(kāi)闊的場(chǎng)景中,為了提高畫(huà)面的逼真度且節(jié)省計(jì)算開(kāi)銷(xiāo),一個(gè)比較好的方法就是在固定的動(dòng)態(tài)陰影渲染距離內(nèi)渲染動(dòng)態(tài)陰影,在超過(guò)固定的動(dòng)態(tài)陰影渲染距離外渲染靜態(tài)陰影。因此,在固定的動(dòng)態(tài)陰影渲染距離的邊緣,需要進(jìn)行靜態(tài)陰影和動(dòng)態(tài)陰影融合,使其能夠平滑過(guò)渡。所述的陰影融合區(qū)是指在場(chǎng)景的同一區(qū)域內(nèi)需要進(jìn)行動(dòng)態(tài)陰影和靜態(tài)陰影進(jìn)行融合的區(qū)域。所述動(dòng)態(tài)陰影是指實(shí)時(shí)計(jì)算出來(lái)的陰影,所述靜態(tài)陰影是指靜態(tài)光照貼圖。
[0038]在本步驟中,依據(jù)如下公式,計(jì)算動(dòng)態(tài)陰影占陰影融合區(qū)的比例:
[0039]F = (Ds-Xd) / (De-Ds),
[0040]其中,Ds為陰影融合區(qū)的起始像素點(diǎn)到相機(jī)的距離,De為陰影融合區(qū)的結(jié)束像素點(diǎn)到相機(jī)的距離,Xd為陰影融合區(qū)內(nèi)任一像素點(diǎn)到相機(jī)的距離。
[0041]在此,3D網(wǎng)絡(luò)游戲中的相機(jī)一般用來(lái)控制當(dāng)前游戲場(chǎng)景中的視角。相機(jī)綁定在玩家主角的身上。一般情況下,3D網(wǎng)絡(luò)游戲世界中有以下三種矩陣:世界矩陣(worldmatrix),其用于控制對(duì)象在游戲場(chǎng)景中的位置或者姿態(tài),視/相機(jī)矩陣(view matrix)其用于控制相機(jī)在游戲場(chǎng)景中的位置和姿態(tài),進(jìn)而決定游戲場(chǎng)景中哪些物體是可見(jiàn)的,哪些物體是不可見(jiàn)的;投影矩陣(project matrix),其用于控制可見(jiàn)物體在屏幕上如何顯示。
[0042]步驟120、根據(jù)所述比例計(jì)算陰影融合區(qū)內(nèi)每個(gè)像素點(diǎn)的顏色值。
[0043]在本步驟中,依據(jù)如下公式,計(jì)算陰影融合區(qū)內(nèi)任一像素點(diǎn)的顏色值:
[0044]R = Xa* (1-F)+Xb*F
[0045]其中,Xa為該像素點(diǎn)在靜態(tài)陰影圖