在遊戲引擎裡全域照明方法之探討
41
0
0
全文
(2) 摘要 在遊戲引擎裡全域照明方法之探討 近年來的遊戲引擎上,有許多在畫面或效能上的研究發展,往往追求的是畫 面的真實感,而在畫圖希望達到全域照明的效果,也就是說除了最基本的直接照 明外,如果再加上間接照明就可以讓畫面更接近真實世界,但是同時要有高品質 的畫面和即時運算變成很重要的課題。 本篇論文研究一種全域照明的演算法,是 Crytek 公司所提出的光傳播容積演 算法,它可以達到全域照明的效果、解決漫間反射的問題,因為有特殊的網格結 構和球諧函數壓縮,使之可以達到即時運算。 在此會將該演算法實作出來,並且將步驟細節記錄下來,而且針對系統做不 同參數的測試和比較,並且與其他方法做比較,例如光貼圖和光線追蹤,希望可 以有不同的啟發。. 關鍵字: 遊戲引擎、全域照明、即時運算、光傳播容積。. I.
(3) Abstract Global Illumination on Game Engines In recent years, there are many research and development for images quality and performance about game engines. We usually want to get more photorealistic images and achieve the effect of global illumination. In addition to the basic direct lighting, we also use the indirect lighting to make the image closer to the real world. However, at the same time we have a high quality image and real-time rendering to become a very important issue. This paper research on a kind of the global illumination algorithms from Crytek , Light Propagation Volumes. It can achieve the effect of global illumination and solve the problem about the diffuse reflection. Because it has the special volume structure and compression by spherical harmonics, it can achieve real-time rendering. We can implement the algorithm and record the details of every step. Then, we can test the system and make the comparison of different parameters. Finally we make the different comparison with other methods, such as light maps and ray tracing for having a different inspiration.. Keywords: Game Engine、Global Illumination、Real-Time Rendering、Light Propagation Volumes. II.
(4) 目錄 摘要…………………………………………………………………………………...I Abstract……………………………………………………………………………...II 目錄…………………………………………………………………………………III 附表目錄……………………………………………………………………………..V 附圖目錄……………………………………………………………………………VI 第一章 緒論…………………………………………………………………………1 1.1 研究背景........................................................................................................... 1 1.2 研究目的........................................................................................................... 2 1.3 論文架構........................................................................................................... 3 第二章 文獻探討……………………………………………………………………4 2.1 光線追蹤........................................................................................................... 4 2.2 全域照明........................................................................................................... 5 2.3 遊戲引擎裡常用的全域照明........................................................................... 6 第三章 光傳播容積………………………………………………………………....8 3.1 演算法的啟發.................................................................................................. 8 3.2 產生虛擬點光源............................................................................................ 10 3.3 虛擬點光源注入光容積................................................................................ 11. III.
(5) 3.4 光能量傳遞.................................................................................................... 15 3.5 繪製場景........................................................................................................ 17 第四章 系統實作…………………………………………………………………...18 4.1 系統流程........................................................................................................ 18 4.2 光容積的資料結構與使用............................................................................ 19 第五章 實驗與討論…………………………………………………………….......22 5.1 實驗環境與基本效果展示............................................................................. 22 5.2 不同參數設定的實驗..................................................................................... 25 5.3 光傳播容積與其他方法之比較..................................................................... 27 第六章 結論與未來方向……………………………………………………...........30 6.1 結論................................................................................................................ 30 6.2 未來方向........................................................................................................ 31 參考文獻……………………………………………………………………………32. IV.
(6) 附表目錄 表 2.3:各遊戲引擎的全域照明光照方法…………………………………………..7 表 4.2.1:RSM 產生的資料………………………………………………………….20 表 5.1.1:實驗環境…………………………………………………………………...22 表 5.1.2:光傳播容積的參數設定……………………………………………………22 表 5.1.3:光傳播容積的效果比較…………………………………………………...23 表 5.1.4:有無光傳播容積的效能比較……………………………………………..24 表 5.1.5:光傳播容積每個步驟所花的平均時間…………………………………..24 表 5.2.1:虛擬點光源數不同之比較………………………………………………..25 表 5.2.2:光容積的格子數不同之比較……………………………………………..26 表 5.2.3:光傳遞次數不同之比較…………………………………………………..27 表 5.3.1:光傳播容積與光貼圖、光探頭之比較…………………………………..27 表 5.3.2:光傳播容積與光線追蹤之比較…………………………………………..28. V.
(7) 附圖目錄 圖 2.1:Ray Tracing 範例效果圖(左)、Ray Tracing 光線路徑圖(右) [WW93]……….4 圖 2.2:全域照明的效果[Wiki 04]……………………………………….…………….5 圖 2.3.1:光貼圖範例……………………….………………………………………….6 圖 2.3.2:左圖球諧函數[Wiki 14]、右圖光探頭示意圖[Unity]………………………7 圖 3.1.1:光傳播容積的效果…………………………………………………………..8 圖 3.1.2:光傳播容積的演算法流程………………………………………………….9 圖 3.2:產生虛擬點光源[Wan11]…………………………………………………….10 圖 3.3.1:虛擬點光源注入光容積[Wan11]…………………………………………..11 圖 3.3.2:虛擬點光源的採樣[Wan11]……………………………………………….12 圖 3.4.1:光能量傳遞[Wan11]……………………………………………………….15 圖 3.4.2:光能量傳遞示意圖(二維示意圖)…………………………………………15 圖 3.5:繪製場景[Wan11]……………………………………………………………17 圖 4.1:系統流程圖(綠色使用 CPU、藍色使用 GPU 運算)……………………….18 圖 4.2.1:注入光容積…………………………………………………………………20 圖 4.2.2:光能量傳遞次數示意圖……………………………………………………21 圖 4.2.3:三組光容積示意圖…………………………………………………………21. VI.
(8) 第一章 緒論 1.1 研究背景 在發展多年的計算機圖學領域中,許多的研究都是朝兩個大方向。第一個方 向是希望計算出更真實圖片,在當中會需要利用許多物理光學和輻射能量等知識, 然後再實踐成程式或演算法,通常稱為光線追蹤,算出來圖片可以有反射、折射、 聚光等全域照明的效果,甚至常常會讓人認不出是否為真實圖片,但會需要龐大 的時間去運算,最常見的應用像是電影與動畫工業。第二個方向是希望能更快速 的計算出圖片,說到快速總是要有個基準,假設應用在遊戲或是擁有互動效果的 系統中,會更為嚴苛、必須要即時的運算才行,一般會以人類視覺看動畫的畫格 時,覺得舒適的情況下算即時,大約是一秒要有三十到六十個畫格,如果想要如 此快速生成必須倚靠強大的硬體和演算法支援,像是最泛用的 Rasterization 繪圖 管線搭配繪圖處理器,為的就是讓遊戲或動畫體驗者有順暢的感受。 雖然說是兩個方向,但其實對於現在的使用者已經無法感到滿足了,使用者 會希望在快速算出圖片的同時,也得到高品質的畫面,因此近代有許多混搭即時 運算與光線追蹤的研究,但是如果有大型場景又想要即時運算,可能就需要減少 一些運算成本、犧牲一些精確度等等,或是加入 OpenCL、CUDA 等等平行計算 的方法。. 1.
(9) 1.2 研究目的 在前一小節的最後有提到希望可以即時的算出高品質的圖片,高品質圖片中 會希望看全域照明(Global Illumination)的效果,所以近年來有許多特別的想法在 圖學界被激發出來。 例如利用事先計算好(Precomputed)的光貼圖(Light Map)或是光探頭(Light Probe)來著色,減少即時運算的負擔,此用法廣泛應用在 Unity 等等的遊戲引擎; 或是使用反射陰影貼圖(Reflective Shadow Maps)和虛擬點光源(Virtual Point Light) 的概念,從光源出發對場景中撒出許多虛擬點光源,利用這些虛擬點光源可以做 出不同的應用,會有不同的效果,這類的討論與研究相當熱絡,其改進的方法也 相當多方向,像是 Crytek 所提出的光傳播容積(Light Propagation Volumes)[KD10] 也是相當經典的方法。 所以這篇論文會實作光傳播容積演算法,並分析其演算法細節、了解加速 的原因,做一些參數調整來比較畫面和速度,還有與一些遊戲引擎中全域照明的 方法做優缺點比較;另一方面是為了讓光線追蹤更快速的算出全域照明的效果, 所以也會討論光傳播容積的資料結構和想法是否與光線追蹤有相似的地方,找尋 其中變化應用的可能性。. 2.
(10) 1.3 論文架構 本篇論文的第一章簡介,會說明本篇論文的研究背景、研究目的和論文架構, 可藉由這章知道此論文研究的方向。第二章為文獻探討,主要會探討到四個題目, 會先介紹光線追蹤演算法的基本概念,分析它的優缺點;再來是介紹全域照明的 效果,以往前人的實作有哪些、運用的技術等等;接著談論遊戲引擎內常實作的 全域照明的方法,像是光貼圖與光探頭,還有更進階的效果像是此論文實作的光 傳播容積等等。 中段即是本篇論文的核心,第三章會從光傳播容積的啟發開始說起,再來分 析整套演算法的步驟,每一小節為一個步驟,皆會詳細解釋並有圖像化的說明; 第四章是實作細節,包含的有系統流程圖、資料結構的分析、交代如何使用其中 的資料;第五章則是實驗與討論,會先從各個角度展示光傳播容積的基本效果, 再測試不同參數的圖片表現和運算效能,還會與一些全域照明的方法做優缺點比 較,並討論其中的相似性。 後段是結論、未來方向和參考資料,對光傳播容積和此系統做一段總結,並 且針對未來的方向分析出幾點可以努力的方向,最後列出對本篇論文有極大貢獻 的許多論文和資料來源以示感謝。. 3.
(11) 第二章 文獻探討 2.1 光線追蹤 其實在計算機圖學的發展歷史中,光線追蹤(Ray Tracing)的概念大約從 1980 年代開始有了雛型,它的概念簡單來說就是模擬光線在現實中與物體的物理表面 所產生的行為,而成像原理是從眼睛發射出無數的視線,並且穿過在焦距上的假 想螢幕,所產生的光射線與會物體產生相交點,同時透過該點去與光源測試是否 有無照射到,來計算是否在陰影內,其後根據物體表面性質利用物理定律公式去 再產生新的折射光線或是反射光線,不停的傳播至光線的能量衰減,最後傳回這 些光所收集到的顏色並依照貢獻混色,最後成為在螢幕上的畫面。 雖然光線追蹤是解決全域照明中最廣為人知的方法,可以模擬出許多高品質 的光學效果(如下圖 2.1),會利用在要求高品質畫面和效果的動畫或電影裡,但如 此的模擬光的行徑路經之間的運算成本相當之大,對於記憶體使用量和運算時間 來說都是非常昂貴的。. 圖 2.1:Ray Tracing 範例效果圖(左)、Ray Tracing 光線路徑圖(右)[WW93]. 4.
(12) 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] 5.
(13) 2.3 遊戲引擎裡常用的全域照明 I.. 光貼圖與光探頭: 在遊戲引擎中,為了節省運算時間並且達到全域照明,有個想法就是預先利. 用光線追蹤的方法來計算物體所受到的光輻射,這種動作叫烘培(Bake),而計算 出來的資料可以用貼圖的資料結構儲存下來,就像一般的材質貼圖一樣,利用 UV 等等方法來紀錄對應的顏色,進而產生光貼圖(Light Maps),如下圖 2.3.1 是 受紅光的光貼圖。這種方法僅適用於靜態物體和光源,卻無法用於動態。. 圖 2.3.1:光貼圖範例 後來就想到不如把光輻射儲存在空間中,並且當物體經過該區域時,再給予 光的貢獻,所以產生了光探頭(Light Probes)的想法,但光探頭與光源的概念不太 相同,光探頭可以由光源照射物體反射所產生,用來記錄周遭所受的光輻射;此 資料結構最常用的是球諧函數(Spherical Harmonics),是利用一群球狀函數來模擬 出原本光輻射對各個方向的貢獻,且每一層有不同形狀的球諧函數,如下圖 2.3, 每層中的每個相位都可以儲存一個變數代表它的強度,然後總合所有相位則可得 到光輻射的強度;但是此方法還是無法解決光源移動的問題。 6.
(14) 圖 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 Light Maps、Probes. Unreal Light Map、Probes. CryENGINE Light Boxes、Shapes. Enlighten. Lightmass Light Propagation Volumes Enlighten. Light Propagation Volumes Voxel-Based. 表 2.3:各遊戲引擎的全域照明光照方法 7.
(15) 第三章 光傳播容積 3.1 演算法的啟發 光傳播容積演算法是由 Crytek(一家電子遊戲開發商)在 2010 年的 I3D 大會上 所提出的想法,並且已經實作在 CryENGINE 3 裡,也就是說此方法已經相當純 熟,足以應用並且在遊戲引擎中使用,其中有許多想法也讓後人爭相學習和變化。 此想法受到 Discrete Ordinate Method 和 Lattice-Boltzmann Lighting 的啟發很多, 把連續的光輻射以離散的概念表達並且壓縮,場景切成一格格用光輻射還原貢獻 並染色上去,為了就是即時運算出上一小節所提到的全域照明,如下圖 2.3,柱 子上有毛毯的全域照明。. 圖 3.1.1:光傳播容積的效果 不同於以前遊戲引擎常見的光貼圖,這方法是屬於不用預先計算貼圖或是儲 存任何資料的方法,雖然利用光貼圖可以利用記憶體來減少運算,但是無法達到 全場景動態(包含物體和光源),而光傳播容積可在容許即時運算的時間內,做到 以上的效果。 8.
(16) 此方法有包含獨特壓縮過的光輻射資料結構和簡單傳遞光能量的方法,並融 合許多概念,雖然不像光線追蹤一樣去追求物理上的正確,而是用到虛擬點光源 (Virtual Point Light)的想法、加上光輻射(Radiosity)能量傳遞的概念,這些也都源 自於光線追蹤的衍生想法;至於在加速計算方面是利用網格(Grid)概念來簡化計 算,並且利用低階層的球諧函數來壓縮儲存資料,如此的預估算法,也造成此演 算法適用於漫間反射的效果。 此演算法主要的流程為四大步驟,流程如下圖 3.1.2。第一步,從光源看向場 景撒出許多虛擬點光源,並且記錄這些虛擬點光源的向量、所在位置、顏色和對 光源之方向。第二步,將虛擬點光源的訊息用球諧函數的方式,取樣並注入自己 所在的光容積(Light Volume)之中。第三步,模擬光輻射的傳遞,使光容積中存放 的的能量經過一格一格的傳遞。第四步,最後只要把球諧函數還原回去,即可應 用在場景上的染色。 產生虛擬點光源. Generate Virtual Point Lights 虛擬點光源注入光容積 Light Injection 光能量傳遞 Intensity Propagation 繪製場景. Rendering Scenes 圖 3.1.2:光傳播容積的演算法流程 9.
(17) 3.2 產生虛擬點光源 第一個步驟是產生虛擬點光源,意思就是指從光源看向場景,撒出許多虛擬 點光源,此光源可能是多個光源、點光源,聚光燈(Spot Light)或區域光源(Area Light),依照光源性質去計算球狀方向或是單一方向發射多個向量,而此向量打 到物體或場景表面的位置就是虛擬點光源。 從光源發射射線向量有許多方法,例如最基本的光線追蹤,從光源向四面八 方發射;或是妥善運用 OpenGL 的繪圖管線,利用 Reflective Shadow Map(RSM) 的方法,把光源當眼睛,從光源往場景看去繪製出一張畫面,每個像素點就如同 撒出去的虛擬點光源,並且利用 FrameBuffer 可以輸出多重貼圖的特性,把虛擬 點光源的重要資訊都記錄下來,除了用來做陰影的深度(Depth)外,還要記錄四樣 資訊,位置(Position)、光源方向(Light)、法向量(Normal)、顏色(Color),下一節會 解釋為何要儲存這些資訊,並解釋如何應用到光容積。. 圖 3.2:產生虛擬點光源[Wan11]. 10.
(18) 3.3 虛擬點光源注入光容積 第二個步驟是將虛擬點光源注入光容積(Light Volumes),此步驟的目的就是 為了減少過多計算量,因為依照光線追蹤物理光學的作法,每個虛擬點光源都會 傳遞能量出去並且給予周遭物體輻射貢獻,但是這樣的計算量實在是太龐大了, 因此產生了兩個簡化的想法,第一是對眾多虛擬點光源做取樣,第二就是同時要 對光輻射的資料進行壓縮,並放入光容積的中心,如下圖 3.3.1。. 圖 3.3.1:虛擬點光源注入光容積[Wan11] 首先必須了解甚麼是光容積,我們會把空間切成一格一格的網格,而光容積 是用來儲存空間的每格網格區塊中所受到的光輻射;至於注入(Inject)的概念類似 於取樣(Sample),每格網格會對所在自己格子內的所有虛擬點光源做取樣,也就 是說一個虛擬點光源不在該網格內時是不會被取樣到的,而每個虛擬點光源也只 會被取樣到一次,如下圖 3.3.2,有個紅色虛擬點光源會被注入到光容積網格的中 心,並且具有方向性。. 11.
(19) 圖 3.3.2:虛擬點光源的採樣[Wan11] 當該虛擬點光源被取樣時,需要兩項資料,一個是方向,即是虛擬點光源的 法向量;另一個則是光輻射強度,但光輻射強度由於經過漫間反射,所以需要經 過能量轉換,公式如下,𝐼𝑝 為光輻射強度結果,𝐼為光源的輻射強度,Φ𝑝 為反射 係數(依照材質決定),𝑛𝑝 為虛擬點光源的法向量,ω為原光源的入射角,此時上 一個步驟所儲存的資訊即可獲得應用。 𝐼𝑝 (𝜔) = 𝐼 × Φ𝑝 ⟨ 𝑛𝑝 | ω⟩+ 這裡提到的光輻射資料壓縮是使用低階層的球諧函數來達成目標,球諧函數 是可以用數學函式來逼近一個表面不規則但連續的球體,而此球體相當適合來表 示一個區域內每個方向所受到光輻射強度。 根據對原本論文的公式探討[Andreas Kirsch 2010],對兩階球諧函數L為了簡 化運算所以夾集(Clamped)餘弦葉(Cosine Lobe)在 Z 軸方向,並可知夾集餘弦葉的 常數值𝑆0𝑧 、𝑆1𝑧 、𝑆2𝑧 、𝑆3𝑧 。 L = ∑𝑖 𝑠𝑖 𝑆𝑖 (𝑣) → L = ∑𝑖 𝑠𝑖𝑧 𝑆𝑖 (𝑅𝑛→𝑧 𝑣) 𝑆0𝑧 =. √𝜋 、𝑆1𝑧 2. = 0、𝑆2𝑧 =. 12. √𝜋 、𝑆3𝑧 3. =0.
(20) 球諧函數夾集後的餘弦葉可由反轉矩陣來簡化,再經過一系列的代換後,可 得到由𝑆𝑖 (𝑣)所表示的L等式,其中𝑆𝑖 (𝑣)代表代入取樣的輻射強度,其前面帶的係 數則是推倒出來的常數。 𝑟1𝑇 𝑣 𝑥 𝑧 𝑧 𝑇 L = ∑𝑖 𝑠𝑖 𝑆𝑖 (𝑅𝑛→𝑧 𝑣) = ∑𝑖 𝑠𝑖 𝑆𝑖 ((𝑟2 𝑣))、v = (𝑦) 𝑧 𝑟3𝑇 𝑣 → L = 𝑠0𝑧 𝑐0 + 𝑠1𝑧 (−𝑐1 )𝑟2𝑇 𝑣 + 𝑠2𝑧 𝑐1 𝑟3𝑇 𝑣 + 𝑠3𝑧 (−𝑐1 )𝑟1𝑇 𝑣 = 𝑠0𝑧 𝑐0 + 𝑠1𝑧 (−𝑐1 )𝑟2𝑇 𝑣 + 𝑠2𝑧 𝑐1 𝑟3𝑇 𝑣 + 𝑠3𝑧 (−𝑐1 )𝑟1𝑇 𝑣 ∵ 𝑆1𝑧 = 0、𝑆3𝑧 = 0 ∴ L = 𝑠0𝑧 𝑐0 + 𝑠2𝑧 𝑐1 𝑟3𝑇 𝑣 = 𝑠0𝑧 𝑐0 + 𝑠2𝑧 𝑐1 𝑟31 𝑥 + 𝑠2𝑧 𝑐1 𝑟32 𝑦 + 𝑠2𝑧 𝑐1 𝑟33 𝑧 = 𝑠0𝑧 𝑐0 − 𝑠2𝑧 𝑐1 𝑟32 𝑦 + 𝑠2𝑧 𝑐1 𝑟33 𝑧 − 𝑠2𝑧 𝑐1 𝑟33 𝑥 = 𝑠0𝑧 𝑐0 − 𝑠2𝑧 𝑐1 𝑟32 𝑦 + 𝑠2𝑧 𝑐1 𝑟33 𝑧 − 𝑠2𝑧 𝑐1 𝑟33 𝑥 = 𝑠0𝑧 𝑆0 (𝑣) − 𝑠2𝑧 𝑟32 𝑆1 (𝑣) + 𝑠2𝑧 𝑟33 𝑆2 (𝑣) − 𝑠2𝑧 𝑟31 𝑆3 (𝑣) 0 球諧函數夾集餘弦葉在 Z 軸方向要還原到方向 n,因此代入𝑅𝑧→𝑛 (0) = 𝑛 1 L = 𝑠0𝑧 𝑆0 (𝑣) − 𝑠2𝑧 𝑛𝑦 𝑆1 (𝑣) + 𝑠2𝑧 𝑛𝑧 𝑆2 (𝑣) − 𝑠2𝑧 𝑛𝑥 𝑆3 (𝑣) √𝜋 ≅ 0.8862269255 2 𝜋 𝑠1𝑛 = −𝑠2𝑧 𝑛𝑦 = −√ 𝑛𝑦 ≅ −1.0233267079𝑛𝑦 3 𝑠0𝑛 = 𝑠0𝑧 =. 𝜋 𝑠2𝑛 = 𝑠2𝑧 𝑛𝑧 = √ 𝑛𝑧 ≅ 1.0233267079𝑛𝑧 3 𝜋 𝑠3𝑛 = 𝑠3𝑧 𝑛𝑥 = −√ 𝑛𝑥 ≅ −1.0233267079𝑛𝑥 3. 13.
(21) 最後結論在球諧函數階層為兩階時,可有極少的運算量和少量的記憶體(四個 變數)即可儲存具有方向性連續的輻射強度,公式如下,𝑐⃗代表球諧函數的係數, 共有四個。 𝑐⃗ = ( 𝑐0 , 𝑐1 , 𝑐2 , 𝑐3 ) 球諧函數的係數𝑐⃗需要由球諧函數的常數𝑠⃗來累加計算而得出,𝑁為虛擬點光 源的法向量,其中包含 x、y、z 三個分量。 𝑠⃗ = ( 𝑠0 , 𝑠1 , 𝑠2 , 𝑠3 ) √𝜋 ≅ 0.8862269255 2 𝜋 𝑆1 = −√ 𝑁𝑦 ≅ −1.0233267079𝑁𝑦 3 𝑆0 =. 𝜋 𝑆2 = √ 𝑁𝑧 ≅ 1.0233267079𝑁𝑧 3 𝜋 𝑆3 = −√ 𝑁𝑥 ≅ −1.0233267079𝑁𝑥 3 最終虛擬點光源的注入公式為下,N 為虛擬點光源數量,𝑅𝑖 代表虛擬點光源 的輻射強度,也就是前段所提的𝐼𝑝 (𝜔)。 𝑁. 𝑐⃗ = ∑. 𝑠⃗𝑅𝑖. 𝑖=1. 這裡題外說明一下,由於虛擬點光源雖然有輻射強度的不同,但也有不同顏 ⃗⃗⃗⃗⃗ ⃗⃗⃗⃗⃗ ⃗⃗⃗⃗⃗ 色的區別,所以會用三組球諧函數的係數(𝐶 𝑅 、𝐶𝐺 、𝐶𝐵 ),分別記錄紅綠藍光輻射 的強度,此時在壓縮過程所用的𝑅𝑖 ,需再乘上紅、綠或藍的分量,下列公式以紅 色作舉例。 ⃗⃗⃗⃗⃗ 𝐶𝑅 = ∑. 𝑁. 𝑠⃗𝑅𝑖 × 𝑅. 𝑖=1. 14.
(22) 3.4 光能量傳遞 第三個步驟是光能量傳遞,也就是說把上一步驟儲存在空間中的光容積傳遞 出去,傳遞方法是對所有光容積做檢查,如果有包含光輻射強度則往自身上下左 右前後(六個方向的相鄰網格)的光容積做傳遞的動作,由於一次檢查只能傳遞一 單位長度,所以需經過多次反覆地傳遞,才能達到傳遞的效果,如下圖 3.4.1。. 圖 3.4.1:光能量傳遞[Wan11] 當原光容積傳遞到目標光容積的強度時,會假設有兩種接受面(指目標光容積 的六面),如下圖 3.4.2,一種是正向面(實線箭頭),共一個面;另一種是側向面(虛 線箭頭),共四個面,背面不算是接受面,圖中為二維示意圖所以才兩條虛線。. 圖 3.4.2:光能量傳遞示意圖(二維示意圖) 15.
(23) 依據上段,每當原光容積傳遞時,最多有六個方向(因為可能某方向無光容積), 並且傳遞到目標光容積共有五個接受面,所以一個光容積的一次傳遞最多會有 6 × 5 = 30的光輻射傳遞計算;單一光輻射傳遞計算方法是,由原光容積的球諧 函數代入光輻射貢獻方向後,還原出對該接受面的輻射強度,反覆計算五次(五面), 然後再把五個接受面收到的光輻射壓縮到目標光容積。 球諧函數還原出光輻射貢獻的公式如下,R 為光輻射強度,𝑐⃗為球諧函數的四 個參數,代入欲求方向𝑣⃗即可。 R = 𝑆0 𝑐0 + 𝑆1 𝑐1 + 𝑆2 𝑐2 + 𝑆3 𝑐3 𝑐⃗= (𝑐0 , 𝑐1 , 𝑐2 , 𝑐3 ) 𝑆0 = 𝑆1 = − 𝑆2 = 𝑆3 = −. 1 2√𝜋. √3 2√𝜋 √3 2√𝜋 √3 2√𝜋. ≅ 0.2820947918. 𝑉𝑦 ≅ −0.4886025119𝑉𝑦 𝑉𝑧 ≅ 0.4886025119𝑉𝑧 𝑉𝑥 ≅ −0.4886025119𝑉𝑥. 同樣依據原本論文的公式分析[Andreas Kirsch 2010],藉由立體角(Solid Angle) 與距離等等因素,推算得到兩個傳遞光輻射能量時的衰減值,當接受面為正向面 為 0.400669685、側向面為 0.4234313544。因此在球諧函數還原出光輻射貢獻後, 需依照接受面的不同乘上不同的衰減值,再來才把衰減後的輻射壓縮到目標光容 積內。. 16.
(24) 3.5 繪製場景 最後一個步驟當然就是繪製場景,必須想辦法應用剛剛算出來的光容積,使 場景中的物體能夠受到光容積輻射的影響,產生間接照明。 當知道該物體所在的是哪格光容積時,就去還原該光容積的球諧函數,也就 是說只會受到一個光容積影響,還原方法如同上一步驟,代入球諧函數中心到該 物體的方向,即可還原出間接照明的輻射強度。如下圖 3.5,眼睛看到牆上的一 個點後,該點所在的光容積會給予輻射貢獻。. 圖 3.5:繪製場景[Wan11] 如果在這步驟要使用 OpenGL 繪圖管線繪製,可以把光容積資料儲存在 3D 貼圖的格式,在 Shader 裡可運用 sampler3D 這個資料型態傳入,來達到即時運算 的效果。資料傳入 Shader 後,先找尋該物體在哪格光容積,然後再還原被壓縮的 球諧函數,算出間接照明的貢獻,再最後計算顏色時也可依照材質的不同分配不 同比例給直接照明與間接照明。. 17.
(25) 第四章 系統實作 4.1 系統流程 本論文為了能夠了解光傳播容積演算法的優缺點,以便與其他常見的全域照 明方法作比較,例如光貼圖與光探頭,並且想要嘗試不同參數在畫面品質和速度 上有如何變化,所以實作一套光傳播容積的系統。 依照上一章分析的細節利用 C++實作,包含四大步驟、每一個步驟中所用到 的資料和數學所推導出的公式,此系統交互使用 OpenGL 的繪圖管線與 CPU 運算, 如下圖 4.1 系統流程圖,一開始讀入 Shader 文檔和模型資料,並且初始化完成, 再來進入光傳播容積的四大步驟,然後觀察光源或物體是否被移動,如果有就回 到產生虛擬點光源更新光容積的資料,反之沒被移動則直接繪製場景即可。. 讀入Shader和模型 和初始化 產生虛擬點光源 虛擬點光源注入光 容積 光能量傳遞. 繪製場景. • 初始化光容積的資料 • CPU運算 • 利用RSM的方法 • GPU運算 • 迴圈對虛擬點光源做取樣 • CPU運算 •迴圈對光能量傳遞 • CPU運算. 是. 否. • OpenGL繪圖管線畫出 • GPU運算. 圖 4.1:系統流程圖(綠色使用 CPU、藍色使用 GPU 運算). 18. 檢查光源 或物體是 否被移 動?.
(26) 一開始讀入 Shader 時,需要編譯兩份 Shader,分別是要運用在產生虛擬點光 源和繪製場景,兩份都具有自己的 Vertex Shader 和 Fragment Shader;再來是讀入 模型,由於實驗時是使用 Sponza 場景,場景中包含多個顏色區塊,並且有類似騎 樓的陰暗區適合觀察全域照明的效果,因此使用 Assimp(讀取模型資料的函式庫) 加上 DevIL(讀取圖片資料的函式庫)來完成讀入模型的工作。然而接下來的四大 步驟其實都是在操作光容積資料,下一段會詳細說明。. 4.2 光容積的資料結構與使用 首先在 CPU 端初始化儲存光容積的資料結構,本系統利用 Vector 串接三維 光容積的資料,例如 vector<SH> RedColorSHs,其中儲存的資料就是球諧函數的 四個係數,可以使用 struct 包起來,上一章有提到有三種顏色,所以需要三組 Vector 容器去裝光容積資料,這裡使用 Vector 的好處是可以方便接受不同大小的光容積, 像是32 × 32 × 32、10 × 10 × 10等等。 下一步產生虛擬點光源時,使用 GPU 和 OpenGL 的繪圖管線來運算,依照 Reflective Shadow Map(RSM)的演算法,把光源當眼睛並且使用單一 FrameBuffer 輸出多張貼圖,每張貼圖都儲存不同的資訊,深度(Depth)、位置(Position)、光源 方向(Light)、法向量(Normal)和顏色(Color),最後再使用 glGetTexImage 把資料從 貼圖中抓出來;如下表 4.2.1,此為一個光源在 Sponza 的正上方時,利用 RSM 所 產生的資料並輸出的多張貼圖。. 19.
(27) 深度(Depth). 位置(Position). 法向量(Normal). 光源方向(Light). 顏色(Color). 表 4.2.1:RSM 產生的資料 接下來兩個步驟,虛擬點光源注入光容積和光能量傳遞都是直接使用 CPU 端運算。注入光容積時,用一個迴圈對所有虛擬點光源做取樣,判斷該點光源是 屬於哪一格光容積後,就依照上一章分析的公式壓縮進去,如下圖 4.2.1,白點即 為虛擬點光源,白線為光容積網格。. 圖 4.2.1:注入光容積 20.
(28) 光能量傳遞時,必須先設定一個傳遞次數值,它關係到間接照明的範圍,同 樣的依照傳遞公式越遠的會被遞減,用一個迴圈重複執行光能量傳遞,對所有光 容積做檢查並傳遞出去,算是一次傳遞,執行完傳遞次數即可。如下圖 4.2.2,左 圖傳遞次數為 0、中圖傳遞次數為 1、右圖傳遞次數為 2。. 圖 4.2.2:光能量傳遞次數示意圖 最後一個步驟繪製場景,同樣使用 GPU 和 OpenGL 的繪圖管線來運算,除 了最基本的場景資料要傳送給 Shader,也要傳遞光容積的資料,正好在 Shader 裡可以運用 sampler3D 這資料型態,這個指的是說三維貼圖(不同於 sampler2D), 每個像素可以儲存四個浮點數(RGBA),可以放入球諧函數的四個係數,並且三維 的特性與光容積非常相容,此時要傳遞三個 sampler3D 參數,一樣是代表紅色、 綠色、藍色,最後要運用該資料還原光輻射時,使用 texture3D(Texture, index).xyzw 即可抓取到資料。如下圖 4.2.3,需要還原三組光容積。. 圖 4.2.3:三組光容積示意圖 21.
(29) 第五章 實驗與討論 5.1 實驗環境與基本效果展示 本章實驗利用上一章所實作的系統來實驗光傳播容積,它適用於解決全域照 明中漫間反射的問題,利用可接受內誤差的預估計算,達到即時運算的效果,如 果使用光線追蹤來達到漫間反射,會需要較久的時間才能收斂到如此的效果。不 僅如此,不需任何預先計算,可以完成全場景動態,包含物體和光源都可即時運 動,這也是此演算法比光貼圖和光探頭還要厲害的地方。下表 5.1.1 和表 5.1.2 分 別是實驗環境和光傳播容積的參數設定。 中央處理器 (CPU). Intel(R) Core(TM) i5-3427U CPU , 1.80GHz. 圖形處理器 (GPU). Intel(R) HD Graphics 4000. 主記憶體. 4GB. 作業系統. Windows 10. 開發軟體. Microsoft Visual Studio 2015 表 5.1.1:實驗環境. RSM 產生的虛擬點光源數. 300 × 300. 光容積的格子數. 32 × 32 × 32. 光傳遞次數. 4. 表 5.1.2:光傳播容積的參數設定. 22.
(30) 下表 5.1.3 是依照上一頁的實驗環境和參數設定,所繪製的各個角度的場景, 並且分為 A 組(無光傳播容積)和 B 組(使用光傳播容積),以便對照看效果,圈圈 的地方有較為顯著的差異,主要是在石柱上和陰影處的全域照明。 A 組(無光傳播容積). B 組(使用光傳播容積). 表 5.1.3:光傳播容積的效果比較 23.
(31) 至於效能方面,A 組(無光傳播容積)可以保持 100~110 fps(frames per second); B 組(使用光傳播容積),當光源未移動同樣可以保持 100~110 fps,而當光源移動 時會降至 30~40 fps,如下表 5.1.4。因為其中多了三個步驟,就是產生虛擬點光 源、注入光容積、光能量傳遞。 B 組(使用光傳播容積) A 組(無光傳播容積) 光源(或物體)未移動. 光源(或物體)移動. 110~120 fps. 25~30 fps. 110~120 fps. 表 5.1.4:有無光傳播容積的效能比較 分析光源移動時所拖慢的時間,因此對每個步驟花的時間做測驗,如下表 5.1.5,每個步驟所花的平均時間與總時間;產生虛擬點光源(第一步)與繪製場景 (第四步)同樣是用 GPU 運算,並執行一輪繪圖管線,因此所花時間差不多;正巧 注入光容積(第二步)和光能量傳遞(第二步),所花時間也相當接近,所以花費總時 間約為原來的四倍,但是在視覺上仍有即時運算的效果。 產生虛擬點光源. 0.008s. 注入光容積. 0.01s. 光能量傳遞. 0.009s. 繪製場景. 0.009s. 總時間. 0.036s ( 27.3 fps ). 表 5.1.5:光傳播容積每個步驟所花的平均時間 24.
(32) 5.2 不同參數設定的實驗 I.. 調控虛擬點光源數: 發現只要超過一定數量對全域照明的效果就不會太大變化,也就是說只要確. 保每格光容積的取樣足夠,即可有不錯的效果,相對為了製造陰影所需的虛擬點 光源可能需要更多,虛擬點光源數太少會發生像陰影破洞和一塊一塊的全域照明 色塊。如下表 5.2.1,虛擬點光源數為 50 × 50、300 × 300、500 × 500。 效能上虛擬點光源數量唯一會影響注入光容積的時間,因為後面步驟已被壓 縮到光容積裡,跟虛擬點光源數量無關;因此對注入光容積的時間影響為 O(n), n 為 RSM 的貼圖像素總大小(長×寬)。 虛擬點光源數 50 × 50. 300 × 300. 500 × 500. 表 5.2.1:虛擬點光源數不同之比較 II.. 調控光容積的格子數: 雖然這裡是說光容積的格子數,不如說是格子長寬大小比較適當,因為要把. 相同物體包起來切格子時,切越多次格子數越多越細緻,切越少次格子數越少越 粗糙,如下表 5.2.2,實驗三種切割次數為 16、32、48(每邊相同)。 25.
(33) 效能上光容積的格子數量可能會影響注入光容積和光能量傳遞的時間,光能 量傳遞會因為需要傳遞的格子數成長,跟著變得更耗時。同時間也影響到光傳遞 次數的設定,因為當切得更細時,則需要執行更多次的傳遞,才能完全表現全域 照明的效果。 光容積的格子數 16 × 16 × 16. 32 × 32 × 32. 48 × 48 × 48. 表 5.2.2:光容積的格子數不同之比較 III. 調控光傳遞次數: 光傳遞次數直接關係到間接照明的距離,假設未執行光能量傳遞,此時光容 積只會對自己格子內的物體作影響,傳遞出去才能傳播光輻射,並且模擬出光輻 射漫間反射的效果,如下表 5.2.3,光傳遞次數為 0、2、4,由圖可以看到光輻射 漸漸傳送出去。 效能上光傳遞次數只有影響光能量傳遞的時間,對光能量傳遞的時間影響為 O(n),n 為光傳遞次數,多傳遞一次相當於多一倍的時間,當然不一定正好多一 倍,因為每次需要傳播的光輻射數量也不同。. 26.
(34) 光傳遞次數 0. 2. 4. 表 5.2.3:光傳遞次數不同之比較. 5.3 光傳播容積與其他方法之比較 I.. 與光貼圖、光探頭之比較: 光貼圖與光探頭皆需要預先計算,光傳播容積只需要初始化光容積資料即可;. 但在運行期間如果光源移動時,光貼圖和光探頭無法解決此問題,而光傳播容積 需要消耗一段運算才可以達到此效果,如下表 5.3.1。 光傳播容積. 光貼圖. 光探頭. (Light maps). (Light probes). (Light propagation volumes). 預先計算. 需要. 需要. 不用. 運行期間. 極少運算. 極少運算. 記憶體消耗. 每個面一張貼圖. 球諧函數係數 ×個數. 球諧函數係數 ×光容積格子數. 支援動態物體. 無法. 可以. 可以. 支援動態光源. 無法. 無法. 可以. 極少運算(光源物體靜止) 複雜運算(光源物體移動). 表 5.3.1:光傳播容積與光貼圖、光探頭之比較 27.
(35) II.. 與光線追蹤步驟之比較: 與常見的光線追蹤(Ray Tracing)方法做比較,有些步驟相當類似,希望可以. 有不同的啟發;發現光容積傳播犧牲了精確度,簡化虛擬點光源的資訊,並利用 網格代表並傳播,與實際光源的傳播法還是有所差異,如下表 5.3.2。 光容積傳播. 光子映射. (Light propagation volumes). 雙向路徑追蹤. (Photon mapping). (Bidirectional path tracing). 產生虛擬點光源 虛擬點光源注入. 產生光子 (Generate photons). 光容積 光能量傳遞 繪製場景 (還原球諧函數). 產生光路徑 (Generate light paths). 傳遞光子 (Transport photons) 繪製場景. 繪製場景. (Sample photons. (Vertex connection. and Vertex merging). with eye paths and light paths). 表 5.3.2:光傳播容積與光線追蹤之比較 光子映射會先產生光子如同虛擬點光源一樣,但光子會依照物體性質穿透折 射和反射,也就是傳遞光子,直到吸收面(Diffuse surface)則停止,這點與光容積 傳播不太相同,最後繪製場景時對光子取樣,並用 Vertex merging 的方式收集對 該點的光貢獻;雙向路徑追蹤則是從光源產生多條光路徑,此光路徑也會折射和 反射,在繪製場景時眼睛路徑與光路徑進行 Vertex connection,完成一條路徑即 可計算出一次光貢獻。這兩種方法皆需要蒙特卡羅方法(Monte Carlo method)的幫 助,往往收斂到最後有不錯的圖片表現,並可以達到焦散的效果,但都會消耗大 量的時間無法達到即時運算。 28.
(36) III. 與其他即時運算演算法之比較: Voxel Cone Tracing[CNS11]是光傳播容積之後發表的演算法,一樣是即時運 算下解決全域照明的問題,但其作法不太相同。一開始一樣是由光源產生許多虛 擬點光源,下一步把在場景中的光輻射資訊以 MIP Mapping 的方式儲存在 Voxel Brick 裡,同樣有使用特殊的壓縮法,叫 Spherical Gaussian,最後在計算場景時, 會在眼睛所看到的位置依照材質的不同產生 Diffuse Cone 和 Specular Cone,這個 東西會對某方向做取樣,而取樣的目標就是 Voxel Brick 裡資訊。它跟光傳播容積 不一樣的點是可以約略計算出 Glossy 的效果,並且保持即時的運算,因此使 CryENGINE 也加入該演算法。 另一篇想提及的論文是 Precomputed Illuminance Composition[JKG16],一樣 適用於解決即時運算的全域照明,討論這篇是因為它的資料結構不同於光貼圖或 光探頭,有自己特殊結構去紀錄光照資訊。在產生許多虛擬點光源後,把資訊加 入到樹狀結構的 Light Surfels,然後依照樹狀結構將光能量散步到各層,再將其 中有能量的 Surfel 傳遞到欲知像素點周圍的八個 SH Caches,最後進行內插即可 完成全域照明。它雖然計算起來較為繁複,並且需預先建構 Light Surfels,但可 以解決 Area Lighting 和多次間接照明反彈的問題。. 29.
(37) 第六章 結論與未來方向 6.1 結論 本篇論文分析光傳播容積演算法,能即時運算出全域照明中的漫間反射,能 如此快速主要分析有三個原因,第一是網格結構的儲存光輻射資訊,第二是用低 階層的球諧函數來壓縮儲存資料,第三是用簡化且獨特的方式模擬傳遞光能量, 雖然因為簡化計算導致不像光線追蹤那樣精確,但還在可接受內誤差內,完成漫 間反射的效果。 論文中段把光傳播容積的系統實作出來,過程中遇到的資料結構的問題或是 演算流程上的細節也記錄在此,針對系統也做許多不同參數的測試,同時比較效 能與畫面的差異,而不同場景也會需要不同的參數,主要影響原因是場景的大小 與光容積的大小有關,如何搭配正確的參數也是一個值得研究的地方,並且需要 從畫面品質與效能之間取得平衡。 論文後段對光傳播容積與常見的光貼圖、光探頭做優勢比較,還有與光線追 蹤中的兩種方法做對照,同時與其他即時運算演算法做步驟與優劣的分析,也希 望未來能從此地著手,激盪出不同的計算方法,不外乎追求的就是更快速地計算 出更真實的圖片。. 30.
(38) 6.2 未來方向 I.. 原系統的加速: 因為本論文所實作的光傳播容積系統步驟中,中間兩個步驟是直接由 CPU. 運算而且未經加速的,如果能把他們利用 OpenGL 管線實行 GPU 加速,或是用 OpenCL 直接平行計算,就可以達到更即時的效果。 II.. 光容積資料結構的應用: 例如混合計算加速,用光線追蹤來解決全域照明的焦散,再使用光傳播容積. 輔助算出全域照明的漫間反射,兩者各自運算自己的強項,最後混合輸出圖片, 達到更快速的效果。 或是在光線追蹤中善加利用球諧函數的想法,像是雙向路徑追蹤法每當產生 的路徑越來越深時,計算量也會變得越來越重,當路徑太深或是打到的區域過於 複雜,可以考慮使用光容積的方法來代替,也就是說回傳的光輻射強度可以使用 儲存在空間中的光容積還原,因為路徑太深貢獻變少,所以用預估的光容積方法 應該也會相當適合。 III. 與其他即時運算的演算法做研究比較: 在光傳播容積演算法(09 年)之後,陸續也有不同的即時運算的全域照明演算 法,像是 Voxel-based global illumination [THGM11]、Voxel Cone Tracing[CNS11], 有些也已經實作在遊戲引擎上,雖然同樣用到網格的概念,但是用法不同、似乎 在細節上也有不錯的表現,因此有許多研究的價值和參考的地方。 31.
(39) 參考文獻 相關研究論文 [CNS11]. C Crassin, F Neyret, M Sainz : Interactive Indirect Illumination Using Voxel Cone Tracing. In Proc. of I3D, ACM (2011).. [DS05]. C Dachsbacher, M Stamminger : Reflective shadow maps. In Proc. of I3D (2005).. [DK09]. C Dachsbacher, J Kautz : Real-time global illumination for dynamic scenes. In ACM SIGGRAPH 2009 Courses (2009).. [JKG16] J Jendersie, D Kuri1, T Grosch ; Precomputed Illuminance Composition for Real-Time Global Illumination. In Proc. of I3D, ACM (2016). [KD10]. A Kaplanyan, C Dachsbacher : Cascaded light propagation volumes for real-time indirect illumination. In Proc. of I3D, ACM (2010).. [THG11]. S Thiedeann, N Henrich, T Grosch, S Muller : Voxel-based global illumination. In Proc. of I3D, ACM(2011).. [Wan11]. X Wang : Advanced Computer Graphics CS 563, VPL‐based Real‐Time GI,Algorithm Light Propagation Volumes.. [WW93] J Wernecke, K Wollman : Open Inventor Mentor, 2nd Edition - Volume II,5.1.3. What is Real Time Ray-tracing?. 32.
(40) 相關研究網站 [1] Opengl-Tutorial:http://www.opengl-tutorial.org/ [2] Lighthouse3d.com:http://www.lighthouse3d.com/ [3] I3D 2010 Cascaded Light Propagation Volumes for Real Time Indirect Illumination: http://www.crytek.com/cryengine/cryengine3/presentations/cascaded-light-propag ation-volumes-for-real-time-indirect-illumination [4] Crytek Light Propagation Volumes: http://www.crytek.com/download/Light_Propagation_Volumes.pdf [5] Unreal Engine Light Propagation Volumes: https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows /LightPropagationVolumes/index.html [6] LPV(Light Propagation Volume) by unityshader: http://unityshader.hatenablog.com/entry/2014/05/10/040142 [7] Graphenix by linyizsh: http://www.cnblogs.com/linyizsh/archive/2010/02/03/1662310.html [8] BlackHC's Adventures in the Dev World: http://blog.blackhc.net/2010/06/rotation-of-low-order-spherical-harmonics/. 33.
(41) 相關圖片來源 圖 2.1:WERNECKE J., WOLLMAN K.:Open Inventor Mentor, 2nd Edition - Volume II,5.1.3. What is Real Time Ray-tracing? 圖 2.2:Global Illumination Wiki https://en.wikipedia.org/wiki/Global_illumination 圖 2.3.2:Spherical harmonics Wiki https://en.wikipedia.org/wiki/Spherical_harmonics 圖 2.3.2:Unity – Manual(LightProbes) https://docs.unity3d.com/Manual/LightProbes.html 圖 3.2、圖 3.3.1、圖 3.3.2、圖 3.4.1、圖 3.5: Advanced Computer Graphics CS 563, VPL‐based Real‐Time GI, Algorithm Light Propagation Volumes. 34.
(42)
相關文件
• Richard Szeliski, Image Alignment and Stitching: A Tutorial, Foundations and Trends in Computer Graphics and Computer Vision, 2(1):1-104, December 2006. Szeliski
command tells Vim to run the text through a UNIX command.The ‘a tells the editor that the text to be worked on starts at the current line and ends at mark a.. The command that
基本概念 有效教學 差異化教學 多元化評量 適性輔導... A-5-3教學活動中融入學習策略的指導
(一)是一套 有組織、有 系統、有結 構的記錄和 文件。.. (二)可以顯 示教師在某
1.個別或小組 合作寫出森鐵 與花東評論比 較文章 2.自主撰寫森 鐵仿寫文章..
一、報名表(A4 紙張、附 2 吋正面脫帽相片 1 張,粘貼於報名表照片欄內,本表
除了酒店、交通及景點,還
(A) File Transfer Protocol, FTP (B) Electronic Mail, E-Mail (C) World Wide Web, WWW (D) Word Wide Web,