• 沒有找到結果。

2.1 光線追蹤

其實在計算機圖學的發展歷史中,光線追蹤(Ray Tracing)的概念大約從 1980 年代開始有了雛型,它的概念簡單來說就是模擬光線在現實中與物體的物理表面 所產生的行為,而成像原理是從眼睛發射出無數的視線,並且穿過在焦距上的假 想螢幕,所產生的光射線與會物體產生相交點,同時透過該點去與光源測試是否 有無照射到,來計算是否在陰影內,其後根據物體表面性質利用物理定律公式去 再產生新的折射光線或是反射光線,不停的傳播至光線的能量衰減,最後傳回這 些光所收集到的顏色並依照貢獻混色,最後成為在螢幕上的畫面。

雖然光線追蹤是解決全域照明中最廣為人知的方法,可以模擬出許多高品質 的光學效果(如下圖 2.1),會利用在要求高品質畫面和效果的動畫或電影裡,但如 此的模擬光的行徑路經之間的運算成本相當之大,對於記憶體使用量和運算時間 來說都是非常昂貴的。

圖 2.1:Ray Tracing 範例效果圖(左)、Ray Tracing 光線路徑圖(右)[WW93]

2.2 全域照明

全域照明(Global Illumination)說起來算是兩件事情的集合。第一指的是直接 照明(Direct Illumination),指的是單純只考慮光對物體的直接影響,最經典的算法 就是 Phong Model,簡化複雜的光線貢獻計算,可依照物體材質給予適當係數並 算出顏色。第二個就是間接照明(Indirect Illumination),指的是說環境中非光源的 其他物體所給予的照明,例如加上反射、折射和陰影的影響,但也有較嚴格的說 法是必須包含漫間反射(Diffuse Reflection)或焦散(Caustics)才行,如下圖 2.2 可見 到全域照明的效果。

為了計算出有全域照明的圖片已有許多討論與研究,例如高品質但需要長時 間運算的光線追蹤,其中有名的演算法有分布式光線追蹤(Distributed Ray Tracing)、

路徑追蹤(Path tracing)、光子映射(Photon mapping)等等;或是捨去物理的精確計 算,並求即時運算的 Reflective Shadow Map[DS05]、光傳播容積(Light Propagation

Volumes)[KD10]、Voxel Cone Tracing[CNS11]等等。

圖 2.2:全域照明的效果[Wiki 04]

2.3 遊戲引擎裡常用的全域照明

I. 光貼圖與光探頭:

在遊戲引擎中,為了節省運算時間並且達到全域照明,有個想法就是預先利 用光線追蹤的方法來計算物體所受到的光輻射,這種動作叫烘培(Bake),而計算 出來的資料可以用貼圖的資料結構儲存下來,就像一般的材質貼圖一樣,利用

UV 等等方法來紀錄對應的顏色,進而產生光貼圖(Light Maps),如下圖 2.3.1 是 受紅光的光貼圖。這種方法僅適用於靜態物體和光源,卻無法用於動態。

圖 2.3.1:光貼圖範例

後來就想到不如把光輻射儲存在空間中,並且當物體經過該區域時,再給予 光的貢獻,所以產生了光探頭(Light Probes)的想法,但光探頭與光源的概念不太

相同,光探頭可以由光源照射物體反射所產生,用來記錄周遭所受的光輻射;此 資料結構最常用的是球諧函數(Spherical Harmonics),是利用一群球狀函數來模擬 出原本光輻射對各個方向的貢獻,且每一層有不同形狀的球諧函數,如下圖 2.3,

每層中的每個相位都可以儲存一個變數代表它的強度,然後總合所有相位則可得 到光輻射的強度;但是此方法還是無法解決光源移動的問題。

圖 2.3.2:左圖球諧函數[Wiki 14]、右圖光探頭示意圖[Unity]

除了這兩個基本方法,依照不同的遊戲引擎會發展不同的光照格式和算法,

例如 Cube map、Lightmass 等等,都可以經過適當的設定來達到全域照明。

II. 複雜計算的全域照明方法:

為了達到即時運算且動態的全域照明,Unity 和 Unreal 都加入 Geomerics 所 做的 Enlighten 系統,有不錯的動態效果但是屬於 Pseudo Dynamic,因為不是重新 計算,而是用多次多角度的光照所內插出的結果。

後來就由 Crytek 的 CryENGINE 優先發展出真正即時計算的全域照明,並且 實作在遊戲引擎之中,叫做光傳播容積,後來 Unreal 也準備加入此演算法。之後

CryENGINE 又加入不同的方法,叫 Voxel-Based Global Illumination,該方法是基 於 Voxel Cone Tracing,而這系列的做法被 Sparse Voxel Octree Global Illumination

(SVOGI)演算法所深深影響,如下表 2.3。

Unity Unreal CryENGINE Light Maps、Probes

Enlighten

Light Map、Probes Lightmass

Light Propagation Volumes Enlighten

Light Boxes、Shapes Light Propagation Volumes Voxel-Based

表 2.3:各遊戲引擎的全域照明光照方法

相關文件