一個perfect 的解決 陰影拉伸的方法 shadow map strech

minggoddess發表於2016-07-13

因為在場景中做了,有的物體產生陰影比如人物,有的物體不產生陰影比如地面,這樣在地面凹下去的地方,懸崖,池塘邊,就會有陰影的拉伸。

實際上,

沒辦法上傳圖片。。。。

 

L是光源 A 點(人物身上)產生陰影 B C D(地面上)依次在L A的延長線上, 因為地面不產生陰影,只接受陰影BCD都會取樣到shadowmap上的同樣位置。接受到陰影。

我希望只有 離A最近的B接受陰影,CD都不接受陰影。

所以需要一個存了B到L距離的額外的資料。 因為無法保證B比C先畫,所以,在畫地面的時候去更新這張filter資料是不可行的。

 

我想到一個好方法:

在畫產生陰影的物體到shadowmap上之後,再用同樣的方式畫一遍不產生陰影的物體到另外一張filter map上,這樣就可以得到B了。。。好開心。

取樣shadowmap的時候 在陰影內的點再取樣filter map一次 如果大於filter就不渲染陰影。

 

這個方法完美的解決了陰影的拉伸,但是特別費,因為又額外畫了一次不產生陰影那些物體,並且取樣的時候額外又取樣了一張深度圖。這裡也許還能優化一些,但前面額外畫一遍不產生陰影的場景那步不太能

省略,其實很多地方沒必要畫的。

倒是可以在 shadowmap 畫了的地方, 用depth greater than.shadowmap 沒畫的地方沒必要畫。不知道能否提升效率。 

相關文章