• 沒有找到結果。

使用光線追蹤在OptiX框架下之蒙地卡羅路徑追蹤演算法分析比較

N/A
N/A
Protected

Academic year: 2021

Share "使用光線追蹤在OptiX框架下之蒙地卡羅路徑追蹤演算法分析比較"

Copied!
57
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學理學院 資訊工程學系 碩士論文. Department of Computer Science & Information Engineering College of Science. National Taiwan Normal University Master’s Thesis. 使用光線追蹤在 OptiX 框架下 之蒙地卡羅路徑追蹤演算法分析比較 Comparison and Analysis of Monte Carlo Path Tracing Algorithms on Nvidia OptiX Ray Tracing Framework 吳紹瑋 Wu, Shao-Wei 指導教授:張鈞法 博士. 中華民國 109 年 7 月 July 2020.

(2) 摘要 傳統電腦圖學使用光柵化來繪製 3D 物件,但該方法對於擁有反射與折射等 場景物件中,無法有較好的真實畫面。因此我們要使用基於物理性質計算的光線 追蹤技術。在現實世界中,計算的資訊量是趨近於無限的,因此我們只能透過採 樣來計算,即便如此運算的需求還是非常的高。 近年來計算機圖學領域隨著硬體設備的提升,即時的光線追蹤運算從二十年 前的理論逐漸轉向可以實際達成。Nvidia 推出的 RTX 系列圖形處理器與 OptiX 光 線追蹤框架,提供使用者研究平行化部屬光線追蹤理論,本文中將使用 OptiX 6.5 框架開發光線追蹤程式,研究不同場景與演算法之差異。主要探討演算法有原本 圖學使用方法光柵化 (Rasterization) 與光線追蹤方法蒙地卡羅路徑追蹤(Monte Carlo Path Tracing),雙向路徑追蹤(Bidirectional Path Tracing),混合光線追蹤 (Hybrid Ray Tracing),比較各自演算法於不同圖形處理器和場景所產生渲染效果 與速度。. 關鍵字:OptiX、蒙地卡羅路徑追蹤、雙向路徑追蹤、混合光線追蹤. ii.

(3) ABSTRACT Traditional computer graphics uses rasterization to draw 3D objects, but this method does not have a good rendering for scene objects with reflection and refraction. Therefore, we need to use ray tracing technology based on the calculation of physical properties. In the real world, the amount of information calculated is close to infinite, so we can only calculate by sampling, even if the demand for such calculations is still very high.. In recent years, with the improvement of hardware devices in computer graphics, real-time ray tracing operations have gradually become practical from the theory of 20 years ago. Nvidia's RTX series of graphics processors and OptiX ray tracing framework provide a simple, recursive, and flexible pipeline for accelerating ray tracing algorithms. In this paper, we will use the OptiX 6.5 framework to develop ray tracing programs to compare the differences between different scenes and algorithms. we discuss ray tracing algorithms Monte Carlo Path Tracing, Bidirectional Path Tracing, Hybrid Ray Tracing, and compare the effect and speed of each algorithm on different graphics processing unit.. Keywords : OptiX, Monte Carlo Path Tracing, Bidirectional Path Tracing, Hybrid Ray Tracing.. iii.

(4) 目錄 附表目錄.................................................................................................................. vii 附圖目錄................................................................................................................. viii 第一章 緒論 ...............................................................................................................1 1.1. 研究動機 .................................................................................................2. 1.2. 研究目標 .................................................................................................3. 1.3. 論文架構 .................................................................................................3. 第二章 文獻探討 .......................................................................................................4 2.1. Nvidia OptiX...........................................................................................4 2.1.1. OptiX 框架介紹...........................................................................5. 2.1.2. OptiX Program ...........................................................................6. 2.1.3. OptiX Geometry .........................................................................8. 2.2. 光線追蹤 (Ray Tracing)....................................................................... 11. 2.3. 蒙地卡羅路徑追蹤 (Monte Carlo Path Tracing) ................................ 12. 2.4. 雙向路徑追蹤 (Bidirection Path Tracing)...........................................13. 2.5. 混合光線追蹤 (Hybrid ray tracing) .................................................... 14. 第三章 系統實作 ..................................................................................................... 15 3.1. 主程式架構 ........................................................................................... 16 3.1.1. 初始化 OptiX (Initialize OptiX) ............................................... 17 iv.

(5) 3.2. 3.1.2. 初始化架構程式 (Initialize Program)......................................18. 3.1.3. 初始化場景 (Initialize Scene)................................................... 20. 3.1.4. 執行 OptiX (OptiX Launch) ..................................................... 21. 光線追蹤 ............................................................................................... 22 3.2.1. 蒙地卡羅路徑追蹤 .................................................................... 22. 3.2.2. 雙向路徑追蹤 ............................................................................ 24. 3.2.3. 混合光線追蹤 ............................................................................ 26. 3.3. 材質公式計算........................................................................................ 27. 3.4. 光源連接計算........................................................................................ 29. 第四章 實驗與結果分析.......................................................................................... 30 4.1. 4.2. 4.3. 演算法比較 ........................................................................................... 31 4.1.1. 環境配置 .................................................................................... 31. 4.1.2. 實驗結果 .................................................................................... 32. 場景比較 ............................................................................................... 36 4.2.1. 環境配置 .................................................................................... 36. 4.2.2. 場景配置 .................................................................................... 36. 4.2.3. 實驗結果 .................................................................................... 37. 裝置比較 ............................................................................................... 40 4.3.1. 裝置規格 .................................................................................... 40 v.

(6) 4.3.2. 實驗結果 .................................................................................... 41. 第五章 結論與未來研究.......................................................................................... 47 參考文獻................................................................................................................... 48 參考資料................................................................................................................... 49. vi.

(7) 附表目錄 表 3.1 材質公式 ..................................................................................................... 28 表 3.2 光源連接公式 ............................................................................................. 29 表 4.1 演算法比較-實驗環境配置 ......................................................................... 31 表 4.2 演算法比較-Bidirection Path tracing 比較................................................... 32 表 4.3 演算法比較-Hybrid ray tracing 比較 ........................................................... 33 表 4.4 場景比較-實驗環境配置............................................................................. 36 表 4.5 場景比較-場景配置 .................................................................................... 36 表 4.6 場景比較- Bidirection Path tracing 比較 ..................................................... 37 表 4.7 場景比較-Hybrid ray tracing 比較 ............................................................... 38 表 4.8 裝置比較-GTX1060 設備規格 .................................................................... 40 表 4.9 裝置比較-RTX2060 設備規格 .................................................................... 40 表 4.10 裝置比較-Sponza 使用 BDPT 方法數據 ................................................... 41 表 4.11 裝置比較-Bathroom 使用 BDPT 方法數據 ............................................... 42 表 4.12 裝置比較-Sponza 使用 Hybrid Ray Tracing 方法數據 .............................. 43 表 4.13 裝置比較-Bathroom 使用 Hybrid Ray Tracing 方法數據 .......................... 45. vii.

(8) 附圖目錄 圖 2.1 OptiX 框架流程圖 ...........................................................................................7 圖 2.2 OptiX Geometry Group 結構圖 ......................................................................9 圖 2.3 OptiX Group 結構圖 ..................................................................................... 10 圖 2.4 光線追蹤示意圖........................................................................................... 11 圖 2.5 蒙地卡羅路徑追蹤示意圖 ...........................................................................12 圖 2.6 雙向路徑追蹤示意圖 ................................................................................... 13 圖 3.1 OptiX 主程式流程架構圖 .............................................................................16 圖 3.2 OptiX 主程式初始化流程圖 ......................................................................... 17 圖 3.3 OptiX 主程式初始化架構程式流程圖 .......................................................... 18 圖 3.4 OptiX 主程式初始化場景流程圖.................................................................. 20 圖 3.5 OptiX 蒙地卡羅路徑追蹤流程圖.................................................................. 22 圖 3.6 OptiX 雙向路徑追蹤流程圖 ......................................................................... 24 圖 3.7 OptiX 混合光線追蹤流程圖 ......................................................................... 26 圖 3.8 材質公式圖 .................................................................................................. 27 圖 4.1 裝置比較-Sponza 使用 BDPT 方法長條圖 .................................................. 41 圖 4.2 裝置比較-Bathroom 使用 BDPT 方法長條圖 .............................................. 42 圖 4.3 裝置比較-Sponza 使用 Hybrid Ray Tracing 方法長條圖 ............................. 44 圖 4.4 裝置比較-Bathroom 使用 Hybrid Ray Tracing 方法長條圖 ......................... 46 viii.

(9) 第一章 緒論 近幾年計算機圖學的領域隨著硬體設備顯示卡的推出實現實時的光線追蹤顯 示畫面已經是一個趨勢,相較於以往的算圖方法¬光柵化(Rasterization),光線追蹤 藉由模擬眼睛和光源連線的光線路徑,可以更為精確地模擬真實的光線表現效果, 例如:眼睛看向鏡子時反射的效果,範圍光所讓物體產生的軟陰影(soft shadow)效 果等。. 藉由模擬光線路徑後,為使路徑的採樣更加正確,導入了材質的物理特性雙 向反射分布函數(BRDF),定義光不同的材質產生隨機反射的方向路線,此方法可 使光對場景的影響更為細緻,例如:產生場景間接照明(Indirect illumination),但為 了達到此效果我們會比起光柵化的技術有較多的運算需求。. 除了追求更為真實的場景,同時也討論如何能夠將運算的速度提升並同時保 有好的繪圖效果,因此也提出混合光線追蹤(hybrid ray tracing),對於特定材質使 用完整的路經追蹤,其他則使用類光柵化效果直接運算,在速度與效果之間取得 平衡。. 1.

(10) 1.1. 研究動機 NVIDIA 近年提出硬體設備 GPU 由硬體設備支援光線追蹤所產生的大量運. 算需求,並且提供光線追蹤的程式框架 OptiX 架構,架構中將光線追蹤的需求切 割成為各類型的程式模塊提供平行化運算以加速整個運算速度,本論文中將使用 該架構,並研究使用該框架如何加入不同的光線追蹤之演算法,提供何種演算法 適合運用於何種場景之中。. 2019 年知名遊戲 Minecraft 對外宣布將在 Windows 10 Bedrock 版支援光線追 蹤技術,同時 Nvidia 也推出 RTX 顯示卡與更新關聯的驅動程式讓遊戲可以使用 光線追蹤,並且讓 RTX 顯示卡硬體加速支援運算。. 這些因素讓我認為光線路徑追蹤未來的發展無可限量,因此投身於相關演算 法的應用,並在實際場景之中比較不同的效率。. 2.

(11) 1.2. 研究目標 研究目標分為三個階段,OptiX 框架開發,研究光線追蹤演算法與場景演算. 法比較。 a.. Nvidia OptiX 框架開發:學習 OptiX 框架,並且開發實驗程式。. b.. 光線追蹤演算法:研究光線追蹤相關演算法,光線追蹤、蒙地卡羅路 經追蹤、雙向連接路徑追蹤、混合。. c.. 場景與演算法比較:OptiX 開發光線追蹤演算法並實際使用於場景之 中。. 1.3. 論文架構 在本篇論文中將會依照順序,第二章將從介紹光線追蹤文獻與資料,首先介. 紹 Nvidia 所提出的 OptiX 架構,再分別探討不同光線追蹤演算法。 第三章將詳細介紹實驗程式,如何使用 OptiX 框架開發光線追蹤演算法,介 紹程式構造與如何演算法如何實現。 第四章主要顯示,將場景運行於本程式實驗的效果,提供不同的演算法策略 比較,並應用於不同設備(RTX、GTX)的效率。 最後第五章總結本文實驗結果,提出何種演算法能在特定場景中給予較為優 秀的繪圖效率,並提出未來可以提升改進的想法。. 3.

(12) 第二章 文獻探討 2.1 Nvidia OptiX 現在的 GPU 功能主要是一個很擅長使用平行化處理來運算,而電腦圖學恰 巧符合這項特性,對於電腦計算產出一張圖片所運行時每個像素皆須運行類似的 邏輯過程,因此我們可以將其平行化運算以使其快速運算完成,但是在典型的光 線追蹤邏輯中,會使著運算長度非常不規則,因此 Nvidia 提出 OptiX 框架解決了 光線追蹤在邏輯長度的差異,提出一套運算 API 將光線追蹤邏輯統整設計,透過 Nvidia CUDA 架構一起使用,妥善運用 GPU 的平行化特性使得開發光線追蹤的 工程師與研究者可以快速上手。. Nvidia OptiX 主要提供兩個部分,主機端 API 與平行端 CUDA 運作程式,主 機端 API 用來定義光線追蹤所需要用到的資料結構,例如:場景的物件格式、座 標系轉換與物件材質等。平行端 CUDA 運作程式提供工程師依照 OptiX 框架設計 光線追蹤演算法,例如:計算光線與物體的相交、產生新的路徑與計算顏色值等。 透過這兩部分的開發與設計,可以依據不同的需求進行編寫物件相交規則,路徑 策略演算法等。. 4.

(13) 2.1.1. OptiX 框架介紹. . Context : 執行 OptiX 的主結構. . Program : 平行化執行的光線追蹤 API 程式(參考 2.1.2). . Variables : 將資料傳至 OptiX 程式中. . Buffer : 多維度的資料儲存陣列提供 Program 運行時進行交互存取. . TextureSampler : 讀取 texture 的 buffer. . Geometry : 定義可以相交的一個物件,例如一個三角片(參考 2.1.3). . Material : 定義可以存取的一組物件材料數據(參考 2.1.3). . GeometryInstance : 將 Material 與 Geometry 結合的物件(參考 2.1.3). 5.

(14) 2.1.2. OptiX Program. OptiX Program 主要有下方 8 種類型,可提供開發者根據演算法與場景物件 需求,自由的編寫不同的動作,OptiX 框架中每個 program 有他自動執行的流 程,開發者僅需編寫好各 program 之內容,OptiX 將會自動使其最優化的平行使 用 GPU。 . Ray generation: 每一組光線追蹤的進入點,平行化在每個像素打出主光線取樣並回傳 計算結果至輸出緩衝中。. . Exception: 當出現錯誤時輸出堆疊錯誤資訊。. . Closest hit: 計算主光線交集場景時所運算的程式。. . Any hit: 計算其它光線交集場景時所運算的程式。. . Intersection: 實作光線追蹤交集的程式。. . Bounding box: 封裝物件的 BoundingBox 並在搜尋物件加速時執行。. . Miss: 計算光線未交集場景時所運算的程式。. 6.

(15) OptiX 運作流程由主程式呼叫 rtContextLaunch() 開始執行,執行呼叫的 RayGeneration Program,在這個程式中將讀取眼睛與像數點位置參數製作第一條 ray 並呼叫 rtTrace() 執行追蹤,開始追蹤後會進行整個 Geometry 樹狀結構的搜尋 可以透過編寫的加速結構去進行搜索,搜索到物件後執行 Intersection 判斷是否與 物件交集,如交集成功則向 rtTrace 回報成功,rtTrace 收到交集成功的訊息後會執 行 Closest Hit 計算顏色等資料處理,反之沒收到交集成功的訊息則會執行 Miss。 在 Closest Hit 程式中也可執行呼叫 rtTrace 來發起追蹤,但只能呼叫 Any Hit 程式 做為成功交集後所要執行的程式。. 圖片來源: OptiX 6.5 API Document. 圖 2.1 OptiX 框架流程圖. 7.

(16) 2.1.3. OptiX Geometry. OptiX 建立場景物件時,需根據規則建立一組物件群提供其自動產生加速結 構樹,加強交集計算時的運算速度。因此定義一套階層將物件、群組與選擇器 結合產生一棵整個場景的結構樹。. 8.

(17) . Optix::GeometryGroup GeometryGroup 是在 OptiX 中組成一組物件的基礎結構組,透過五個步驟將. 一個物件群組合而成。. 圖片來源: GTC 2018 San Jose, S8518 Tutorial. 圖 2.2 OptiX Geometry Group 結構圖 . 建立 Optix::Geometry: Geomtry 中會將物體的三角片或其他形狀資料儲存並且將計算交集的 Intersection 程式與運算加速結構的 BoundingBox 程式綁定。. . 建立 Optix::Material: Material 中會將物體的材質資料與貼圖資料儲存並且將交集後的運算程 式 ClosestHit 程式與 AnyHit 程式綁定。. . 建立 Optix::GeometryInstance: 在此將 Geometry 與 Material 結合成為一個物件實體。. . 建立 Optix::Acceleration: 建立一個在計算交集物件群時可以使用的加速方法。. . 建立 Optix::GeometryGroup: 在此將 GeometryInstance 與 Acceleration 組合成一組物件群體。 9.

(18) . Optix::Group Group 使用在建立整棵物件樹的資料集,將每一個建立好的. Optix::GeometryGroup 放入樹中產生整個場景的物件資料集,這裡將使用三個步 驟將整體場景建立完成。. 圖片來源: GTC 2018 San Jose, S8518 Tutorial. 圖 2.3 OptiX Group 結構圖 . 建立根群組: 建立一棵最初的群組並綁定一個加速運算的方法,讓其可以將其他場 景物件(GeometryGroup)加入其中. . Optix::Transform: 建立 Transform 矩陣,該矩陣是為物件座標系與世界座標系的轉換矩 陣,在此將該矩陣與 GeometryGroup 綁定,透過它可以達成物體的平 移、縮放等效果。. . 根群組加入每一組 Transform: 將每一組產生的 Optix::Transform 加入至根群組中 10.

(19) 2.2 光線追蹤 (Ray Tracing) 光線追蹤是一種三維物體模型顯示的一種運算方法。模擬攝影機位置為眼 睛出發點向螢幕中的像素點產生一條射線,延續射線向前運算是否相交三維座 標座標中的物體模型,並依照物體模型的材質決定顏色與光線的交互運算後回 傳並顯示。每隔像素透過一條一條的射線計算與統計模擬出真實的光能量如何 傳遞與影響呈現最後的成像圖片。. 如下圖所示場景中相機位置向著虛擬的影像網格中產生一條追蹤射線,運 算後相交於場景物件中,再產生第二條向光源的射線計算是否在陰影中,運算 後回傳顏色資料,並最終於螢幕中顯示顏色。. 圖片來源: Rray Tracing wiki 圖 2.4 光線追蹤示意圖. 11.

(20) 2.3 蒙地卡羅路徑追蹤 (Monte Carlo Path Tracing) 在 2.2 節中光線追蹤的方法,使電腦圖學踏入一個新的想法,而光線追蹤在 現實中的計算絕非僅有一次的計算就能完整地呈現顏色,現實中的物體會受的數 量趨近無限的光源交互影響,但我們要如何在電腦圖學繪圖的過程中模擬這麼多 的運算。因此產生了蒙地卡羅路徑追蹤法,該方法代表對每個像素的顏色為路徑 積分的解,意即模擬所有光線傳輸影響該物體的路徑積分後得出的顏色。. 𝐼𝑗 (𝑥̅ ) = ∫ 𝑓𝑗 (𝑥̅ )𝑑𝜇(𝑥̅ ) 在上述的公式中,j 代表像數點編號,𝑥̅ 代表一條路徑(光源𝑥0 至眼睛𝑥𝑘 ),𝑓(𝑥) 為測量函數定義為光源輻射度,乘上路徑吞吐量,再乘上眼睛感測度。這個方法 我們會模擬每一條射線,射線與物體相交後會再根據物體材質隨機產生下一個射 線,直到射線與光源相交,這個過程稱為產生一條路經。. 圖 2.5 蒙地卡羅路徑追蹤示意圖. 12.

(21) 2.4 雙向路徑追蹤 (Bidirection Path Tracing) 路經追蹤的方法是根據物理規則下,隨機採樣產生的結果。因此計算出最 後的顏色也是較為準確的,但是在這個方法中由於每條路徑必須滿足從眼睛延 伸至光源,如果對於光源被遮擋與材質較不易產生面向光源的取樣方向時,收 斂出最終顏色的時間就會非常緩慢。. 雙向路徑追蹤方法中,將分別從眼睛與光源的位置各自向外延伸路經,延 伸產生的路徑接與路徑追蹤的方法一樣,各自向外延伸幾次深度後,再透過強 制連接,將延伸的光源點與眼睛的物件點計算連接的合理度與是否互相遮擋, 諾為正常則視為一次完整的路徑計算。該方法設置不同的路徑深度進而得到不 同場景下較有效率的產出。. 圖 2.6 雙向路徑追蹤示意圖. 13.

(22) 2.5 混合光線追蹤 (Hybrid ray tracing) 在遊戲中,最主要玩家的基本需求就是 FPS 的顯示效率,人眼對於動化的需 求基礎是 30fps,而當玩家遊玩於競技類遊戲之中時,希望能有更好的遊戲顯示效 率而希望提升至 60fps 或 120fps 等。因此在追求畫面要有光線追蹤產生的顏色效 果與運算效率,從開源節流的角度來看除了提升硬體設備的運算能力外,需要降 低所需的運算量,因此提出混合光線追蹤的概念。. 由於雙向路經追蹤方法的計算量非常的大,根據設定的路徑深度量,每個像 素所需計算的量就必須這麼多,但在許多情境中如果光源與物體間並無遮擋大量 部份,或是場景中的材質(diffuse)並非需要特別的取樣方向時,我們就可以參考光 柵化的繪圖方法,進行路徑深度為 1 的特殊路徑策略,而需求某些特殊效果的材 質(spacular)時再將路徑深度大於 1,此方法可以根據材質與場景減少許多的運算 需求,進而產生提升 FPS 且效果並存的繪圖方法。. 14.

(23) 第三章 系統實作 本章節將詳細介紹使用 OptiX 框架所開發光線追蹤程式架構,主要由四個方 向來說明分別為主程式架構、演算法流程設計、材質公式計算、光源連接計算。. 主程式架構:使用 OptiX 進行開發所設計的主程式內容,說明如何使用 OptiX 讀取與建立場景,並且將平行化運算的程式匯入 OptiX 框架之中運行。. 演算法流程設計:本篇將第二章所提到不同的演算法,使用流程圖表現 program 之間的互動關係,詳細描述每個演算法的運作流程。. 材質公式計算:根據 BRDF 計算材質的公式方法 光源連接計算:計算光源連接的公式方法. 15.

(24) 3.1 主程式架構 在本論文中設計的 OptiX 流程架構分為四個部分,依序是初始化 OptiX、初 始化架構程式、初始化場景與 OptiX 執行,透過四個步驟將 OptiX 框架從頭到 尾安排與規劃設計出來,本節將依序描述每個部分的程式內容設計。. 圖 3.1 OptiX 主程式流程架構圖 16.

(25) 3.1.1. 初始化 OptiX (Initialize OptiX). 要執行 OptiX 框架需要建立一個 Optix::Context,爾後所有的程式設定與場 景物件等皆由這個 context 去產生與設定,在初始化框架內容需要設定可以使用 的裝置(CPU 或 GPU),再來我們會設定一個堆疊數字表示當發生錯誤時錯誤內 容的堆疊上限量。 因此這部分會使用到三個 API 1.. Optix::Context::create() : 建立一個 Context. 2.. setDevice(begin, end) : 設定使用的裝置. 3.. setStackSize(bytes) : 設定錯誤堆疊上限. 圖 3.2 OptiX 主程式初始化流程圖. 17.

(26) 3.1.2. 初始化架構程式 (Initialize Program). 在上一節中我們完成了初始化 OptiX 框架,接下來這一節會將光線追蹤所 需要用到的程式與設計內容綁入至框架中。. 圖 3.3 OptiX 主程式初始化架構程式流程圖. 18.

(27) 1.. load CUDA programs : 載入設計的 OptiX 框架 program (參考2.1.2) 使用 API : createProgramFromPTXFile ( path ,function ). 2.. set entry point : OptiX 提供多組 entry point 功能,可讓開發者設計多組 ray generation 運算, 並且依序執行。使用 API : setEntryPointCount( amount ). 3.. set ray generation : 開發者依各 entry point 設定對照的 ray generation program 使用 API : setRayGenerationProgram( entry point, program). 4.. set miss program : 開發者依各 entry point 設定對照的 miss program 使用 API : setMissProgram( entry point, program). 5.. set exception program : 開發者依各 entry point 設定對照的 exception program 使用 API : setExceptionProgram( entry point, program). 6.. set ray type count : 開發者依需求設定使用到的 closet hit、any hit 等不同的 ray 類型數量。 使用 API : setRayTypeCount( amount ). 19.

(28) 3.1.3. 初始化場景 (Initialize Scene). 在上一節(3.1.2)中,將光線追蹤的主架構設定完成,接下來我們需要處理的 是 如 何 將 場 景 讀 入 程 式 中 , 而 在 OptiX 框 架 中 每 個 物 件 皆 需 包 裝 成 一 組 GeometryGroup(參考 2.1.3),在初始化場景的部份會將整個場景視為一個最高的 群組(root group),並在這個群組中加入其他物件。在 OptiX 框架中,每個 Geometry 需各自綁定材質(material),材質再綁定可使用的 closet hit program 與 any hit program。因此可以把這部分設計成三個步驟,創建最初群組、新建物件群組與加 入最初群組。. 圖 3.4 OptiX 主程式初始化場景流程圖. 20.

(29) 1.. create root group : 第一個創造的最初群組,可以想像是創造一個世界。 使用 API : createGroup(). 2.. create OBJ group : 根據場景需求,創造每一個物件(參考2.1.3),並且加入材質與程式。. 3.. add OBJ into root group : 將該物件加入最初群組中,如還有要加入的物件則回到第二步繼續創建。. 3.1.4. 執行 OptiX (OptiX Launch). 當程式與場景皆設定完成後,需要呼叫 OptiX 框架執行運算,指定運算哪 個 entry point 與運算數量大小。 使用 API : launch(entry point, width, height). 21.

(30) 3.2 光線追蹤 3.2.1. 蒙地卡羅路徑追蹤. 圖 3.5 OptiX 蒙地卡羅路徑追蹤流程圖. 使用 OptiX 設計蒙地卡羅路徑追蹤方法,主要設計上方四個 OptiX Program,分別為 RayGeneration、Intersection、miss、closestHit。. 22.

(31)  RayGeneration: 在此從主程式載入從眼睛資料與路徑最大深度,迴圈深度數量創建 ray 並呼 叫執行 rt_trace(),每次成功 rt_trace()後根據回傳的顏色資料儲存至輸出緩衝 中,使主程式可以存取緩衝資料繪圖顯示螢幕或儲存圖片。.  Intersection: 物件交集判斷,諾成功交集時回報交集成功並將交集的座標、法向量與物 件的材質等資料儲存至緩存中,提供 ClosestHit 程式使用。. . Miss: rt_trace 沒收到交集成功時觸發,此處設定為沒交集物件回傳黑色。. . ClosestHit: rt_trace 收到交集回報時,從緩存中讀取交集座標、法向量與物件材質等資 料,使用3.3節材質計算公式計算下一個取樣方向與材質顏色。. 23.

(32) 3.2.2. 雙向路徑追蹤. 圖 3.6 OptiX 雙向路徑追蹤流程圖. 使用 OptiX 設計雙向路徑追蹤可以發現在 RayGeneration 程式部份分為兩塊, 首先先產生 light ray 運算,在 ClosestHit-light 中計算完成下一條取樣方向後,須 將目前的光點資訊儲存下來,提供給計算 Eye ray 時與光源連接計算。而在 ClosestHit-eye 中則加入與光源強制連接的部份,連接公式可參考3.4節,在連接的 過程另外需要產生一條新的 ray 去運算該物體與光源連接線是否有其他物品遮擋, 如有遮擋則代表這條連接光路徑無法產生顏色貢獻,這裡需要編寫使用 OptiX AnyHit 程式。. 24.

(33) . ClosestHit-light: 對於產生下一個取樣方向與 PDF 皆與蒙地卡羅路徑追蹤方法相同,但須要 將目前相交的光點資訊儲存在緩存中。. . ClosestHit-eye: 對於產生下一個取樣方向與 PDF 皆與蒙地卡羅路徑追蹤方法相同,但在完成 取樣後再加入與光源點強制連接的運算,運算取得連接的路徑機率 PDF。在 運算中需判斷該連接的過程中是否有被其他物體遮擋,若遮擋則使該連接失 敗,因此在此部份中將產生一條 Ray 從交集的座標與光源方向,使用 rt_trace() 產生 AnyHit 運算。. . AnyHit: 在此 AnyHit 運算交集座標至光源座標之間是否有其他物品遮擋,因此在此 處回報有交集則代表有物品遮擋,反之則無。. 25.

(34) 3.2.3. 混合光線追蹤. 圖 3.7 OptiX 混合光線追蹤流程圖. 混合光線追蹤方法取自於雙向路經追蹤的規則特化,在雙向路徑追蹤中每次 計算皆須產生完整路徑深度追蹤,而在此加入一個中斷標誌功能,例如在 Diffuse 材質時只要深度2則產生中斷標誌,此時 RayGeneration 則不再產生下一組新的取 樣。. 由上圖可見在 RayGeneration 中 light ray 與 eye ray 運算追中前皆多了一層判 斷是否已經有中斷標誌,如有中斷標誌則結束這部份的追蹤。. 26.

(35) 3.3 材質公式計算 在本篇論文中,物體材質資訊參考 mtl 檔案格式,主要使用資料有:Ka、Kd、 Ks、Ke、Ni、Ns、d、illum 與對應的 texture 資料 map_Kd 和 map_Ks。而資料採 用的雙向反射分布函數(BRDF)計算方法為 Diffuse 與 Glossy 的混合模型。該計算 方法取自於本實驗室中張嘉文同學未發表之論文內容。. 圖 3.8 材質公式圖. 論文中使用多重重要性取樣(Mulitiple Importance Sample)來決定如何產生下 一條路徑方向,而產生的貢獻權重則依據 Kd 與 Ks 參數做混合。 Didffuse 材質與 Glossy 的 BRDF、PDF 與顏色計算公式參考表 3.1. 27.

(36) 表 3.1 材質公式. Diffuse (D). Glossy (G). A = Kd.( 0.21 , 0.71 , 0.07 ) Multiple Importance Sampling. B = Ks.( 0.21 , 0.71 , 0.07 ) 𝐴 𝐴+𝐵. 𝐵 𝐴+𝐵. Cosine Hemisphere. GGX. BRDF. 𝐾𝑑 𝜋. 𝐷∗𝐹∗𝐺 4 ∗ 𝑁𝑜𝐿 ∗ 𝑁𝑜𝑉. PDF. 𝑁𝑜𝐿 𝜋. 𝐷 ∗ 𝑁𝑜𝐻 4 ∗ 𝑉𝑜𝐻. 𝐏𝐃𝐅𝐌𝐈𝐒. 𝑀𝐼𝑆𝐷 ∗ 𝑃𝑂𝐷𝐷 + 𝑀𝐼𝑆𝐺 ∗ 𝑃𝐷𝐹𝐺. Importance Sampling. 𝐂𝐨𝐥𝐨𝐫𝐌𝐈𝐒. 𝑁𝑜𝐿 ∗. 𝑀𝐼𝑆𝐷 ∗ 𝐵𝑅𝐷𝐹𝐷 + 𝑀𝐼𝑆𝐺 ∗ 𝐵𝑅𝐷𝐹𝐺 𝑃𝐷𝐹𝑀𝐼𝑆. 28.

(37) 3.4 光源連接計算 在雙向路徑追蹤方法中,從眼睛出發的路徑與光源的連接皆是強制連接, 因此理論上機率值 PDF 應該為 1,但由於此方法計算產生的顏色會過於明亮, 因為在實際隨機的狀態下要使這個連接產生的機率一定小於 1,因此為了將顏色 收斂至正確的範圍,須將路徑的 PDF 乘上連接的機率而得到最終路經機率。此 方法計算公式參考下表。該光源連接計算方法取自於本實驗室中張嘉文同學未 發表之論文內容。 表 3.2 光源連接公式. Diffuse (D) MIS. 同表 3.1. BRDF PDF 𝐏𝐃𝐅𝐌𝐈𝐒. Glossy (G). 𝐷 ∗ 𝑁𝑜𝐻 𝑁𝑜𝐿 / 4 ∗ 𝑉𝑜𝐻 𝜋. 1. 同表 3.1(使用上一列的 PDF). 𝐂𝐨𝐥𝐨𝐫𝐌𝐈𝐒 𝐏𝐃𝐅𝐃𝐋 𝐏𝐃𝐅_𝐃𝐋𝐌𝐈𝐒 𝐂𝐨𝐥𝐨𝐫_𝐃𝐋𝐌𝐈𝐒 𝐏𝐃𝐅𝐏𝐋 𝐏𝐃𝐅_𝐏𝐋𝐌𝐈𝐒 𝐂𝐨𝐥𝐨𝐫_𝐏𝐋𝐌𝐈𝐒. 𝑫𝒊𝒔𝒕𝒂𝒏𝒄𝒆𝟐 𝑻𝒐𝒕𝒂𝒍_𝑳𝒊𝒈𝒉𝒕_𝑨𝒓𝒆𝒂 𝑃𝐷𝐹𝑀𝐼𝑆(𝑝𝑜𝑖𝑛𝑡1) ∗ 1(𝑙𝑖𝑔ℎ𝑡) ∗ 𝑃𝐷𝐹𝐷𝐿 𝐶𝑜𝑙𝑜𝑟𝑀𝐼𝑆(𝑝𝑜𝑖𝑛𝑡1) ∗ 𝐾𝑒(𝑙𝑖𝑔ℎ𝑡) /𝑃𝐷𝐹𝐷𝐿 𝟏 |𝑵(𝒑𝒐𝒊𝒏𝒕𝟏) 𝒐𝑳 ∗ 𝑵(𝒑𝒐𝒊𝒏𝒕𝟐) 𝒐𝑳| 𝑃𝐷𝐹𝑀𝐼𝑆(𝑝𝑜𝑖𝑛𝑡1) ∗ 𝑃𝐷𝐹𝑀𝐼𝑆(𝑝𝑜𝑖𝑛𝑡2) ∗ 𝑃𝐷𝐹𝑃𝐿 𝐶𝑜𝑙𝑜𝑟𝑀𝐼𝑆(𝑝𝑜𝑖𝑛𝑡1) ∗ 𝐶𝑜𝑙𝑜𝑟𝑀𝐼𝑆(𝑝𝑜𝑖𝑛𝑡2) /𝑃𝐷𝐹𝑃𝐿 29.

(38) 第四章 實驗與結果分析 根據第三章詳細描述如何設計 OptiX 框架與使用 OptiX 框架開發光線追蹤演 算法,不同的演算法之間存在著運算效率的差異,而這些演算法使用於不同場景 之中又能得出怎樣的結果呢?在本章中,我們開發了一套基於 OptiX 框架下執行 不同光線追蹤演算法的程式,使用者能使用其調整不同的演算法進行繪圖,並且 及時輸出於畫面之中。程式可儲存與顯示當該演算法執行時所產生的繪圖速度 (FPS)與複雜度(SPP)等資料,提供使用者進行觀測與紀錄比較繪圖的效果。. 實驗分成三個部份進行比較,光線追蹤演算法、場景與運算裝置,第一部份 光線追蹤演算法將比較在第二章提到之不同的演算法,在固定場景下的差異。第 二部份場景將比較不同場景於特定演算法中產生的差異,每個場景會依據三角片 的數量與光源的位置而對最後產出的繪圖成果形成不一樣的影響。第三個部份運 算裝置是現階段很重要的使用指標,以近年推出主打的新一代顯示卡 RTX 與上 一代 GTX 顯示卡中做出比較,探討在不同裝置下運算的效率差異。. 30.

(39) 4.1 演算法比較 4.1.1. 環境配置. 在 4.1 節中所使用裝置環境配置如下 表 4.1 演算法比較-實驗環境配置 作業系統. Windows 10 1903. 運算 CPU. i7-7700HQ 2.8GHz. 運算 GPU. Nvidia Geforce GTX 1060. 實驗場景. Bathroom,三角片個數1,416,312. 實驗輸出格式. 512 * 512像素 積累100frames. 31.

(40) 4.1.2 . 實驗結果 Bidirection Path tracing 比較 表 4.2 演算法比較-Bidirection Path tracing 比較. eye depth = 7. eye depth = 7. light depth = 0. light depth = 1. 20.8 fps. 10.4 fps. 在此場景中比較演算法設定光源深度對場景的影響,在光源深度 1 的狀 況下,每次主光線成功交集到三角片時將會產生一次與隨機原始光源位置強 制連接計算,因此可以看到與深度 0 的圖光線明顯收斂較快,由於每次相交 皆須再產生一次與光源連接運算因此會有兩倍的運算量而造成 fps 效率減少 大約一半。. 32.

(41) . Hybrid ray tracing 比較 表 4.3 演算法比較-Hybrid ray tracing 比較. 實驗. 結果圖. 繪圖策略. 1. Bidirection Path tracing eye depth = 2 light depth = 1 120 fps. 2. Bidirection Path tracing eye depth = 7 light depth = 1 Ray 停止條件: Diffuse 表面 86 fps. 33.

(42) 3. Bidirection Path tracing eye depth = 7 light depth = 1 Ray 停止條件: Diffuse 表面順光 60 fps. 4. Bidirection Path tracing eye depth = 7 light depth = 1 Ray 停止條件: Diffuse 表面不在 陰影中 34 fps. 34.

(43) 在上表實驗一中是雙向路徑追蹤的一種策略眼睛深度為2光源深度為1,可以 使繪圖產出的效率達到120 fps,該方法的繪圖複雜度與繪圖效果其實就跟光柵化 是一樣的,因此我們著手加入光線追蹤才有的效果,實驗二繪圖時在材質 diffuse 表面停止追蹤而 spacular 表面則繼續追蹤,可以產生出如圖二的效果看出光源在 地板與眼睛之間的折射效果,還可看出水晶球產生的聚光點。. 實驗二的結果可以看出使用光線追蹤產生的效果,而且繪圖速度也僅下降至 86fps,但在此場景中可以看出與光源同側的部份由於屬於背光的位置繪製時運算 為黑色,於是實驗三中提出將背光的位置繼續產生路經追蹤使其能獲得與光源連 接的顏色計算,可以看出背光面的物件皆明亮許多。. 實驗三中在許多陰影的位置皆不會產生顏色,實驗四在此部份繼續產生路徑 追蹤,可以使其有間接照明的效果。. 35.

(44) 4.2 場景比較 4.2.1. 環境配置. 在 4.2 節中所使用裝置環境配置如下 表 4.4 場景比較-實驗環境配置. 作業系統. Windows 10 1903. 運算 CPU. i7-7700HQ 2.8GHz. 運算 GPU. Nvidia Geforce GTX 1060. 實驗輸出格式. 512 * 512像素 積累100frames. 4.2.2. 場景配置. 4.2 節中所使用場景 sponza 與 Bathroom 表 4.5 場景比較-場景配置. 實驗場景. 場景說明. Bathroom. 三角片個數 : 1,416,312 特色 : 大量三角片. Sponza. 三角片個數 : 262,939 特色 : 多材質與貼圖. 36.

(45) 4.2.3. 實驗結果 . Bidirection Path tracing 比較 表 4.6 場景比較- Bidirection Path tracing 比較. 實驗. Sponza. Bathroom. 6 fps. 22 fps. 2.2 fps. 10 fps. 1. 2. 37.

(46) . Hybrid ray tracing 比較 表 4.7 場景比較-Hybrid ray tracing 比較. 實驗. Sponza. Bathroom. 37 fps. 120 fps. 24.5 fps. 86 fps. 1. 2. 38.

(47) 3. 13.9 fps. 60 fps. 4 fps. 34 fps. 4. 在 Sponza 的實驗中如同上一組比較 BDPT 在速度上都比 Bathroom 下降許 多,但在這裡最主要可以發現在策略二三四的顯示成果沒有顯著的提升,是因 為相機取樣場地較為開放並非向 Bathroom 中封閉場景有多處遮擋與背光等位 置,因此在 Sponza 中會推薦使用策略二將地板的 Spacular 材質顯示出來即可。. 39.

(48) 4.3 裝置比較 4.3.1. 裝置規格 . GTX 1060 表 4.8 裝置比較-GTX1060 設備規格. 作業系統. Windows 10 1903. 運算 CPU. i7-7700HQ 2.8GHz. 運算 GPU. Nvidia Geforce GTX 1060. 浮點算力. 3594 GFLOPS. . RTX 2060 表 4.9 裝置比較-RTX2060 設備規格. 作業系統. Windows 10 1909. 運算 CPU. i7-8750H 2.2GHz. 運算 GPU. Nvidia Geforce RTX 2060. 浮點算力. 4608 GFLOPS. 40.

(49) 實驗結果 . Bidirection Path tracing 比較 表 4.10 裝置比較-Sponza 使用 BDPT 方法數據. Sponza. RTX 2060. GTX 1060. eye depth = 7 40. 6. 14.8. 2.45. light depth = 0 eye depth = 7 light depth = 1. RTX 2060. GTX 1060. 50 40. 40. FPS. 4.3.2. 30 20 10. 14.8 6. 2.45. 0 eye = 7 light = 0. eye = 7 light = 1. Sponza 圖 4.1 裝置比較-Sponza 使用 BDPT 方法長條圖. 41.

(50) 表 4.11 裝置比較-Bathroom 使用 BDPT 方法數據. Bathroom. RTX 2060. GTX 1060. eye depth = 7 116.6. 20.8. 50.1. 10.4. light depth = 0 eye depth = 7 light depth = 1. RTX 2060 120. GTX 1060. 116.6. 100. fps. 80 60. 50.1. 40 20.8. 20. 10.4. 0 eye = 7 light = 0. eye = 7 light = 1. Bathroom 圖 4.2 裝置比較-Bathroom 使用 BDPT 方法長條圖 在這兩組實驗中運算效率有大約 5 倍以上的提升。. 42.

(51) . Hybrid ray tracing 比較. 表 4.12 裝置比較-Sponza 使用 Hybrid Ray Tracing 方法數據. Sponza. RTX 2060. GTX 1060. 136.5. 36. 98.5. 24.5. 64.4. 13.95. 20.5. 4. eye depth = 2 light depth = 1 eye depth = 7 light depth = 1 停止條件: Diffuse 表面 eye depth = 7 light depth = 1 停止條件: Diffuse 表面順光 eye depth = 7 light depth = 1 停止條件: Diffuse 表面非陰影. 43.

(52) RTX 2060 140. GTX 1060. 136.5. 120 98.5. fps. 100 80. 64.4. 60 40. 36 24.5 13.95. 20. 20.5 4. 0 eye = 2 light = 1. eye = 7 light = 1 Diffuse表面停止. eye = 7 light = 1 Diffuse表面向光停止. eye = 7 light = 1 Diffuse表面非陰影停止. Sponza 圖 4.3 裝置比較-Sponza 使用 Hybrid Ray Tracing 方法長條圖. 44.

(53) 表 4.13 裝置比較-Bathroom 使用 Hybrid Ray Tracing 方法數據. Bathroom. RTX 2060. GTX 1060. eye depth = 2 145. 120. 148. 86. 142. 60. 125. 34. light depth = 1 eye depth = 7 light depth = 1 停止條件: Diffuse 表面 eye depth = 7 light depth = 1 停止條件: Diffuse 表面順光 eye depth = 7 light depth = 1 停止條件: Diffuse 表面非陰影. 45.

(54) RTX 2060 150. GTX 1060. 148. 145. 142 125. 120. fps. 120 86. 90. 60. 60. 34. 30. 0 eye = 2 light = 1. eye = 7 light = 1 Diffuse表面停止. eye = 7 light = 1 Diffuse表面向光停止. eye = 7 light = 1 Diffuse表面非陰影停止. Bathroom 圖 4.4 裝置比較-Bathroom 使用 Hybrid Ray Tracing 方法長條圖 在這兩組實驗中運算效率有大約 4 倍至 5 倍以上的提升。. 46.

(55) 第五章 結論與未來研究 本論文使用 Nvidia OptiX 框架設計出光線追蹤演算法繪圖程式,透過這個程 式我們可將不同的演算法應用於不同場景與機器中,透過比較每一個不同的繪圖 策略來了解對於繪製場景的效率如何,從繪製場景的速度與成效來比較可使在實 際應用場景中能使用特殊繪圖策略以加速繪圖效率減少多餘的運算。. 在研究實驗中,先使用雙向蒙地卡羅路徑追蹤,這方法是基於物理理論所運 算出來的正確結果,透過這項實驗可以了解到使用現在的硬體設備能夠有達到多 好的運算效率,而在實際遊戲實作時,遊戲方會希望達到即時顯示又無雜訊的產 出,因此根據雙向路經追蹤演算法設定眼睛深度 2 加上光線深度 1 的繪圖策略, 此方法為模擬傳統光柵化的繪圖策略,可以在 GTX1060 裝置中達到 120fps 的繪 圖效果,而後從該方法中逐漸加入光線追蹤所能產生的繪圖效果,並且探討其運 算速度的變化與繪圖效果的提升。進而可使未來在實際應用時能多樣性的採取不 同繪製策略,兼具速度與產出的效果。. 本次實驗最後使用的 RTX 2060 是 2019 年 1 月所發表的型號,而 Nvidia 在 RTX20 系列中也已經推出約兩年的時間,隨著未來新一代圖行處理器發表,在實 驗中運算速度較差但繪圖成果較好的雙向蒙地卡羅路徑追蹤算法預期可以在未 來的新設備中取得滿意的執行成果。. 47.

(56) 參考文獻 [AD 11] Antwerpen, Dietger, "Improving SIMD efficiency for parallel Monte Carlo Light Transport on the GPU," ACM SIGGRAPH, High-Performance Graphics, 2011. [BK 16] N. Binder, A. Keller, "Efficient Stackless Hierarchy Traversal on GPUs with Backtracking in Constant Time," Eurographics, ACM SIGGRAPH, HighPerformance Graphics, 2016. [TC 17] Chang-Yu Tang, Chun-Fa Chang, "A Path Reuse Method for Specular Surface Reflection in Monte Carlo Path Tracing," IEEE ICASI, 2017. [PJH 16] M. Pharr, W. Jakob and G. Humphreys, "Physically Based Rendering: From Theory to Implementation," Third Edition, Morgan Kaufmann, 2016. [Vea 97] E. Veach, "Robust Monte Carlo Methods for Light Transport Simulation," Ph.D. dissertation, Stanford University, 1997. [VG 95] E. Veach and L.J.Guibas, "Optimally Combining Sampling Techniques for Monte Carlo Rendering" presented at the Proceedings of the 22nd annual conference on Computer graphics and interactive techniques, 1995.. 48.

(57) 參考資料 [1] Github, optix_advanced_samples, https://github.com/nvprosamples/optix_advanced_samples [2] Nvidia OptiX 6.5 Programming Guide, https://raytracingdocs.nvidia.com/optix6/guide_6_5/index.html. [3] GTC 2018 San Jose, S8518 Tutorial, https://ondemand.gputechconf.com/gtc/2018/presentation/s8518-an-introduction-tooptix.pdf. 49.

(58)

參考文獻

相關文件

在 在 運用新修訂自評框架後 運用新修訂自評框架後 的意見

Last time, teacher took me to a herbal tea shop, which is decorated in Chinese style, with some golden gourds holding the herbal tea. Teacher bought me a cup of ‘sugar cane and

IRB 編號 CE18097A 計畫主持人 陳呈旭 計畫名稱 高風險個案相關醫療人員短期及長期心理壓力之評估研究 審查意見

當 面 取 證、追蹤觀察、寫出報 導。 9 透過嚴謹的研究方法與步 驟,他在 1966 年出版了 Twenty Cases Suggestive of

設計了正立方體框架的組合,在計算方塊個數與框架的差異性可透過等差數列的概念作 結合;而作品「腳踏實地」

指導語 8:請將以下國語點字標點符號讀出來? (5 個題目). 指導語 9:請將以下英文字母讀出來?

的寧靜,下列何者 亦使用「以動襯靜」的手法? (A)千山鳥飛絕,萬徑人蹤滅 (B)床前

The empirical results indicate that there are four results of causality relationship between Investor Sentiment and Stock Returns, such as (1) Investor