董文 譙石
摘要:陰影映射是通過計算機圖形的模擬,在3D場景中加入陰影的過程。在實際的應用中,需要解決該算法產生走樣的問題。本文采用一種基于入射角的陰影映射算法,有效解決了陰影生成的走樣問題。
關鍵詞:陰影映射;入射角;反走樣
中圖分類號:TP391 文獻標識碼:A 文章編號:1007-9416(2018)09-0099-02
1 引言
陰影映射是通過計算機圖形的模擬,在3D場景中產生陰影的效果。生成陰影有很多算法,其中體積陰影算法、陰影映射算法是兩種比較常用的算法。體積陰影算法采用模板緩沖的輪廓數量進行陰影生成,其優點是像素銳利,陰影精確,適合精確表現動態光陰場景;缺點是這種方法需要進行過多的過度填充和勾畫,計算機處理器計算量大,而且需要處理很多特例。陰影映射是將像素與以紋理形式保存的光照深度緩沖區或者深度圖像比較,通過這種方式計算像素是否處于光源照射范圍之內,從而生成陰影。這種方法是從光線角度還原場景,再投射到所有的陰影接收器上,其優點是每束光線單獨進行陰影映射,所有物體上采用同一繪制,能夠充分發揮圖形硬件的能力,避免了體積陰影算法高填充率的缺陷。但是這種方法也存在其不足,圖像生成的質量局限于陰影映射的清晰度,一個紋理中很難適用于每一物體,生成圖像易產生走樣。因此,我們使用一種基于入射角的陰影映射算法,有效地解決陰影走樣的問題。
2 陰影映射算法實現過程
陰影映射采用的是兩次成像Z緩沖陰影運算法則,從光源計算場景的離散可見度以決定一個像素是否有陰影。這種方法只需要兩個通道,通道1從光源的角度再現場景、每一像素只保存z深度不保存顏色,Z-緩沖器將所含內容進行呈現成像,如果亮度越大,那么離光的距離越遠;通道2則從眼睛的視角再現場景,將眼睛能看到的每一點P,轉換成光源空間, 當該點位于光線和相機之間的空間,對于給定的一個點而言,我們比較比較投影到該點的陰影以及該點到光源的距離,來計算該點是否在陰影中[1]。
3 入射角方法反走樣處理
由于陰影貼圖受限于解析度,在距離光源比較遠的情況下,多個片元可能從深度貼圖的同一個值中去采樣,因此陰影映射算法很容易在陰影邊界出現粗糙的鋸齒狀走樣現象。我們是通過一個放置在3D場景中的攝像機來觀察場景中的對象,攝像機所能看到的視野的大小范圍圍成了一個標準的平截頭體,我們以攝像機和光方向之間的入射角為基礎,通過調整攝像機和光照方向的入射角,有效解決了陰影映射算法的走樣問題[2-3]。
首先計算攝像機透視方向和光線方向之間的入射角,隨入射角的增加從矩形向不等邊四邊形轉換,當光線和攝像機方向垂直的時候(最小入射角)此時正好得到一個不等邊多邊形,側邊多數是傾斜的;當光線和攝像機方向平行的時候(最大入射角)此時正好得到一個矩形,側邊基本上平行。此時,矩形也在大小上有輕微的縮小,因為當他們的方向平行的時候,平截頭體的交匯會變小[4]。相機、光照與入射角關系圖1所示。
然后計算攝像機透視方向和光線方向之間的入射角,隨入射角的增加從矩形到不等邊四邊形進行轉換,矩形在大小上有輕微的縮水,因為當他們的方向平行的時候,平截頭體的交匯會變小。這種方法速度快,方法簡單,就連出現平行平截頭體也能得出好的結果,分辨率的轉換是平滑且漸進的,并且會隨攝像機方向的改變而改變[5]。隨入射角增加從矩形到不等邊四邊形變換圖2所示。
4 結語
本文采用一種基于入射角的陰影映射技術,通過調整攝像機和光照方向的入射角大小改善陰影映射算法中的鋸齒走樣問題,圖3所示是普通陰影映射的結果,可以看到其陰影邊界存在著鋸齒走樣現象,圖4所示是采用了入射角方法之后進行映射的結果,走樣明顯得到了改善。
參考文獻
[1]謝依妨,楊紅雨.基于遮擋區間映射的軟陰影的研究與實現[J].計算機工程與設計,2015,(3):687-692.
[2]曹家樂,馮月萍.一種改進的陰影映射算法[J].吉林大學學報(理學版),2018,(1):89-94.
[3]湯翾.基于投影平面物體排序的陰影算法的研究[D].西華大學,2018.
[4]周國民,盧滌非,張其前.一種梯形結構的軟陰影錐生成方法[J].浙江大學學報(理學版),2007,(6):628-632.
[5]劉列明,吳恩華.一種基于點光源的三維陰影的實時生成算法[J].軟件學報,2000,(6):785-790.