2009-12-11 36 views
0

我想渲染6個聚光燈爲陰影映射算法創建一個點光源。使用6個聚光燈渲染點光源?

我不知道如果我這樣做的權利,建立我的觀點和投影矩陣當我或多或少遵循的指示here但最終的結果是這樣的:

alt text

白色區域是由6個陰影貼圖中的一個覆蓋的部分,較暗的區域是陰影貼圖未覆蓋的區域。很明顯,我沒有把茶壺和盒子投影到場景中的問題,但是你可以看到6個陰影地圖有盲點。這是一個立方體陰影貼圖應該看起來如何?它看起來不像一個點光源的陰影圖...

回答

2

實際上,您可以調整您的六個點以使錐體完美地填充立方體貼圖的每個面。您可以通過設置每個錐體的光圈來創建圍繞每個立方體貼圖面的外接圓。在這種情況下,您不必擔心重疊,因爲會重疊。零件不在面的區域。

換句話說:調整燈光的投影矩陣'FOV,所以它不會包含光錐的視錐體,但錐體將包括視錐體。

整體實施see this paper

2

你在這裏看到的是一個圓和兩個雙曲線 - 圓錐曲線段 - 如果你採用雙曲線結果錐體並與飛機相交。

這個數學似乎從情況中消除了,但它解釋了你的問題。聚光燈創造了一個光錐,你不能用一堆來自同一點的圓錐體完​​全填充一個堅實的空間。 (我建議捲起一堆紙並將它們粘在一起以便試用)

但是,當你遠離模擬點源的起源時,錐會聚到他們的漸近線,並且在光線中有一個無限小的差距。

解決此問題的一個選項是更改錐體的焦點,使它們稍微重疊 - 這將創建曝光過度的區域,但曝光過度只會在距離較遠時變得明顯。只要你的所有物體都靠近點光源,這可能不是什麼大問題。

另一種選擇是將所有燈光的焦點移近其源頭。這樣,他們會更快地融合他們的漸近線。