2013-11-14 25 views
0

嗨這些水平線的原因是什麼?區域燈是綠色平面上方的黃色正方形。線的圖案根據平面上的面光的距離而改變,但它們仍然是水平線。射線追蹤:帶區域燈的水平僞影

我有4個點光源均勻分佈在面光源(黃色方塊)的表面上。

你可以看到它看起來像here(16倍超採樣)。

+0

看起來像陰影痤瘡(A.K.A.不正確的自我陰影)。 你是否在做某些事情來避免陰影光線與起源它們的表面相交? 您可以使用曲面法線偏移陰影射線的原點,或者檢查相交的形狀與發出射線的形狀不同。 – davidnr

回答

1

看起來像陰影痤瘡:不希望的自我陰影,由於近似誤差圖案。請注意,陰影區域沒有線條,這表明問題在於陰影系統錯誤地「認爲」綠色平面在陰影中。

編輯:由於您是光線追蹤,所以問題可能是您錯誤地將來自「發射」它們的平面的出射陰影射線相交。以下建議應用與陰影地圖,沒有光線追蹤到光柵化,但它們仍可以啓發...


陰影映射的工作方式是先繪製從每個視光的點的深度圖,記錄陰影物體的「陰影圖」。然後,在繪製實際圖像時,每個像素都會從陰影貼圖中對陰影深度進行採樣,並將其與來自該像素位置光線的計算深度進行比較:如果像素深度大於陰影深度,則會對其進行陰影處理。

。注意,如果對象被繪製最接近遮蔽對象的光,像素深度應相同作爲陰影深度。但是,由於採樣和浮點計算不準確,所以只有約等於。因此,部分時間(基於採樣和浮點錯誤),它認爲像素深度比由相同對象引起的陰影深度更遠:對象自身陰影。


有幾種方法可以避免陰影痤瘡。最簡單的選項(也是場景的明顯選擇)是從陰影輪列表中刪除對象。既然你的飛機似乎是作爲一個「地板」的目的,它不應該影響任何東西,無論如何。這樣做還有另外一個好處,就是節省了將地板繪製到所有陰影貼圖上的時間......

同樣的原理,如果一個物體是「水密的」,單面三角形始終向外,您應該反轉陰影貼圖的三角形方向測試。這將從物體的黑暗一側獲得陰影深度(無論如何,因爲它背離光線,所以它在陰影中),所以它不會在明亮的一面造成粉刺。

如果您有一個必須從兩側都可見的扁平物體,則可以對陰影深度應用偏差;圖形軟件和硬件通常有這方面的規定。不幸的是,這可能有點煩瑣:偏差必須大到足以隱藏採樣/計算錯誤,但足夠小以至於不會導致其他僞像。