光照和陰影演算法該如何優化?

在一個多動態光源,多動態幾何的沙盒遊戲場景中,該如何選擇光影演算法?優化的思路又是什麼?我自己斟酌了一下陰影貼圖和陰影體以及光線跟蹤三種演算法,以複雜的毛髮系統來說使用陰影貼圖演算法的效率是肯定秒殺陰影體的,但是如果光源可以隨意變動而且光源非常多的話那麼陰影體的優勢就上來了。。對於光線跟蹤,它似乎不管在什麼情況下效率都是令人心碎的,好了這下問題來了,沙盒遊戲中通常在具有複雜的場景的同時,光源和物體又都是高動態的。。。那麼這時該如何選擇光影演算法和如何優化它們呢?


多局部光源可以使用各種deferred lighting/tile-based forward等,之前寫過一篇相關專欄 http://zhuanlan.zhihu.com/milocode/20065746。

題目描述中對 shadow volume 的理解是錯誤的。shadow map 是現時的標準做法。然而,大量動態光源的陰影比較困難,相關的研究例如有[1][2]。

[1] Olsson, Ola, et al. "Efficient virtual shadow maps for many lights." Proceedings of the 18th meeting of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games. ACM, 2014.

[2] Olsson, Ola, et al. "More Efficient Virtual Shadow Maps for Many Lights."Visualization and Computer Graphics, IEEE Transactions on 21.6 (2015): 701-713.


shadow volume已經死了,沒有理由在用它。你說的光源變動和光源多的情況下,shadow volume照樣沒有優勢。ray tracing在實時應用里沒法用,所以也沒得選。只剩下shadow map。

複雜場景、動態光源和物體對shadow map來說都不是事。常用的優化是忽略投影面積小的物體,以及限制光源數。


題主所說的「如果光源可以隨意變動而且光源非常多的話那麼陰影體的優勢就上來了」,是這樣么?你的陰影貼圖是指shadow texture還是shadow map?如果場景裡面有上百萬光源的話就用光線跟蹤效率更高哦


推薦閱讀:

圖形渲染中關於CPU和GPU的一些問題?
對多重採樣(MSAA)原理的一些疑問?
如何用OpenGL封裝一個2D引擎?
如果做一個GIS渲染引擎,圖形API應當選擇OpenGL還是DirectX?
有哪些優秀的 C++ OpenGL 開源遊戲引擎?

TAG:遊戲開發 | 編程 | 遊戲引擎 | OpenGL | 計算機圖形學 |