去像素化輪廓線重建的線性陰影圖方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)圖形學(xué)陰影繪制領(lǐng)域,具體涉及一種去像素化輪廓線重建的線 性陰影圖方法。
【背景技術(shù)】
[0002] 陰影是現(xiàn)實(shí)世界的重要元素之一,也是合成圖像真實(shí)感繪制中不可缺少的一部 分。它承載了場景中光源位置、光線傳遞方向等重要信息。對于屏幕上任何一個(gè)可見點(diǎn)來 說,它或者直接被光源照射而處于照亮區(qū)域,或者被其它物體遮擋而處于陰影區(qū)域。對于用 戶來說,正確的陰影信息可以幫助用戶有效認(rèn)識物體的幾何屬性,分辨物體之間的相對位 置關(guān)系。
[0003] 盡管陰影繪制算法已經(jīng)是計(jì)算機(jī)圖形學(xué)中一個(gè)經(jīng)典問題,但如何高效而魯棒地 生成陰影的問題并沒有完全得到解決。陰影圖(shadowmapping,SM)和陰影體(shadow volume)是繪制硬陰影的兩種主要方法,分別代表了基于圖像和基于幾何的兩種硬陰影生 成思路。其中,陰影圖方法是陰影繪制中應(yīng)用最為廣泛的方法,它使用深度緩存快速判斷場 景中可見點(diǎn)相對于光源的可見性,其算法執(zhí)行時(shí)間接近于僅僅繪制一遍場景的時(shí)間,算法 所需要消耗的內(nèi)存數(shù)據(jù)僅僅是一張單通道的深度紋理。然而陰影圖算法也面臨著兩個(gè)重大 的挑戰(zhàn):走樣問題,其產(chǎn)生的原因是陰影圖的分辨率有限,深度信息采樣不足;自陰影,通 常表現(xiàn)出的現(xiàn)象為場景中原本被照亮的物體表現(xiàn)出不正確的陰影條紋,好像物體被自己遮 擋住一樣,其產(chǎn)生的原因有兩點(diǎn)一一數(shù)值量化誤差以及深度的離散采樣導(dǎo)致陰影圖的深度 值只在紋素中心是精確的。
[0004] 提高陰影圖分辨率是解決陰影圖固有問題的最直接的方法,然而過大的陰影圖 分辨率會(huì)給算法帶來嚴(yán)重的存儲(chǔ)和性能開銷。許多學(xué)者提出了改進(jìn)的陰影圖方法,如垂 直紋理扭曲方法(RosenP.Rectilineartexturewarpingforfastadaptiveshadow mapping[C].ProceedingsoftheACMSIGGRAPHSymposiumonInteractive3DGraphics andGames.NewYork:ACMPress,2012 :151_158),不規(guī)則陰影圖方法(JohnsonGS,LeeJ, BurnsCA,etal.TheirregularZ-buffer:Hardwareaccelerationforirregulardata structures[J].ACMTransactionsonGraphics,2005,24(4) :1462_1482)等。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明針對現(xiàn)有反走樣技術(shù)不足,提供一種能有效地減弱陰影圖方法中走樣現(xiàn)象 發(fā)生的去像素化輪廓線重建的線性陰影圖方法。
[0006] 為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
[0007] -種去像素化輪廓線重建的線性陰影圖方法,包括:
[0008] (1)從光源空間繪制場景,存儲(chǔ)所有像素中心的深度值為第一陰影圖,在X和y方 向各偏移半個(gè)紋素大小得到第二陰影圖,第一陰影圖和第二陰影圖構(gòu)成線性陰影圖;
[0009] (2)從視域空間繪制場景,將像素變換到光源空間,并把像素分類為輪廓線像素和 非輪廓線像素;
[0010] (3)對于非輪廓線像素使用線性插值計(jì)算遮擋物深度值,比較深度值得到陰影結(jié) 果,對于輪廓線像素,使用去像素化的輪廓線重建方法對陰影邊界進(jìn)行重建。
[0011] 作為優(yōu)選,步驟(1)中的線性陰影圖的采樣位置為每個(gè)紋素的中心和角點(diǎn)。
[0012] 本發(fā)明線性陰影圖的采樣位置為每個(gè)紋素的中心和角點(diǎn),這種采樣方式相對于傳 統(tǒng)陰影圖方法來說其實(shí)是兩倍的采樣數(shù)目,該陰影圖生成方法與傳統(tǒng)陰影圖生成方法類 似,區(qū)別即一張?jiān)缄幱皥D加上一張偏移半個(gè)像素距離的相同分辨率的陰影圖。
[0013] 作為優(yōu)選,步驟(2)中的像素分類方法如下:
[0014] 把目標(biāo)像素投影到光源空間,并找到目標(biāo)像素所在的紋素,通過線性陰影圖獲取 該紋素中心和四個(gè)角上深度采樣點(diǎn);
[0015] 求取四個(gè)角上的深度采樣點(diǎn)的值的平均值,判斷得到的結(jié)果是否與像素中心存儲(chǔ) 的深度值相等,如果兩者相等,該目標(biāo)像素為輪廓線像素;
[0016] 否則,該目標(biāo)像素為非輪廓線像素。
[0017] 在比較這兩個(gè)值的時(shí)候,需要設(shè)置一個(gè)極小的容忍誤差來避免浮點(diǎn)數(shù)計(jì)算過程中 的誤差。
[0018] 作為優(yōu)選,步驟(3)中的線性插值計(jì)算深度值時(shí),對于像素P,可以通過像素P的紋 理坐標(biāo)確定像素P所在三角形區(qū)域,結(jié)合所述三角形區(qū)域的三個(gè)頂點(diǎn)V()、Vl和V2的紋理坐 標(biāo),計(jì)算像素P相對于所述三角形區(qū)域的重心坐標(biāo)(u,v,《):
[0020] 再計(jì)算像素P的遮擋物的深度值:
[0021] Pocc.z=u?V〇.z+v?z+co?V2.z,
[0022] 公式中:
[0023] 表示像素P的遮擋物,
[0024] z表示深度值,
[0025] (P.x,P.y)表示為像素P在光源空間的二維投影坐標(biāo),
[0026] V。、VJPV2為所屬的三角形的三個(gè)頂點(diǎn),
[0027] V。.x,V。.y,Vpx,Vpy,V2.x,V2.y分別表示V。、VjPlV2的二維紋理坐標(biāo),
[0028] V。.z,Vpz,V2.z分別表示V。、VJPV2的深度值。
[0029] 在線性陰影圖中,每個(gè)原始陰影圖的紋素被采樣點(diǎn)自然劃分為了四個(gè)三角形區(qū) 域。當(dāng)一個(gè)像素P投影到陰影圖上時(shí),通過它的紋理坐標(biāo)確定它位于哪個(gè)紋素的哪個(gè)三角 形區(qū)域內(nèi)。結(jié)合三角形的三個(gè)頂點(diǎn)%、%和V2的紋理坐標(biāo),求得該像素相對于該三角形的 重心坐標(biāo)(u,v,《)。然后P點(diǎn)的遮擋物的深度值可以由公式線性插值得到。
[0030] 作為優(yōu)選,步驟(3)中去像素化輪廓線重建方法包括依次進(jìn)行的子像素形狀重塑 和B樣條輪廓線擬合兩個(gè)步驟。
[0031] 子像素形狀重塑:
[0032] 針對當(dāng)前輪廓線像素的深度采樣點(diǎn),首先判斷它和八鄰域的相鄰深度采樣值的連 續(xù)關(guān)系,如果兩個(gè)深度值之間的差距小于給定的閾值,則表示兩者之間具有幾何連續(xù)性;反 之,則兩者之間沒有幾何連續(xù)性。
[0033] 這一步生成的結(jié)果被稱為相似性圖。
[0034] 然后將相似性圖中的每一條邊視為兩個(gè)半邊,兩個(gè)半邊分別屬于鄰接的深度采樣 點(diǎn)。接著以每一個(gè)深度采樣點(diǎn)和其所有相鄰的半邊為一個(gè)單位,對相似性圖進(jìn)行voronoi 剖分。
[0035] 剖分后的每個(gè)區(qū)域?yàn)殡x該區(qū)域的采樣點(diǎn)及其半邊最近的點(diǎn)的集合,剖分輪廓線像 素的線段組成了所估計(jì)出輪廓線大致位置。
[0036] 為了消除Voronoi圖中的一些奇異情況,簡化剖分結(jié)果,把Voronoi圖中度為 2 (有兩個(gè)鄰居節(jié)點(diǎn))的節(jié)點(diǎn)都去掉并連接該節(jié)點(diǎn)原本的兩個(gè)鄰居節(jié)點(diǎn)。
[0037] 簡化后的結(jié)果中,Voronoi單元(剖分后的每個(gè)區(qū)域)的頂點(diǎn)即為下一步B樣條 擬合過程中的B樣條經(jīng)過的點(diǎn),而不是B樣條控制頂點(diǎn)。
[0038] B樣條輪廓線擬合:
[0039] 去像素化方法使用二次B樣條曲線來擬合出光滑的輪廓線。
[0040] 對于每個(gè)陰影圖(線性陰影圖)紋素,在通過上述步驟計(jì)算出各Voronoi單元之 后,每個(gè)陰影圖紋素內(nèi)都有兩個(gè)Voronoi單元的頂點(diǎn),使用這兩個(gè)頂點(diǎn)和它們的兩個(gè)相鄰 頂點(diǎn)作為B樣條擬合輪廓線需要經(jīng)過的點(diǎn)。
[0041] 當(dāng)節(jié)點(diǎn)出現(xiàn)T頂點(diǎn)或X頂點(diǎn)時(shí),即在找兩個(gè)相鄰頂點(diǎn)時(shí)遇到了有歧義的情況,這時(shí) 選擇鄰居頂點(diǎn)方向和深度梯度方向最接近垂直的鄰居頂點(diǎn)。
[0042] 本發(fā)明方法中的B樣條選取均勻節(jié)點(diǎn)向量,次數(shù)為2。然后我們可以通過該B樣條 曲線經(jīng)過的四個(gè)點(diǎn),可以求得B樣條曲線的表達(dá)式,確定了該紋素附近的最終估計(jì)出的輪 廓線位置。
[0043] 與現(xiàn)有技術(shù)相比,本發(fā)明具有下述優(yōu)點(diǎn):
[0044] 本發(fā)明提出了一種去像素化輪廓線重建的線性陰影圖方法,它基于陰影圖對深度 值進(jìn)行線性重構(gòu),為了保證陰影輪廓線的光滑,還采用了去像素化的輪廓線重建的方法作 為補(bǔ)充,且本發(fā)明僅僅使用兩倍于原始陰影圖的存儲(chǔ)開銷,就能有效地減弱陰影圖方法中 的走樣現(xiàn)象。
【附圖說明】
[0045] 圖1為本發(fā)明實(shí)施例的基本流程示意圖;
[0046] 圖2為本發(fā)明實(shí)施例的陰影圖生成示意圖;
[0047] 圖3為本發(fā)明實(shí)施例的去像素化輪廓線重建示意圖。
【具體實(shí)施方式】
[0048] 如圖1所示,本發(fā)明采用的技術(shù)方案為:一種去像素化輪廓線重建的線性陰影圖 方法,其實(shí)施步驟如下:
[0049] 1)從光源空間繪制場景,存儲(chǔ)像素中心的深度值為第一陰影圖,在x和y方向偏移 半個(gè)紋素大小得到第二張陰影圖,第一陰影圖和第二張陰影圖構(gòu)成線性陰影圖。
[0050] 該陰影圖生成方法與傳統(tǒng)陰影圖方法類似,區(qū)別即多存儲(chǔ)一張相同分辨率、位置 偏移半個(gè)紋素大小的陰影圖。本發(fā)明陰影圖的采樣位置為每個(gè)紋素的中心和角點(diǎn),這種采 樣方式相對于傳統(tǒng)陰影圖方法來說其實(shí)是兩倍的采樣數(shù)目,即一張?jiān)缄幱皥D加上一張偏 移半個(gè)紋素距離的相同分辨率的陰影圖(圖2中(a)部分)。如圖2中(b)部分所示,線性 重構(gòu)的一維信號會(huì)相對傳統(tǒng)陰影圖更接近于