轉載:小道 git 透視陰影貼圖(Perspective Shadow Maps, PSMs)是由Stamminger和Drettakis在 github SIGGRAPH 2002上提出的一種陰影貼圖(Shadow Maps)流派的方法。 算法 透視投影貼圖方法的基本思想是,爲了減小或消除陰影貼圖的失真走樣,對投射到大像素區域的物體取最大的陰影貼圖紋素密度。 app 這章提出了一種優化透視陰影貼圖(Perspective Shadow Maps)方法的新思路,對其三種缺陷都一一進行了改進。 post 【核心要點】 測試 這章首先講到動態陰影的建立,目前主要有兩個算法流派: 優化
陰影體和陰影貼圖算法之間的不一樣之處在於,是涉及到物體空間(object space)仍是圖像空間(image space)。 spa
透視陰影貼圖(Perspective Shadow Maps, PSMs)是由Stamminger和Drettakis在SIGGRAPH 2002上提出的一種陰影貼圖(Shadow Maps)流派的方法,經過使用在投射後空間(post-projective space)中的陰影貼圖來去除其中的走樣,而在投射後空間中,全部近處的物體都比遠處的大。不幸的是,使用原始算法很困難,由於只有要某些狀況下才能正常工做。 3d 如下是透視陰影映射算法的三個主要問題和解決方案: code 1、當光源在攝像機後面的時候,有一個虛擬的攝像機錐體。若在錐體內保持全部潛在的陰影投射體,陰影質量就會變得不好。 解決方案:是對光源矩陣使用特別的投射變換,由於投射後空間能夠使用某些在一般空的世界空間中不能作的投射技巧。它使咱們能夠創建特殊的投射矩陣,能夠看作"比無限遠更遠"。 2、光源在攝像機空間中的位置對陰影質量影響很大,對於垂直的方向光,徹底沒有走樣問題,可是當光源朝向攝像機並迎面靠近它時,陰影映射走樣就很嚴重。 解決方案:把整個單位立方體保持在一個陰影貼圖紋理中,對於遇到的問題,有兩個辦法,每一個辦法僅解決問題的一部分:單位立方體裁剪法,把光源攝像機對準單位立方體的必要部分;立方體映射法,使用多個紋理來存儲深度信息。 3、最初的文章沒有討論過偏置(bias)問題。偏置是隨透視陰影貼圖而帶來的問題,由於紋素的面積以不均勻方式分佈,這意味着偏置再也不是常量,而是與紋素的位置有關。 解決方案:使用在世界空間中的偏置(並且再也不分析雙投射矩陣的結果),而後把這個世界空間偏置轉換到投射後空間。 圖 獲得的陰影實時渲染結果(多邊形10w ~ 50w個,分辨率1600x1200)。 【本章配套源代碼彙總表】 Example 14-1計算立方體陰影紋理座標(Shader Code for Computing Cube Map Texture Coordinates) Example 14-2在頂點Shader中計算偏置(Calculating Bias in a Vertex Shader) Example 14-3 緊鄰百分比過濾的頂點Shader僞代碼(Vertex Shader Pseudocode for PCF) Example 14-4 用於緊鄰百分比過濾的像素Shader僞代碼(Pixel Shader Pseudocode for PCF) 【關鍵詞提煉】 陰影渲染(Shadow Rendering) 陰影貼圖(Shadow Maps) 透視陰影映射(Perspective Shadow Maps,PSMs) 緊鄰百分比過濾(percentage-closer filtering ,PCF) 單位立方體裁剪法(Unit Cube Clipping)
|