2016-04-28 81 views
6

我一直在閱讀了關於陰影映射,發現下面的教程:什麼導致陰影痤瘡?

http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/

這對我來說很有意義,直到在這裏筆者開始討論「影子痘痘」神器點。他們用下圖解釋了原因(無字): enter image description here

我仍然很難理解究竟會導致陰影痤瘡以及爲什麼添加偏見修復它。

陰影圖的分辨率似乎對痤瘡沒有影響。之後怎麼樣了?也許浮點精度,還是別的東西?

回答

7

是的,這是一個精確的問題。不是真的浮動問題,只是有限的精度。

理論上,陰影地圖存儲「距光線最近的物體的距離」。但實際上它存儲「距離光線距離±eps」。

然後當測試時,你有你的碎片距離相同的光。但是,再次,在實踐中±eps2。因此,如果您比較這兩個值,則會發現在爲陰影貼圖渲染或陰影進行插值時,eps會有不同的變化。所以如果你比較d ± eps < d2 ± eps2,如果d2==d,你可能會得到錯誤的結果,因爲eps!=eps2。但如果你比較d ± eps < d2 + max(eps) + max(eps2) ± eps2你會沒事的。

在本例中d2==d。這就是所謂的自我陰影。而且可以很容易地解決上述偏差問題,或者通過在射線追蹤中不對自己進行測試。

對於不同的物體,當eps和eps2差別很大時,它會變得更加棘手。處理它的一種方法是控制eps(http://developer.download.nvidia.com/SDK/10.5/opengl/src/cascaded_shadow_maps/doc/cascaded_shadow_maps.pdf)。或者可以採取更多樣本。

試圖回答這個問題:核心問題是陰影映射比較理想的距離。但是這些距離並不理想,而是量化。量化值通常很好,但在這種情況下,我們將它們在兩個不同的空間中進行比較。