2013-03-08 25 views
2

我處於一種困境之中,我敢肯定我不是第一個遇到這個問題的人。帶燈的多房間

我正試圖模擬與多個房間的辦公大樓。我希望玩家能夠打開/關閉每個房間的燈光。下面是我遇到的問題:

問題1:有前進的渲染,我不能使用的陰影,因此我的點光源穿過牆壁泄漏(即與房間燈滅不漆黑,因爲他們接收來自相鄰房間的光線)。

解決方案:首先,我被光解決這個映射我的場景兩次 - 燈光以燈光熄滅上一次一次。當玩家關掉燈光時,我將房間內的所有渲染器都切換爲全黑光照貼圖並關閉燈光。

問題2:上述解決方案是不壞,但我所有的動態對象仍然收到光穿過牆壁漏水。我想我可以使用lightprobes來解決這個問題。但是,我不確定如何更改單個探針的光照貼圖(即房間中的探針使用關閉的光照貼圖,室外的探針使用光照貼圖)。

如果我使用延遲光照與陰影一切工作不錯,但我的FPS在60〜滴〜20。

謝謝

回答

3

有兩個光照地圖確實是一個解決方案,但限制你靜態漫反射場景。其他任何東西(移動物體或鏡面場景)都需要更先進的技術。

  • 一種簡單廉價的解決方案是使用「單元和門戶網站」(例如,this paper),並保持你的第一個解決方案。這種方法建立了一個圖表,表示您的不同房間之間的聯繫,並應防止光線泄漏 - 至少大約。

  • 一個更好的解決方案是使用shadow maps。基本上,從每個光源的角度(如果準時!)渲染一次場景的深度圖,然後通過簡單的測試就可以確定當前點是否在陰影中。如果您有很多房間,您當然可以將此方法與單元格和門戶分解合併,以加快計算速度。

  • 一個甚至可能是更好的解決方案是使用shadow volumes。這種方法計算每個光錐(或任何形狀的聚光燈)與場景幾何之間的幾何相交。使用它,您可以確定當前點是在陰影體內還是在體外。

所有已被擴展到軟陰影,如果你在網上搜索。

+0

謝謝!我目前的實施方案不能使用'單元格和門戶'技術,因爲房間不像文章中所述的'水密'(牆可以被打破)。我也提供了整個建築的RTS視圖,所以我認爲'單元和門戶'方法也會在這裏失敗。 現在重新研究陰影卷.. – Cailen 2013-03-09 21:55:35

+0

注意陰影卷比陰影圖更難實施。陰影圖很容易在GPU上完成,儘管陰影卷需要一些幾何處理。 – WhitAngl 2013-03-15 18:26:56