曹家樂, 馮月萍
(吉林大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 長(zhǎng)春 130012)
陰影是一種常見的光照現(xiàn)象, 通常是指由于光沿直線傳播被不透明物體阻擋而產(chǎn)生的黑暗區(qū)域. 陰影的渲染能顯著增強(qiáng)虛擬現(xiàn)實(shí)場(chǎng)景的真實(shí)感[1-6].
目前已有多種陰影渲染算法, 這些算法主要分為三類, 即全局光照算法、 陰影映射算法和陰影體算法[7-11]. 其中以光線追蹤為代表的全局光照算法雖然效果逼真, 但計(jì)算量巨大, 很難進(jìn)行實(shí)時(shí)繪制[12-13]. 陰影映射算法和陰影體算法可視為全局光照方法的近似方法. 陰影體算法由于對(duì)場(chǎng)景中的物體幾何復(fù)雜程度有嚴(yán)重的依賴, 且對(duì)場(chǎng)景中物體形狀的構(gòu)成有嚴(yán)格限制, 因此適用性較差. 而陰影映射算法[14]對(duì)場(chǎng)景復(fù)雜度幾乎沒有任何限制, 并且原理簡(jiǎn)單, 繪制速度快, 已逐漸成為該領(lǐng)域的研究熱點(diǎn). 研究表明, 在深度紋理中儲(chǔ)存除深度外的更多信息可有效提升陰影渲染的質(zhì)量[15], 并且通過濾波技術(shù)過濾陰影的邊緣, 可得到軟陰影效果[16-18]. 文獻(xiàn)[19]改善了陰影映射算法存在的誤差問題.
傳統(tǒng)陰影映射算法在每幀中均對(duì)場(chǎng)景中的所有物體進(jìn)行兩遍繪制, 第一遍繪制計(jì)算場(chǎng)景中物體的深度并生成一張深度紋理, 第二遍繪制渲染場(chǎng)景并計(jì)算陰影. 但在一個(gè)復(fù)雜場(chǎng)景中, 有些物體是靜止的, 靜止物體的深度信息不變, 所以并不需要在每幀的第一遍繪制中都計(jì)算其深度. 基于該思想, 本文提出將傳統(tǒng)算法中的一張深度紋理分成動(dòng)態(tài)深度紋理和靜態(tài)深度紋理兩張深度紋理. 實(shí)時(shí)監(jiān)測(cè)場(chǎng)景中各物體的運(yùn)動(dòng)狀態(tài), 動(dòng)態(tài)深度紋理記錄場(chǎng)景中運(yùn)動(dòng)物體的深度信息, 靜態(tài)深度紋理記錄靜止物體的深度信息, 在算法的第一遍繪制中只需更新動(dòng)態(tài)深度紋理的深度信息, 不需重新計(jì)算靜態(tài)深度紋理的信息, 在算法的第二遍繪制中通過動(dòng)態(tài)深度紋理和靜態(tài)深度紋理共同計(jì)算陰影. 實(shí)驗(yàn)結(jié)果表明, 該方法相比于傳統(tǒng)陰影映射算法, 減少了深度信息的計(jì)算, 提高了算法的運(yùn)行效率.
陰影映射算法[10]是實(shí)時(shí)渲染領(lǐng)域最常用的陰影渲染算法, 其基本原理是以光源為視點(diǎn)可看到場(chǎng)景中所有被照亮的部分, 而光源看不到的區(qū)域則是陰影區(qū)域. 該方法主要分為兩步:
1) 以光源位置為視點(diǎn)對(duì)整個(gè)場(chǎng)景進(jìn)行繪制. 記錄場(chǎng)景中每個(gè)可見像素的深度, 這些深度信息代表了某像素上距離光源最近物體與光源之間的距離. 將這些深度信息儲(chǔ)存后構(gòu)成深度紋理.
圖1 傳統(tǒng)陰影映射算法原理Fig.1 Principle of traditional shadow mapping algorithm
2) 從真實(shí)視點(diǎn)的角度繪制場(chǎng)景, 原理如圖1所示. 對(duì)于繪制的每個(gè)點(diǎn), 計(jì)算其距離光源的距離D2, 并將D2與第一步繪制中生成的深度貼圖中相應(yīng)的深度值D1進(jìn)行比較, 若D2>D1, 則表示該點(diǎn)與光源之間還有其他物體, 該點(diǎn)位于陰影中; 否則, 該點(diǎn)不在陰影中.
用傳統(tǒng)陰影映射算法對(duì)場(chǎng)景進(jìn)行實(shí)時(shí)渲染, 需要在每幀中對(duì)場(chǎng)景進(jìn)行兩次繪制. 第一次繪制生成整個(gè)場(chǎng)景的深度紋理, 第二次繪制計(jì)算整個(gè)場(chǎng)景的陰影. 如果場(chǎng)景中某個(gè)物體是靜止的, 則其深度信息保持不變, 不需要在每幀中都對(duì)該物體計(jì)算深度信息. 傳統(tǒng)陰影映射算法的一個(gè)明顯缺陷就是只使用了一種深度紋理, 對(duì)場(chǎng)景中的所有物體均采用相同的處理方式, 而未對(duì)不同運(yùn)動(dòng)狀態(tài)的物體分開處理. 無(wú)論場(chǎng)景中的物體深度信息是否發(fā)生改變, 傳統(tǒng)算法都需要在每幀中重新生成整個(gè)場(chǎng)景的深度紋理, 從而降低了算法的效率.
本文提出動(dòng)態(tài)深度紋理和靜態(tài)深度紋理的概念. 將傳統(tǒng)算法中的一張深度紋理分成動(dòng)態(tài)深度紋理和靜態(tài)深度紋理兩張紋理. 動(dòng)態(tài)深度紋理用于儲(chǔ)存當(dāng)前場(chǎng)景中處于運(yùn)動(dòng)狀態(tài)物體的深度信息, 該紋理需要在每幀中動(dòng)態(tài)生成; 靜態(tài)深度紋理用于儲(chǔ)存當(dāng)前場(chǎng)景中處于靜止?fàn)顟B(tài)物體的深度信息, 該紋理不需要在每幀中動(dòng)態(tài)生成, 而是在某一幀中生成靜態(tài)深度紋理, 然后在之后的若干幀中重復(fù)使用該深度紋理. 如圖2所示的場(chǎng)景中, 箱子是靜止的物體, 而人物模型是運(yùn)動(dòng)的物體, 在傳統(tǒng)算法中, 需要用同一個(gè)深度紋理記錄整個(gè)場(chǎng)景中的深度信息. 將深度紋理以明暗形勢(shì)顯示出來(lái), 則傳統(tǒng)算法的深度紋理如圖3所示, 本文方法提出的靜態(tài)深度紋理和動(dòng)態(tài)深度紋理分別如圖4和圖5所示.
圖2 虛擬場(chǎng)景的陰影效果Fig.2 Shadow effect of virtual scene
圖3 傳統(tǒng)算法的深度紋理Fig.3 Depth texture of traditional algorithm
圖4 靜態(tài)深度紋理Fig.4 Static depth texture
圖5 動(dòng)態(tài)深度紋理Fig.5 Dynamic depth texture
圖6 本文算法原理Fig.6 Principle of algorithm in this paper
一個(gè)復(fù)雜的虛擬現(xiàn)實(shí)場(chǎng)景中, 物體會(huì)有靜止和運(yùn)動(dòng)兩種狀態(tài), 并且有的物體會(huì)在兩種運(yùn)動(dòng)狀態(tài)中不斷切換, 所以需要?jiǎng)討B(tài)地檢測(cè)場(chǎng)景中物體的運(yùn)動(dòng)狀態(tài), 并根據(jù)運(yùn)動(dòng)狀態(tài)對(duì)物體進(jìn)行分類. 本文采用的檢測(cè)方法為: 記錄場(chǎng)景中每個(gè)物體在世界坐標(biāo)系中的位置, 并在每幀的渲染中檢測(cè)各物體的位置. 如果某物體的位置信息發(fā)生變化, 則表示該物體處于運(yùn)動(dòng)狀態(tài), 否則表示該物體處于靜止?fàn)顟B(tài). 該方法需要實(shí)時(shí)更新場(chǎng)景中物體的位置信息. 通過對(duì)場(chǎng)景中所有物體位置的動(dòng)態(tài)監(jiān)測(cè)和更新, 實(shí)現(xiàn)對(duì)物體運(yùn)動(dòng)狀態(tài)進(jìn)行動(dòng)態(tài)的分類. 如果場(chǎng)景中的物體未發(fā)生運(yùn)動(dòng)狀態(tài)的變化, 則不需更新靜態(tài)深度紋理, 只需計(jì)算動(dòng)態(tài)深度紋理的深度信息; 如果場(chǎng)景中的物體發(fā)生了運(yùn)動(dòng)狀態(tài)的變化, 則需同時(shí)更新動(dòng)態(tài)深度紋理和靜態(tài)深度紋理的深度信息. 其中運(yùn)動(dòng)狀態(tài)的變化可分為兩類: 如果某物體從運(yùn)動(dòng)狀態(tài)轉(zhuǎn)化為靜止?fàn)顟B(tài), 則將該物體的深度信息從動(dòng)態(tài)深度紋理中刪除, 并在靜態(tài)深度紋理中添加該物體的深度信息; 如果某物體從靜止?fàn)顟B(tài)轉(zhuǎn)化為運(yùn)動(dòng)狀態(tài), 則將該物體的深度信息從靜態(tài)深度紋理中刪除, 并在動(dòng)態(tài)深度紋理中添加該物體的深度信息, 此時(shí)該物體需要在每幀中重新計(jì)算深度信息.
實(shí)時(shí)檢測(cè)場(chǎng)景中物體的運(yùn)動(dòng)狀態(tài)會(huì)影響程序的性能. 為了減少運(yùn)動(dòng)狀態(tài)檢測(cè)對(duì)程序性能的影響, 如果虛擬場(chǎng)景中的某些物體運(yùn)動(dòng)狀態(tài)始終不變, 則可根據(jù)實(shí)際情況減少需要檢測(cè)的物體個(gè)數(shù). 例如, 在某些電子游戲的城市場(chǎng)景中, 街道上的樓房始終是靜止不動(dòng)的, 則不需要在每幀中去檢測(cè)其運(yùn)動(dòng)狀態(tài).
本文算法原理如圖6所示. 計(jì)算某個(gè)像素是否處于陰影中, 需要先求出在某個(gè)像素上動(dòng)態(tài)深度紋理記錄的深度值D1和靜態(tài)深度紋理記錄的深度值D2的最小值, 記為D3, 即D3=min{D1,D2}; 再計(jì)算該像素與光源的距離, 記為D. 如果D>D3, 則該像素位于陰影中, 否則該像素不位于陰影中.
在生成深度紋理時(shí), 對(duì)動(dòng)態(tài)物體和靜態(tài)物體分別生成動(dòng)態(tài)深度紋理和靜態(tài)深度紋理, 但在計(jì)算陰影時(shí), 不能只對(duì)某種運(yùn)動(dòng)狀態(tài)的物體單獨(dú)使用某種深度紋理, 而要將兩種深度紋理求最小值再計(jì)算陰影. 這是因?yàn)椴煌N運(yùn)動(dòng)狀態(tài)的物體可能會(huì)存在相互遮擋的關(guān)系, 即某種運(yùn)動(dòng)狀態(tài)的物體可能處于另一種運(yùn)動(dòng)狀態(tài)物體的陰影中. 如果對(duì)靜止的物體只應(yīng)用靜態(tài)深度紋理計(jì)算陰影, 則會(huì)導(dǎo)致運(yùn)動(dòng)物體所產(chǎn)生的影子無(wú)法投射到靜止的物體上.
本文算法對(duì)靜止物體只計(jì)算一次深度紋理, 之后重復(fù)使用, 直到物體運(yùn)動(dòng)狀態(tài)分布發(fā)生變化; 對(duì)于運(yùn)動(dòng)物體, 在每幀中都計(jì)算其深度紋理. 因此, 本文算法的運(yùn)算效率受場(chǎng)景中物體運(yùn)動(dòng)狀態(tài)分布的影響. 處于靜止?fàn)顟B(tài)的物體越多, 本文算法的運(yùn)算效率越高, 對(duì)傳統(tǒng)算法的優(yōu)化越明顯. 在極端情況下, 如果場(chǎng)景中物體始終處于靜止?fàn)顟B(tài), 則本文算法幾乎省去了傳統(tǒng)算法中的第一步操作, 極大提升了運(yùn)算效率. 如果場(chǎng)景中所有物體都一直保持運(yùn)動(dòng)狀態(tài), 則本文算法很難得到效率上的優(yōu)化, 而且由于檢測(cè)場(chǎng)景運(yùn)動(dòng)狀態(tài)對(duì)效率的影響, 該算法的運(yùn)算速度甚至?xí)缘陀趥鹘y(tǒng)陰影映射算法. 但根據(jù)對(duì)各種虛擬現(xiàn)實(shí)場(chǎng)景的分析可知, 在絕大多數(shù)大規(guī)模虛擬現(xiàn)實(shí)場(chǎng)景中, 都會(huì)出現(xiàn)一定比例的靜止物體, 所有物體均處于運(yùn)動(dòng)狀態(tài)的情況很少. 本文算法的算法流程如圖7所示.
圖7 算法流程Fig.7 Flow chart of algorithm
用OpenGL 3.3作為圖形程序接口, 用Visual Studio2013作為開發(fā)工具, 在Windows7操作系統(tǒng)上實(shí)現(xiàn)本文算法. 該實(shí)驗(yàn)的硬件環(huán)境為Intel i3處理器, 4 GB內(nèi)存, NVIDIA GeForce GT620顯卡, 1 GB顯存.
由于本文算法對(duì)場(chǎng)景中靜態(tài)物體和動(dòng)態(tài)物體生成不同的深度紋理, 而在一個(gè)復(fù)雜場(chǎng)景中物體的靜止和運(yùn)動(dòng)狀態(tài)可能會(huì)不斷變化, 所以為了驗(yàn)證本文算法的效率, 需要模擬出運(yùn)動(dòng)狀態(tài)不斷變化的特征. 因此實(shí)驗(yàn)中設(shè)置了一個(gè)函數(shù)來(lái)指定場(chǎng)景中物體的運(yùn)動(dòng)和靜止?fàn)顟B(tài), 記為函數(shù)P. 函數(shù)P通過生成隨機(jī)數(shù)指定某些物體運(yùn)動(dòng), 而另一些物體靜止. 每隔一段時(shí)間會(huì)調(diào)用一次該函數(shù), 通過這種方式模擬一個(gè)不斷變化的虛擬場(chǎng)景.
當(dāng)渲染不同的虛擬場(chǎng)景時(shí), 場(chǎng)景中物體運(yùn)動(dòng)狀態(tài)的分布會(huì)不同. 為了檢測(cè)本文算法應(yīng)對(duì)各種虛擬場(chǎng)景的運(yùn)行效率, 為函數(shù)P設(shè)置一個(gè)參數(shù)K表示場(chǎng)景中物體運(yùn)動(dòng)狀態(tài)的分布.K值表示該場(chǎng)景中處于運(yùn)動(dòng)狀態(tài)物體的面片數(shù)占所有物體面片數(shù)的百分?jǐn)?shù),K∈[0,1],K=0表示該場(chǎng)景中所有物體都是靜止的,K=1表示該場(chǎng)景中所有物體都是運(yùn)動(dòng)的.
實(shí)驗(yàn)分為兩部分. 第一部分實(shí)驗(yàn)中, 檢測(cè)不同場(chǎng)景復(fù)雜度下本文算法的運(yùn)行效率. 實(shí)驗(yàn)中設(shè)K=0.5, 通過改變場(chǎng)景中三角形面片數(shù)量來(lái)改變場(chǎng)景的復(fù)雜度, 并對(duì)每個(gè)場(chǎng)景分別應(yīng)用傳統(tǒng)陰影映射算法和本文改進(jìn)算法, 記錄每次實(shí)驗(yàn)的渲染幀數(shù), 實(shí)驗(yàn)結(jié)果列于表1. 由表1可見, 本文算法在一個(gè)較復(fù)雜的場(chǎng)景中, 在運(yùn)動(dòng)物體和靜止物體數(shù)量相近的情況下, 能顯著提升場(chǎng)景的陰影渲染速度.
第二部分實(shí)驗(yàn)檢測(cè)在場(chǎng)景復(fù)雜度相同的條件下, 場(chǎng)景運(yùn)動(dòng)狀態(tài)分布不同時(shí), 算法運(yùn)行效率的變化情況. 該實(shí)驗(yàn)采用如圖8所示的一個(gè)實(shí)際項(xiàng)目中的真實(shí)場(chǎng)景: 若干輛汽車在街道中穿行. 在實(shí)驗(yàn)中基于不同的K值設(shè)置運(yùn)動(dòng)汽車和靜止汽車的數(shù)量, 然后檢測(cè)場(chǎng)景的渲染速度. 隨著K值(運(yùn)動(dòng)物體所占百分?jǐn)?shù))的變化, 即處于運(yùn)動(dòng)狀態(tài)汽車數(shù)量的變化, 陰影渲染速度的變化如圖9所示.
表1 當(dāng)K=0.5時(shí)傳統(tǒng)算法與改進(jìn)算法的渲染速度對(duì)比
圖8 3D項(xiàng)目中街道上的汽車場(chǎng)景Fig.8 Scene of cars from 3D project on street
圖9 在不同K值下傳統(tǒng)算法和改進(jìn)算法的渲染速度Fig.9 Rendering speed of traditional algorithm and improved algorithm at different K values
由圖9可見, 傳統(tǒng)陰影映射算法在每幀中都為整個(gè)場(chǎng)景生成一張深度紋理, 所以其運(yùn)行效率和K值無(wú)關(guān). 而本文算法將運(yùn)動(dòng)物體和靜止物體區(qū)別對(duì)待, 當(dāng)K值改變時(shí), 算法的運(yùn)行效率會(huì)發(fā)生改變. 隨著K值的增加, 本文算法的運(yùn)行效率呈線性遞減趨勢(shì). 當(dāng)K值較小時(shí), 本文算法的運(yùn)行效率明顯高于傳統(tǒng)陰影映射算法. 由于本文算法需要額外檢測(cè)場(chǎng)景中物體的運(yùn)動(dòng)和靜止?fàn)顟B(tài), 當(dāng)K值增大到一定程度時(shí), 本文算法的運(yùn)行效率會(huì)略低于傳統(tǒng)算法. 在本文實(shí)驗(yàn)所繪制的虛擬場(chǎng)景中, 當(dāng)K≤0.8時(shí), 本文算法的運(yùn)行效率優(yōu)于傳統(tǒng)陰影映射算法. 研究表明, 當(dāng)渲染復(fù)雜場(chǎng)景時(shí), 場(chǎng)景中運(yùn)動(dòng)物體所占的百分?jǐn)?shù)(K值)趨近于1屬于極個(gè)別情況, 即本文算法在絕大多數(shù)情況下運(yùn)行效率都優(yōu)于傳統(tǒng)算法.
綜上所述, 本文提出了一種改進(jìn)的陰影映射算法, 通過使用兩種不同類型的深度紋理(即動(dòng)態(tài)深度紋理和靜態(tài)深度紋理)計(jì)算場(chǎng)景的陰影. 根據(jù)運(yùn)動(dòng)狀態(tài)對(duì)場(chǎng)景中物體進(jìn)行分類, 對(duì)運(yùn)動(dòng)物體和靜止物體分開處理, 僅實(shí)時(shí)更新動(dòng)態(tài)深度紋理, 靜態(tài)深度紋理在某一幀中生成一次, 并在之后的若干幀中重復(fù)使用, 改進(jìn)了傳統(tǒng)算法中對(duì)深度信息不改變靜止物體仍要實(shí)時(shí)計(jì)算深度信息的不足. 實(shí)驗(yàn)結(jié)果表明, 對(duì)于絕大多數(shù)復(fù)雜場(chǎng)景的渲染, 本文算法的渲染速度都明顯優(yōu)于傳統(tǒng)陰影映射算法.
[1] 張威巍. 虛擬環(huán)境中陰影的實(shí)時(shí)繪制算法研究 [D]. 鄭州: 解放軍信息工程大學(xué), 2009. (ZHANG Weiwei. Research on Real-Time Rendering Algorithms of Shading and Shadows in Virtual Environment [D]. Zhengzhou: PLA Information Engineering University, 2009.)
[2] 沈?yàn)t. 三維場(chǎng)景實(shí)時(shí)陰影算法的研究與實(shí)現(xiàn) [D]. 重慶: 重慶大學(xué), 2006. (SHEN Xiao. The Research and Implementation of Real-Time Shadow Algorithms in 3D Scene [D]. Chongqing: Chongqing University, 2006.)
[3] 李凌春. 面向游戲與動(dòng)畫應(yīng)用的陰影技術(shù)研究 [D]. 上海: 上海交通大學(xué), 2008. (LI Lingchun. Soft Shadow Rendering for 3D Games and Animations [D]. Shanghai: Shanghai Jiaotong University, 2008.)
[4] 蔣偉, 李小龍, 劉亞威. 基于有理數(shù)階偏微分的圖像增強(qiáng)新模型 [J]. 四川大學(xué)學(xué)報(bào)(自然科學(xué)版), 2016: 53(1): 47-53. (JIANG Wei, LI Xiaolong, LIU Yawei. Image Enhancement New Model Based on Rational-Order Partial Differential [J]. Journal of Sichuan University (Natural Science Edition), 2016: 53(1): 47-53.)
[5] 夏欣, 葛龍, 孟宏源. 基于改進(jìn)CV的圖像分割 [J]. 四川大學(xué)學(xué)報(bào)(自然科學(xué)版), 2017, 54(6): 1185-1189. (XIA Xin, GE Long, MENG Hongyuan. Image Segmentation Based on an Improved CV Model [J]. Journal of Sichuan University (Natural Science Edition), 2017, 54(6): 1185-1189.)
[6] 張德發(fā), 肜麗. 多光源圖像細(xì)化和細(xì)節(jié)增強(qiáng)的協(xié)同圖像處理算法研究 [J]. 重慶郵電大學(xué)學(xué)報(bào)(自然科學(xué)版), 2014, 26(2): 260-264. (ZHANG Defa, RONG Li. Multi-light Source Image Defined and Enhanced Image Processing Algorithms [J]. Journal of Chongqing University of Posts and Telecommunications (Natural Science Edition), 2014, 26(2): 260-264.)
[7] 過潔, 徐曉旸, 潘金貴. 基于陰影圖的陰影生成算法研究現(xiàn)狀 [J]. 計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào), 2010, 22(10): 580-590. (GUO Jie, XU Xiaoyang, PAN Jingui. Present Status of Shadow Generation Algorithms Based on Shadow Maps [J]. Journal of Computer—Aided Design & Computer Graphics, 2010, 22(10): 580-590.)
[8] 朱山. 基于OpenGL的實(shí)時(shí)陰影算法研究 [D]. 武漢: 華中科技大學(xué), 2011. (ZHU Shan. The Research of Real-Time Shadow Algorithms Based on OpenGL [D]. Wuhan: Huazhong University of Science and Technology, 2011.)
[9] 劉力. 實(shí)時(shí)陰影渲染 [D]. 上海: 上海交通大學(xué), 2008. (LIU Li. Real Time Shadow Rendering [D]. Shanghai: Shanghai Jiaotong University, 2008.)
[10] 吳躍. 基于GPU的實(shí)時(shí)陰影算法研究 [D]. 蘇州: 蘇州大學(xué), 2009. (WU Yue. Research on Real-Time Shadow Algorithm Based on GPU [D]. Suzhou: Soochow University, 2009.)
[11] 周毓. 游戲中實(shí)時(shí)渲染的研究與應(yīng)用 [D]. 北京: 北京交通大學(xué), 2013. (ZHOU Yu. Research and Application of Real-Time Rendering in the Game [D]. Beijing: Beijing Jiaotong University, 2013.)
[12] Cook R L, Porter T, Carpenter L. Distributed Ray Tracing [J]. ACM SIGGRAPH Computer Graphics, 1984, 18(3): 137-145.
[13] Crow F C. Shadow Algorithms for Computer Graphics [J]. ACM SIGGRAPH Computer Graphics, 1977, 11(2): 242-248.
[14] Williams L. Casting Curved Shadows on Curved Surfaces [J]. ACM SIGGRAPH Computer Graphics, 1978, 12(3): 270-274.
[15] Peters C, Klein R. Moment Shadow Mapping [C]//19th ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games (i3D). New York: ACM, 2015: 7-14.
[16] Selgrad K, Dachsbacher C. Filtering Multi-layer Shadow Maps for Accurate Soft Shadows [J]. Computer Graphics Forum, 2015, 34(1): 205-215.
[17] Liktor G, Spassov S. Stochastic Soft Shadow Mapping [J]. Computer Graphics Forum, 2015, 34(4): 1-11.
[18] Schw?rzler M, Luksch C, Scherzer D, et al. Fast Percentage Closer Soft Shadows Using Temporal Coherence[C]//Proceedings of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games. New York: ACM, 2013: 79-86.
[19] Lecocq P, Marvie J E, Sourimant G, et al. Sub-pixel Shadow Mapping [C]//Proceedings of the 18th Meeting of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games. New York: ACM, 2014: 103-110.