三角形重建的幾何陰影圖方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及計(jì)算機(jī)圖形學(xué)陰影繪制領(lǐng)域,具體設(shè)及一種=角形重建的幾何陰影圖 方法。
【背景技術(shù)】
[0002] 陰影是計(jì)算機(jī)圖形學(xué)實(shí)施繪制中的重要研究課題之一,它能夠增加合成圖像的真 實(shí)感,幫助用戶有效地分辨場景中物體的位置關(guān)系。陰影圖(shadowma卵ing,SM)和陰影 體(shadowvolume)是陰影繪制的兩種主要方法。其中,陰影圖方法是陰影繪制中應(yīng)用最 為廣泛的方法,但是它使用離散的點(diǎn)采樣來獲取和記錄陰影遮擋物的深度信息,該會導(dǎo)致 走樣和深度偏移的問題。
[0003] Dai等在2008年提出了幾何重建的陰影圖方法(reconstruct油legeometry shadowmaps,RGSM)來解決陰影圖方法中的走樣和深度偏移問題。它的主要思想是;在光 源空間將場景光柵化,把每個像素中屯、離視點(diǎn)最近的遮擋=角形幾何存儲下來;對于每個 像素,其遮擋物的深度值可W使用存儲的S角形幾何信息,通過線性插值得到。RGSM雖然能 較好地解決走樣和深度偏移問題,但存在=個重要的缺陷:需要較大的幾何信息存儲空間、 訪問幾何緩存代價高和幾何信息不完整所造成的陰影錯誤。
[0004] 申請?zhí)?00810096135. 7的中國專利文獻(xiàn)公開的一種可重建幾何陰影圖方法,其 特征在于,包括:
[0005] W-光源為觀察點(diǎn),儲存一物體前表面的多個遮光S角形的幾何信息;
[0006] 對一測試像素進(jìn)行一致性測試,W從所述多個遮光S角形中找出相對應(yīng)與該測試 像素的一遮光S角形;
[0007] 重建相對于該測試像素的一遮光點(diǎn)的深度值;W及執(zhí)行該測試像素的陰影判斷;
[0008]其中,該測試像素的坐標(biāo)為(P.X,P.y,P.Z),而該一致性測試包括;
[0009] 選擇所述多個遮光S角形其中之一;
[0010] 讀取所選擇的遮光=角形的幾何信息,該所選擇的遮光=角形的幾何信息中包括 該所選擇的遮光S角形的頂點(diǎn)坐標(biāo)(V。.X,V。.y,V。.Z)、(Vi.X,Vi.y,Vi.Z)、(V2.X,V2.y,V2. z);
[0011] 計(jì)算等
求取該遮光點(diǎn)的重屯、坐標(biāo)值 ("1,"2,訊3);
[0012] 依據(jù)該遮光點(diǎn)的重屯、坐標(biāo)值(Wi,W2,W3)判斷該所選擇的遮光S角形是否為一致 的;W及若該所選擇的遮光S角形判斷結(jié)果為一致的,則該所選擇的遮光S角形為相對應(yīng) 于該測試像素的遮光S角形;
[0013] 重建該遮光點(diǎn)的深度值包括:
[0014] 計(jì)算等式
,W求取該遮光點(diǎn)的深度值T.Z。
[0015] 申請?zhí)?00810096135. 7的中國專利文獻(xiàn)公開的一種可重建幾何陰影圖方法,僅 存儲了遮光=角形,它對于整個場景來說仍然是不完整的,它會造成部分像素?zé)o法在陰影 圖中找到對應(yīng)的遮擋物幾何,從而導(dǎo)致深度值精度不高的現(xiàn)象產(chǎn)生。
【發(fā)明內(nèi)容】
[0016] 本發(fā)明針對現(xiàn)有幾何重建的陰影圖方法不足,提供一種能避免走樣和深度偏移問 題產(chǎn)生,且有效確保深度值精度的=角形重建的幾何陰影圖方法。
[0017] 本發(fā)明采用的技術(shù)方案為:
[0018] 一種S角形重建的幾何陰影圖方法,包括:
[0019] (1)在光源空間繪制場景,生成并存儲幾何陰影圖;
[0020] 在繪制流水線的幾何著色器階段,加入保守光柵化的操作,保存每一個像素的遮 擋=角形,W及該遮擋=角形的=個邊鄰接=角形;
[0021] 0)對步驟(1)得到的幾何陰影圖基于GPU進(jìn)行壓縮W減少幾何陰影圖中S角形 的冗余,得到壓縮后的幾何陰影圖W及幾何陰影圖大小的索引圖;
[0022] (3)在視域空間繪制場景,將像素按照2X2像素區(qū)域打包,然后進(jìn)行S角形一致 性檢查,根據(jù)檢查結(jié)果,用壓縮后的幾何陰影圖中存儲的=角形幾何相應(yīng)的重建當(dāng)前屏幕 像素的遮擋物的深度值;
[0023] (4)比較光源空間的像素深度和步驟(3)的遮擋物的深度值,確定陰影計(jì)算結(jié)果, W完成幾何陰影圖的重建。
[0024] 作為優(yōu)選,步驟(1)中進(jìn)行保守光柵化時,對遮擋=角形所覆蓋的像素區(qū)域進(jìn)行 過估計(jì),并將過估計(jì)結(jié)果記錄在幾何陰影圖中。
[0025] 由于幾何陰影圖的分辨率有限,一些投影面積"小"或"細(xì)長"的S角形不能覆蓋 任何紋素中屯、,難W被保存在幾何陰影圖中。而對于陰影輪廓線附近的像素,它對應(yīng)的遮擋 =角形會在某些紋素只有小面積的遮擋,而該樣的遮擋信息往往也會丟失。為了記錄該些 丟失的=角形或=角形區(qū)域,本發(fā)明使用保守光柵化對=角形的覆蓋區(qū)域進(jìn)行過估計(jì),使 其盡可能地被記錄在幾何陰影圖中。
[0026] 作為優(yōu)選,所述幾何陰影圖的每個像素對應(yīng)存儲了六個頂點(diǎn)數(shù)據(jù),包括:中屯、遮擋 =角形的=個頂點(diǎn)和=個邊鄰接=角形設(shè)及到的其他=個頂點(diǎn)。
[0027] 幾何陰影圖存儲S角形信息本質(zhì)上是用連續(xù)的原始幾何替代了傳統(tǒng)陰影圖方法 中的離散采樣的深度信息。但由于幾何陰影圖是基于光柵化生成的幾何信息,它對于整個 場景來說仍然是不完整的,它會造成部分像素?zé)o法在陰影圖中找到對應(yīng)的遮擋物幾何。為 了補(bǔ)償該一點(diǎn),本發(fā)明對于每個像素不但存儲它的遮擋=角形,還會存儲遮擋=角形的= 個邊鄰接=角形。當(dāng)前主流硬件中幾何著色功能直接支持=角形邊鄰接的拓?fù)潢P(guān)系,高效 地獲取邊鄰接=角形的幾何。
[002引作為優(yōu)選,在幾何陰影圖中,S角形頂點(diǎn)的X和y坐標(biāo)存儲為16-bit格式,Z坐標(biāo) 存儲為32-bit格式,該樣有效的來保證深度值的精度。
[0029] 作為優(yōu)選,步驟(2)中幾何陰影圖的壓縮如下:
[0030] (a)生成幾何陰影圖的同時生成一張面片的序號圖,并且記錄下每個紋素在幾何 陰影圖中的原有位置;
[0031] 化)根據(jù)面片的序號圖對序號進(jìn)行雙調(diào)歸并排序,然后使用并行的算法提取序號 中的非重復(fù)序號,同時使對應(yīng)紋素的位置信息與序號信息同步變化;
[003引 (C)排序后再使用原有位置信息對面片的序號進(jìn)行順序恢復(fù)得到新的序號圖;
[0033] (d)根據(jù)新的序號圖創(chuàng)建一張可讀寫的紋理,將相應(yīng)面片中非冗余的幾何信息寫 入其中,并生成所述的壓縮后的幾何陰影圖W及幾何陰影圖大小的索引圖。
[0034] 相對于傳統(tǒng)陰影圖方法每個紋素存儲一個深度值,本發(fā)明方法存儲的=角形幾何 需要更多的存儲空間。實(shí)際上,幾何陰影圖中相鄰紋素存儲的遮擋S角形可能是同一個S 角形,該意味著存儲的幾何數(shù)據(jù)中存在大量冗余,幾何陰影圖的空間是可W壓縮的。因此本 發(fā)明方法提供了一個功能選項(xiàng),用戶可W選擇對幾何陰影圖進(jìn)行壓縮的預(yù)計(jì)算,降低方法 的存儲開銷和運(yùn)行時間。該功能尤其適用于固定光源的場景(例如S維游戲中的室內(nèi)場 景)。該壓縮方法使用DirectCompute實(shí)現(xiàn),利用了其并行計(jì)算能力來快速計(jì)算。
[0035] 作為優(yōu)選,步驟(3)中陰影計(jì)算的打包方法如下:
[0036] 屏幕像素按照2X2像素區(qū)域進(jìn)行打包,每個包內(nèi)的4個像素的陰影結(jié)果在同一繪 制流水線中進(jìn)行計(jì)算。
[0037] 由于場景幾何具有空間上的連續(xù)性,相鄰的屏幕像素對應(yīng)的遮擋=角形也有很大 幾率為同一=角形或互為邊鄰接=角形。本發(fā)明提出了一種基于打包的陰影計(jì)算方法。 [003引根據(jù)4個像素在光源空間的投影坐標(biāo),當(dāng)一致性測試設(shè)及到的S角形有重復(fù)情況 發(fā)生時,冗余的幾何讀取操作可W避免。
[0039] 作為優(yōu)選,步驟(3)中具體過程為:
[0040] 對于每個屏幕像素依次使用對應(yīng)的中屯、遮擋=角形、邊鄰接=角形和相鄰像素中 的S角形信息作為檢測S角形進(jìn)行測試,直到獲得當(dāng)前屏幕像素的遮擋S角形,再用該遮 擋=角形幾何重建當(dāng)前屏幕像素的遮擋物的深度值;
[0041] 檢測時相對于當(dāng)前屏幕像素,如果該像素的重屯、坐標(biāo)的每個分量都位于0到1之 間,則該檢測S角形即