專利名稱:一種基于gpu并行計(jì)算的實(shí)時(shí)陰影生成方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于圖形學(xué)領(lǐng)域,特別是涉及到一種基于GPU并行計(jì)算的實(shí)時(shí)陰影生產(chǎn)方 法及系統(tǒng)。
背景技術(shù):
近年來(lái),計(jì)算機(jī)圖形學(xué)有了較大的發(fā)展,在游戲,虛擬現(xiàn)實(shí),電影特效制作等多個(gè) 方向有了非常廣泛的應(yīng)用,伴隨著應(yīng)用需求的不斷增加,人們對(duì)真實(shí)感圖形的需求也與日 俱增。實(shí)現(xiàn)真實(shí)感圖形生成包含很多方面,其中陰影是比較難的一方面。進(jìn)來(lái)隨著GPU以 及CPU能力不斷增強(qiáng),尤其是顯卡的不斷進(jìn)步,使得原來(lái)由CPU處理的大部分?jǐn)?shù)據(jù)改由GPU 處理,并在硬件上實(shí)現(xiàn)了部分通用功能,如變化與光照計(jì)算等,從而大大提升了處理能力, 使真實(shí)感渲染方法逐步得到廣泛應(yīng)用。陰影方法作為真實(shí)感渲染領(lǐng)域極其重要的組成部分,目前陰影方法主要包括掃描 線方法、細(xì)節(jié)多邊形方法(兩次消隱方法)、影域多邊形方法(shadow volumes)、陰影映射 (shadow mapping)、Z-bufTer方法、光線跟蹤方法、輻射度方法等。而在交互式3D應(yīng)用中使 用最多的是陰影映射及其改進(jìn)方法。這一方法及其改進(jìn)方法在游戲、虛擬現(xiàn)實(shí)、醫(yī)學(xué)成像、 電影制作等領(lǐng)域都有著越來(lái)越廣泛的應(yīng)用。在未來(lái)計(jì)算機(jī)硬件性能不斷提升的過(guò)程中,真實(shí)感渲染方法勢(shì)必將向著高速、實(shí) 時(shí)、現(xiàn)實(shí)方向發(fā)展。其中必然對(duì)陰影生成方法有著更高的要求。因此在這一方向的研究是 具有極高應(yīng)用價(jià)值的。
發(fā)明內(nèi)容
本發(fā)明的目的之一在于克服現(xiàn)有技術(shù)的不足,提出一種基于GPU并行計(jì)算的實(shí)時(shí) 陰影生成方法。本發(fā)明的目的之二在于根據(jù)目的一的方法,提出一種基于GPU并行計(jì)算的 實(shí)時(shí)陰影生成系統(tǒng)。為了實(shí)現(xiàn)發(fā)明目的一,采用的技術(shù)方案如下以光源視點(diǎn)渲染場(chǎng)景保存物體深度信息;將深度信息做一次函數(shù)變換;存儲(chǔ)變換 后的深度信息;用GPU對(duì)深度信息并行濾波;以視點(diǎn)渲染場(chǎng)景,得到物體與光源的距離;對(duì) 距離值做函數(shù)變換;將變換后的深度值和距離值相乘,得到當(dāng)前渲染點(diǎn)的陰影值信息;利 用此陰影值信息渲染場(chǎng)景,最終得到平滑陰影效果。為了實(shí)現(xiàn)發(fā)明目的二,采用的技術(shù)方案為一種基于GPU并行計(jì)算的實(shí)時(shí)陰影生成系統(tǒng),包括新的陰影映射貼圖生成模塊、GPU并行處理陰影映射貼圖模塊以及陰影貼圖生成實(shí)時(shí)陰影的渲染模塊。所述新的陰影映射貼圖生成模塊包括深度采集子模塊、生成連續(xù)函數(shù)陰影貼圖子 模塊。所述GPU并行處理陰影映射貼圖模塊包括GPU陰影圖載入子模塊、GPU并行濾波 子模塊。
所述陰影貼圖生成實(shí)時(shí)陰影的渲染模塊包括連續(xù)函數(shù)陰影貼圖陰影映射貼圖還原子模塊、陰影生成子模塊。新的陰影映射貼圖生成模塊,收集場(chǎng)景物體到光源的深度信息后,用連續(xù)函數(shù)將 深度信息做一次映射,利用映射后的值生成陰影貼圖。將陰影貼圖送入GPU陰影圖載入子模塊,包含如下3個(gè)步驟的處理將原始圖像分割成大小相同的小塊;將每個(gè)小塊讀入GPU的處理單元的內(nèi)存;將 讀入后的數(shù)據(jù)邊緣部分進(jìn)行擴(kuò)展。如果是圖像最外層邊界用0進(jìn)行擴(kuò)展,擴(kuò)展行數(shù)根據(jù)濾波階數(shù)而定;如果是圖像 內(nèi)部分塊邊界,用相鄰行或列數(shù)據(jù)復(fù)制補(bǔ)齊擴(kuò)展,擴(kuò)展行數(shù)根據(jù)濾波階數(shù)而定。將擴(kuò)展后的數(shù)據(jù)送入GPU并行濾波子模塊,包括如下3個(gè)步驟的處理每個(gè)處理單元同時(shí)讀入補(bǔ)齊擴(kuò)展后的數(shù)據(jù);每個(gè)處理單元用濾波核對(duì)數(shù)據(jù)進(jìn)行乘 加濾波運(yùn)算;將運(yùn)算后的結(jié)果寫入公共內(nèi)存區(qū),并等待線程同步后返回結(jié)束信號(hào)。之后進(jìn)入連續(xù)函數(shù)陰影貼圖陰影映射貼圖還原子模塊和陰影生成子模塊。映射貼圖還原子模塊對(duì)距離值做函數(shù)變換;將變換后的深度值和距離值相乘,得 到當(dāng)前渲染點(diǎn)的陰影值信息。送入陰影生成子模塊,利用此陰影值信息渲染場(chǎng)景,最終得到 平滑陰影效果。本發(fā)明的優(yōu)點(diǎn)在于陰影生成速度快,邊緣平滑。在場(chǎng)景中有多個(gè)光源情況下比一 般的方法能有效提高陰影生成速度50%以上。在復(fù)雜場(chǎng)景的渲染應(yīng)用需求中具有極大優(yōu) 勢(shì)。
圖1為本發(fā)明的基于GPU并行計(jì)算的實(shí)時(shí)陰影生成系統(tǒng)框架示意圖;圖2為本發(fā)明的基于GPU并行計(jì)算的實(shí)時(shí)陰影生成方法的流程圖;圖3為陰影圖載入子模塊流程圖;圖4為GPU并行處理陰影映射貼圖流程圖。
具體實(shí)施例方式為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。圖1展示了基于GPU并行計(jì)算的實(shí)時(shí)陰影生成系統(tǒng)框架。首先渲染系統(tǒng)從場(chǎng)景中 得到所有待渲染物體在場(chǎng)景中的深度信息,這步操作無(wú)特殊要求。得到深度信息后將深度信息傳入連續(xù)函數(shù)陰影貼圖模塊,此模塊完成如下工作首先此模塊根據(jù)深度信息得到離散的陰影測(cè)試函數(shù),此陰影測(cè)試函數(shù)定義為如果 光源到物體的深度信息值小于視點(diǎn)空間中光源到物體的深度信息值即視為此點(diǎn)在陰影中, 這樣得到的陰影測(cè)試函數(shù)為0-1離散函數(shù)。其次選用一個(gè)連續(xù)函數(shù)來(lái)逼近這個(gè)離散函數(shù), 函數(shù)的選取可以有多種,開(kāi)發(fā)者可以嘗試選取不同種類的連續(xù)函數(shù)。所有函數(shù)的選取目的 均在逼近模擬0-1離散函數(shù),最后將連續(xù)函數(shù)變換后的陰影測(cè)試函數(shù)存儲(chǔ)到一張陰影貼圖中。接下來(lái)將存儲(chǔ)的陰影貼圖送入GPU陰影圖載入子模塊,此模塊負(fù)責(zé)對(duì)陰影貼圖做 前期處理,目的是為GPU并行濾波提供準(zhǔn)備。具體所作工作如圖3所示,包含如下3個(gè)步驟 的處理1、將原始陰影貼圖分割成大小相同的小塊。此步操作根據(jù)濾波核的大小,和圖像 本身的大小分塊大小會(huì)有所不同,應(yīng)滿足一般原則分塊個(gè)數(shù)應(yīng)滿足GPU數(shù)據(jù)對(duì)齊原則,即 分塊應(yīng)為2次方數(shù)。2、將每個(gè)小塊讀入GPU的處理單元的內(nèi)存。此步操作是為GPU并行計(jì)算單元提供 原始數(shù)據(jù)。3、將讀入后的數(shù)據(jù)邊緣部分進(jìn)行擴(kuò)展。此步操作是為了計(jì)算分塊邊緣的值,根據(jù) 卷積濾波的定義這步不能缺少,否則圖像將會(huì)縮小。擴(kuò)展方法如下所述
如果是圖像最外層邊界用0進(jìn)行擴(kuò)展,擴(kuò)展行數(shù)根據(jù)濾波階數(shù)而定;如果是圖像 內(nèi)部分塊邊界,用相鄰行或列數(shù)據(jù)復(fù)制補(bǔ)齊擴(kuò)展,擴(kuò)展行數(shù)根據(jù)濾波階數(shù)而定。接下來(lái)如圖4所示,將擴(kuò)展后的數(shù)據(jù)送入GPU并行濾波子模塊,此模塊將陰影貼圖 進(jìn)行并行濾波,包括如下3個(gè)步驟的處理1、每個(gè)處理單元同時(shí)讀入補(bǔ)齊擴(kuò)展后的數(shù)據(jù);2、每個(gè)處理單元用濾波核對(duì)數(shù)據(jù)進(jìn)行乘加濾波運(yùn)算;此處濾波的方法可以不同, 本系統(tǒng)采用的是高斯濾波。3、將運(yùn)算后的結(jié)果寫入公共存儲(chǔ)區(qū),并等待線程同步后返回結(jié)束信號(hào)。至此已經(jīng) 完成對(duì)圖像的并行濾波,結(jié)果存儲(chǔ)在公共存儲(chǔ)區(qū)。之后進(jìn)入連續(xù)函數(shù)陰影貼圖陰影映射貼圖還原子模塊和陰影生成子模塊。陰影貼圖還原子模塊對(duì)距離值做函數(shù)變換;將變換后的深度值和距離值相乘,得 到當(dāng)前渲染點(diǎn)的陰影值信息。送入陰影生成子模塊,利用此陰影值信息渲染場(chǎng)景,最終自然 得到平滑陰影效果。如上所訴的系統(tǒng)及方法是為了能讓本領(lǐng)域的技術(shù)人員制造和使用本發(fā)明而提供 的。本領(lǐng)域的技術(shù)人員可以對(duì)具體實(shí)現(xiàn)做相應(yīng)修改,但其所對(duì)應(yīng)的最大范疇與這里所揭示 的原理和新穎性是一致的。
權(quán)利要求
一種基于GPU并行計(jì)算的實(shí)時(shí)陰影生成方法,其特征在于,包括如下步驟以光源視點(diǎn)渲染場(chǎng)景保存物體深度信息;將深度信息做一次函數(shù)變換;存儲(chǔ)變換后的深度信息;用GPU對(duì)深度信息并行濾波;以視點(diǎn)渲染場(chǎng)景,得到物體與光源的距離;對(duì)距離值做函數(shù)變換;將變換后的深度值和距離值相乘,得到當(dāng)前渲染點(diǎn)的陰影值信息;利用此陰影值信息渲染場(chǎng)景,最終得到平滑陰影效果。
2.一種基于GPU并行計(jì)算的實(shí)時(shí)陰影生成系統(tǒng),其特征在于,該系統(tǒng)包括新的陰影映 射貼圖生成模塊、GPU并行處理陰影映射貼圖模塊以及陰影貼圖生成實(shí)時(shí)陰影的渲染模 塊;所述新的陰影映射貼圖生成模塊包括深度采集子模塊、生成連續(xù)函數(shù)陰影貼圖子模 塊;所述GPU并行處理陰影映射貼圖模塊包括GPU陰影圖載入子模塊、GPU并行濾波子模塊;所述陰影貼圖生成實(shí)時(shí)陰影的渲染模塊包括連續(xù)函數(shù)陰影貼圖陰影映射貼圖還原子 模塊、陰影生成子模塊;新的陰影映射貼圖生成模塊,收集場(chǎng)景物體到光源的深度信息后,用連續(xù)函數(shù)將深度 信息做一次映射,利用映射后的值生成陰影貼圖,將陰影貼圖送入GPU陰影圖載入子模塊 對(duì)數(shù)據(jù)邊緣部分進(jìn)行擴(kuò)展,將擴(kuò)展后的數(shù)據(jù)送入GPU并行濾波子模塊,之后進(jìn)入連續(xù)函數(shù) 陰影貼圖陰影映射貼圖還原子模塊和陰影生成子模塊,映射貼圖還原子模塊對(duì)距離值做函 數(shù)變換,將變換后的深度值和距離值相乘,得到當(dāng)前渲染點(diǎn)的陰影值信息,送入陰影生成子 模塊,利用此陰影值信息渲染場(chǎng)景,最終得到平滑陰影效果。
3.根據(jù)權(quán)利要求2所述的基于GPU并行計(jì)算的實(shí)時(shí)陰影生成系統(tǒng),其特征在于,首先連 續(xù)函數(shù)陰影貼圖模塊根據(jù)深度信息得到離散的陰影測(cè)試函數(shù),此陰影測(cè)試函數(shù)定義為如果 光源到物體的深度信息值小于視點(diǎn)空間中光源到物體的深度信息值即視為此點(diǎn)在陰影中, 這樣得到的陰影測(cè)試函數(shù)為0-1離散函數(shù);其次選用一個(gè)連續(xù)函數(shù)來(lái)逼近這個(gè)離散函數(shù), 函數(shù)的選取可以有多種,開(kāi)發(fā)者可以嘗試選取不同種類的連續(xù)函數(shù);所有函數(shù)的選取目的 均在逼近模擬0-1離散函數(shù),最后將連續(xù)函數(shù)變換后的陰影測(cè)試函數(shù)存儲(chǔ)到一張陰影貼圖 中;接下來(lái)將存儲(chǔ)的陰影貼圖送入GPU陰影圖載入子模塊,此模塊負(fù)責(zé)對(duì)陰影貼圖做前期 處理,目的是為GPU并行濾波提供準(zhǔn)備,包含如下3個(gè)步驟的處理Al 將原始陰影貼圖分割成大小相同的小塊,此步操作根據(jù)濾波核的大小,和圖像本身 的大小分塊大小會(huì)有所不同,應(yīng)滿足一般原則分塊個(gè)數(shù)應(yīng)滿足GPU數(shù)據(jù)對(duì)齊原則,即分塊 應(yīng)為2次方數(shù);Bl 將每個(gè)小塊讀入GPU的處理單元的內(nèi)存,此步操作是為GPU并行計(jì)算單元提供原始 數(shù)據(jù);Cl 將讀入后的數(shù)據(jù)邊緣部分進(jìn)行擴(kuò)展,此步操作是為了計(jì)算分塊邊緣的值,根據(jù)卷積 濾波的定義這步不能缺少,否則圖像將會(huì)縮??;擴(kuò)展方法如下所述如果是圖像最外層邊界用0進(jìn)行擴(kuò)展,擴(kuò)展行數(shù)根據(jù)濾波階數(shù)而定;如果是圖像內(nèi)部 分塊邊界,用相鄰行或列數(shù)據(jù)復(fù)制補(bǔ)齊擴(kuò)展,擴(kuò)展行數(shù)根據(jù)濾波階數(shù)而定;接下來(lái)將擴(kuò)展后的數(shù)據(jù)送入GPU并行濾波子模塊,此模塊將陰影貼圖進(jìn)行并行濾波,包括如下3個(gè)步驟的處理A2 每個(gè)處理單元同時(shí)讀入補(bǔ)齊擴(kuò)展后的數(shù)據(jù);B2 每個(gè)處理單元用濾波核對(duì)數(shù)據(jù)進(jìn)行乘加濾波運(yùn)算;此處濾波的方法可以不同,本 系統(tǒng)采用的是高斯濾波;C2 將運(yùn)算后的結(jié)果寫入公共存儲(chǔ)區(qū),并等待線程同步后返回結(jié)束信號(hào);至此已經(jīng)完成對(duì)圖像的并行濾波,結(jié)果存儲(chǔ)在公共存儲(chǔ)區(qū)。
全文摘要
本發(fā)明公開(kāi)了一種基于GPU并行計(jì)算的實(shí)時(shí)陰影生成方法及系統(tǒng)。以光源視點(diǎn)渲染場(chǎng)景保存物體深度信息;將深度信息做一次函數(shù)變換;存儲(chǔ)變換后的深度信息;用GPU對(duì)深度信息并行濾波;以視點(diǎn)渲染場(chǎng)景,得到物體與光源的距離;對(duì)距離值做函數(shù)變換;將變換后的深度值和距離值相乘,得到當(dāng)前渲染點(diǎn)的陰影值信息;利用此陰影值信息渲染場(chǎng)景,最終得到平滑陰影效果。利用此方法及系統(tǒng)生成的陰影具有自然平滑的陰影邊緣以及在復(fù)雜場(chǎng)景中高效的渲染速度。
文檔編號(hào)G06T1/20GK101840566SQ20101015357
公開(kāi)日2010年9月22日 申請(qǐng)日期2010年4月16日 優(yōu)先權(quán)日2010年4月16日
發(fā)明者羅笑南, 許曉偉, 馬晨 申請(qǐng)人:中山大學(xué)