何謂假的陰影: 沒有正確的得知場景中物體彼此之間的遮蔽關係跟它們的可見度( visibility )
何謂真的陰影: 透過任何演算法, 正確地得知場景中物體彼此之間的遮蔽關係 , 並計算出它
們的可見度 ( visibility) (圖二)
要正確計算每個物體的 visibility , 最直覺且正確的算法就是:
(1). 從這個物體中心往四面八方射出無限多條追蹤線 ( tracing line ) , 積分出它的可見度 (圖三)
但上述方法(1) , 還不太能用在很需要即時運算反應的遊戲產業上 (但我相信未來的 GPU繪圖
硬體設備越來越厲害時,有機會達到逼真且即時計算的陰影效果),取而代之的有兩種方法
(2) Shadow Mapping (3) Shadow Volume , 這邊先大改講一下兩種方法的優缺點 ,下一篇會講他們的理論作法 , 與 coding 方式.
這兩種方法都可以大略的得知物體的遮蔽資訊 ,
Shadow Mapping :
目前遊戲業我相信應該還是以 Shadow Mapping 為主流 , 因為它實作簡單 ,且因為先天的演算法
條件在靜態場景上能發揮最大效能 , 不過會產生出來的陰影, 在先天演算法的設計下, 有很大的機會產生鋸齒狀的陰影外框 (圖 四 ) ,但經過許多的專家學者們的努力, 它已經被改良的非常好很多缺點都可以被克服, 所以在動態的場景上的效果表現已很不錯了 (註一) ,
Shadow Volume :
此方法非主流 , 因為它先天的演算法設計本身就不是很match 現行的電腦圖學發展情況 , 在場景中物體非常多 , 物體的 polygon 數量非常多 的情況下 ,
會導致繪製陰影的時間很久 , 如果又是動態場景 , 只能說悲劇的效能 , 更別提如果要做 soft shadow (註二), 就親自實做過的經驗 , 不建議再用 shadow volume 來實作陰影 ( 目前的學術與業界主流都是以 shadow mapping 為主 , 由這點可以看出端倪 , 別往死胡同裡去^^)
註一 :
動態場景( Dynamic Scene) 指的是場景中物體可移動的情況 , 在學術界中 , 對動態場景的區別
有分 : 1. 鏡頭移動 2. 物體移動 3. 光源移動 4. 全部都可以移動
移動的表現是: 1. 單純的平移(上下左右) 2. 旋轉 3. 型變 (形狀改變 )
最好的情況當然是 , 演算法能適用在 上述任何情況!!
註二:
真實的場景中 , 幾乎是看不到 hard shadow 的 , 如果只用 shadow mapping 或 shadow
volume 計算 visibility , 被遮到給0 , 沒被遮到給 1 , boolean 的方式裝載 遮蔽資訊 , 只會有 hard shadow 的效果而已 , 之後會講解如何用 shadow mapping 做出 假的 soft shadow.






沒有留言:
張貼留言