• 沒有找到結果。

使用OpenCL實現多光源方法之全局照明的光跡追蹤

N/A
N/A
Protected

Academic year: 2021

Share "使用OpenCL實現多光源方法之全局照明的光跡追蹤"

Copied!
47
0
0

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

全文

(1)國立臺灣師範大學 資訊工程研究所碩士論文. 指導教授:張鈞法 博士. 使用 OpenCL 實現多光源方法之 全局照明的光跡追蹤 Many-Light Methods in OpenCL Ray Tracing. 研究生:江庭瑋 撰 中華民國一百零三年七月.

(2) 摘要. 本論文之主要目的為在 OpenCL 平台上實現多光源方法。在圖學領域中,對 於如何渲染出擬真畫面的議題一直都有產出相當數量的研究與論文,其中在針對 照明方面,可以分成直接照明與全局照明,本研究中所使用的多光源方法即屬於 後者,其為全局照明的計算提供了統一的數學框架,在生成虛擬點光源與計算顏 色兩步驟皆有可被平行處理的特性,因而建立了我們在 OpenCL 平台上實行多光 源方法的想法。選擇多光源方法除了因為其演算法方便使用者調整虛擬點光源的 數量,以達到所需的圖像品質與效能,也因為此方法能適用於各種燈光、材質與 複雜模型上,再加上時間成本的可預測性和可靠性,讓多光源方法已成為渲染大 規模場景的選擇之一。 本研究針對多光源方法的兩個步驟做平行化,第一個步驟為生成虛擬點光 源,即由光源朝向場景中任意方向發射粒子,並透過演算法決定是否在擊中點創 建虛擬點光源;第二個步驟為計算顏色,即以像素為平行化單位,透過疊加每個 虛擬點光源進行光跡追蹤所計算出的顏色,得到最後的渲染結果。 本研究所渲 染的對象為靜態場景,利用 OpenCL 能夠在異質系統架構中平行且良好地運作的 特性,在現今常用的裝置架構下實現多光源方法。我們將傳統多光源方法與光跡 追蹤演算法進行改良,實作出具全局照明效果的 OpenCL 光跡追蹤器。. 關鍵字:光跡追蹤、多光源方法、全局照明、OpenCL、平行化運算、異質系 統架構。. I.

(3) Abstract. The main purpose of this paper is to implement many light methods on OpenCL platform. The importance of realistic image rendering with global illumination is underscored by numerous research activities and papers in this field. Many-light methods provide a unified mathematical framework for calculating global illumination. The two-step calculation of this algorithm has characteristics which can be processed in parallel and thus inspires us the idea to implement many-light methods on OpenCL platform. The first step of many-light methods is virtual point light generation, we emit particles in random directions toward the scene from the light source and decide whether the virtual point lights are created or not by the algorithm; the second step is rendering with virtual point lights. By summing up the contribution of virtual point lights, our OpenCL ray tracer gives the final rendering result. The scenes in our research are all static. We use OpenCL platform because it is not only work well at heterogeneous parallel system architecture but also can implement many-light methods on device commonly used nowadays. Our OpenCL ray tracer has improved the traditional many-light methods and ray tracing algorithms which is able to make global illumination rendering.. Keywords: ray tracing, many-light methods, global illumination, OpenCL, parallel computing, heterogeneous system architecture. II.

(4) 目錄. 摘要.................................................................................................................................. I Abstract .......................................................................................................................... II 目錄............................................................................................................................... III 圖目錄............................................................................................................................ V 表目錄..........................................................................................................................VII 第一章. 緒論......................................................................................................... 1. 第一節. 研究背景......................................................................................... 1. 第二節. 論文架構......................................................................................... 4. 第二章. 文獻探討................................................................................................. 5. 第一節. 光跡追蹤......................................................................................... 5. 第二節. 即時輻射度..................................................................................... 7. 第三節. 多光源方法(Many-Light Methods)................................................ 8. 第四節. 加速結構....................................................................................... 10. 第五節. OpenCL ......................................................................................... 10. 第六節. GPGPU ......................................................................................... 11. 第三章. 研究議題與方法................................................................................... 13. 第一節. OpenCL 光跡追蹤器 ................................................................... 13. 第二節. 研究流程與架構........................................................................... 13. 第三節. 多光源方法................................................................................... 15. 第四節. OpenCL 內核 ............................................................................... 18. 第五節. 資料結構....................................................................................... 21. 第六節. 累加機制....................................................................................... 23 III.

(5) 第四章. 實驗結果與分析................................................................................... 24. 第一節. 虛擬點光源生成........................................................................... 24. 第二節. 利用虛擬點光源進行照明........................................................... 26. 第三節. 效果呈現....................................................................................... 30. 第五章. 結論與未來工作................................................................................... 36. 第一節. 結論............................................................................................... 36. 第二節. 未來工作....................................................................................... 36. 參考文獻....................................................................................................................... 38. IV.

(6) 圖目錄. 圖 2-1:光跡追蹤方法示意圖[Wiki 08]。 ................................................................... 6 圖 2-2:多光源方法的兩個步驟。[Dac 13] ................................................................ 9 圖 3-1:研究流程圖。 ................................................................................................ 14 圖 3-2:多光源演算法示意圖。黑色線段表示由光源發粒子並建立虛擬點光源的 過程;藍色以及綠色線段表示由攝影機位置為觀察角度進行光跡追蹤。........... 15 圖 3-3:虛擬點光源生成流程圖。 ............................................................................ 17 圖 3-4:OpenCL 平台模型[Mun 11]。 ...................................................................... 18 圖 3-5:虛擬點光源生成內核的參數設定。 ............................................................ 19 圖 3-6:亂數的參數設定。 ........................................................................................ 19 圖 3-7:自訂結構 VPL 的內容。 ............................................................................... 20 圖 3-8:K-d tree 劃分空間的邊界框架示意圖[Wiki 06]。....................................... 21 圖 3-9:自訂結構 K-d tree 內容。 ............................................................................. 22 圖 3-10:虛擬點光源數量多寡所造成的畫面品質差異。 ...................................... 23 圖 4-1:不同數量的虛擬點光源在場景中的示意圖。 ............................................ 25 圖 4-2:10,000 個虛擬點光源在場景中的示意圖。 ................................................ 26 圖 4-3:不同數量的虛擬點光源渲染出的結果。 .................................................... 27 圖 4-4:使用 1,000 個虛擬點光源渲染出的結果。 ................................................. 28 圖 4-5:以第 100 個畫格減去第 50 個畫格的結果。 .............................................. 28 圖 4-6:以第 1,000 個畫格減去第 500 個畫格的結果。 ......................................... 29 圖 4-7:未加入效果的原始圖像。 ............................................................................ 30 圖 4-8:動作模糊程度為 20、左右振動的圖像。 ................................................... 31 圖 4-10:動作模糊程度為 40、左右振動的圖像。 ................................................. 31 V.

(7) 圖 4-11:動作模糊程度為 20、上下振動的圖像。 ................................................. 32 圖 4-12:具鏡面反射效果的圖像。 .......................................................................... 33 圖 4-13:實作景深效果的示意圖﹝一﹞。 .............................................................. 34 圖 4-14:實作景深效果的示意圖﹝二﹞。 .............................................................. 34 圖 4-15:具景深效果的圖像。 .................................................................................. 35. VI.

(8) 表目錄. 表 5-1:本研究的實驗環境 ........................................................................................ 24. VII.

(9) 第一章. 緒論. 第一節 研究背景 近幾年來有許多影像產業都致力於渲染(Rendering)出寫實(Realistic)或精緻 的畫面,如電影特效(Movie Effects)、遊戲開發、工業設計與建築等。在電影產業 中,凡是運用非實際拍攝手法所製作出的影像皆稱為電影特效或者視覺特效 (Visual Effects),像是在電影《阿凡達(Avatar)》和《少年 PI 的奇幻漂流(Life of Pi)》 中都可以看到大量藉由電腦算圖(Computer-Generated Imagery,CGI)所產生的畫 面。過去會採用此方法來拍攝劇情危險度較高或預算有限的場景,但因科技的發 展與演算法的演進,在電影中利用 CGI 已成為目前的主流。 渲染意為將原本是 3D 立體的畫面以 2D 的型式輸出,如同使用攝影器材捕捉 真實世界中的 畫面一樣 。算圖的方法有很多種,像是非真實的框線渲染法 (Non-realistic Rendering),此種方法會呈現場景中所有物件的框線、形狀,對於幾 何學與動畫分析十分有用;較先進的技術則有光跡追蹤(Ray Tracing)、輻射度 (Radiosity)等,同樣也可以渲染出接近真實場景的畫面;不同的渲染方法通常會 以效果逼真與運算即時性的程度來作取捨,通常渲染一個畫面所需的時間從幾分 之一秒到數天皆有可能,常用的單位為 fps(frame per second),代表每秒能夠渲染 出的圖片張數。. 1.

(10) 在圖學領域中,對於如何渲染出擬真畫面的議題一直都有產出相當數量的研 究與論文,其中針對照明方面可以分成直接照明(Direct Lighting)與全局照明 (Global Illumination)。直接照明只須計算場景中來自所有光源直接照射在物體表 面上所得到的貢獻,但對於高品質畫面來說,單單模擬直接照明的結果是不夠 的;全局照明在計算機圖學領域中,即是為了使畫面更為逼真而考慮真實光線在 三維場景中光照效果的總稱,此種效果除了考慮到直接光源的照明,還能夠計算 出反射、折射、柔和陰影等效果。許多演算法如輻射度(Radiosity)、錐追蹤(Cone Tracing)、路徑追蹤(Path Tracing)、環境光吸收(Ambient Occlusions)、光子映射 (Photon Mapping)等皆為可能使用於全局照明中的演算法。然而,由於光線數量較 直接光龐大許多,因此運算速度方面的成本較為昂貴,則成為全局照明的缺點。 本 研 究 採 用 衍 生 自 即 時 輻 射 度 (Instant Radiosity) 的 多 光 源 方 法 (Many-Light Methods),即時輻射度的作法是由主要光源開始進行光跡追蹤並創建多個虛擬點 光源(Virtual Point Light,VPL),這些新光源會被放置在場景中由主要光源所生成 的每個反射點上,並用來照亮場景,關於即時輻射度的演算法會於後面的章節進 行詳細的介紹。多光源方法的核心作法為計算由虛擬點光源所產生的直接照射, 藉此取代一般光線傳輸路徑複雜的問題,這帶給多光源方法兩個重要的優勢:首 先,此方法為全局照明的計算提供了統一的數學框架(framework),因為使用相同 的計算公式,使得此方法具有可平行化處理的特性,因而建立了我們在 OpenCL 上實行此演算法的想法。其次,此方法易於修改調整(adaptable),使其能夠依使 2.

(11) 用者需求改變虛擬點光源的數量以達到所需的圖像品質與效能,像是透過少量虛 擬點光源進行運算可以快速的渲染出圖片,由於是使用粗略的近似值而得到的結 果,所以圖片通常會有些許偏差值(bias),但對於需要即時算圖的應用領域,如電 腦遊戲而言,此方法是具有吸引力的,若是要將偏差值消除到可忽略的程度,則 必須要使用足夠數量的虛擬點光源。使用多光源方法進行渲染能夠快速地產生圖 像,而其演算法具有可伸縮性(Scalability),能夠適用於各種燈光、材質與複雜模 型(model)上,也因為時間成本的可預測性和可靠性,讓此法已成為渲染大規模場 景的好選擇。 近年來圖形處理器的運算能力大幅增加,其應用紛紛走向通用圖形處理器 (General-Purpose computing on Graphics Processing Unit,GPGPU)的發展模式,透 過平行化運算(Parallel Computing)的方式可顯著地提升運算效率。而在各家廠商 支持下亦開發了開放式計算語言平台(Open Computing Language platform),使得 在 GPU 上設計程式的功能便利許多,並能夠有效率地處理 3D 圖學所需的大量運 算。 為了使 3D 場景繪製出更逼真的畫質,發展了許多不同的演算法來計算光照 情形,其中光線追蹤(Ray Tracing)方法除了擁有數學運算的正確性,還可以直覺 地計算光照效果,更具有能夠被平行化處理演算法的特性。在後面章節的實作 中,每個像素(pixel)都是依平行的方式計算出光照色彩。 本研究所渲染的對象為靜態場景,利用 OpenCL(Open Computing Language) 3.

(12) 能夠在異質系統架構(Heterogeneous System Architecture)中平行且良好地運作之 特性,在現今常用的裝置架構下實現多光源方法,我們將傳統多光源方法與光跡 追蹤演算法進行改良,實作出能夠渲染具全局照明效果的 OpenCL 光跡追蹤器。. 第二節 論文架構 本論文後續架構如下:第二章介紹有關多光源方法的文獻與 OpenCL 架構, 包含多光源方法的前身——即時輻射度以及光跡追蹤演算法,並探討近期與 GPGPU 相關的研究;第三章介紹研究議題與方法,包含本研究的 OpenCL 光跡 追蹤器架構,以及多光源方法的流程與詳細內容,並說明如何利用 OpenCL 內核 將演算法內容平行化處理,以及用於加速光跡追蹤的的資料結構;第四章則展示 研究結果;第五章為結論與未來工作。. 4.

(13) 第二章. 文獻探討. 本章節將介紹研究中有使用到的光跡追蹤以及多光源方法,由於多光源方法 衍生自即時輻射度,因此也會探討即時輻射度的相關文獻,接著會提到用來加速 光跡追蹤的加速結構 K-d tree,並介紹 OpenCL 的背景,最後列出 GPGPU 的相關 研究以及引擎。. 第一節 光跡追蹤 電腦圖學的領域中主要有兩種渲染演算法,分別為利用傳統硬體加速的光柵 化(Rasterization)與光跡追蹤(Ray Tracing)。藉由傳統硬體加速的光柵化運算,雖 然繪製三角面的速度較快,但對於光照效果的實踐能力較差;而光跡追蹤演算法 則是藉由數學公式來計算光線折射、反射與各種變化來生成高品質的畫面,其缺 點則為程式計算量會較光柵化演算法龐大。 光跡追蹤演算法[Whi 79]是由攝影機所在的位置,朝投影平面發射光線,藉 由判斷是否擊中三維空間中的物體,以及擊中點與光源之間的關係來決定畫面中 每個像素(pixel)的顏色,如圖 2-1 所示。通常,每條射線必須測詴是否與場景(scene) 中的物體產生相交,一旦最接近的相交點被確定,光跡追蹤的演算法會檢查光源 在場景中相交點的材料特性,並結合多種資訊來計算該像素的最終顏色,一些進. 5.

(14) 階的光照演算法或特殊材質則會需要更多的光線來模擬真實場景。 當光線與場景中的物體相交時,可能會因為反射、折射與陰影的影響,而產 生相對應的光線。光線觸及光滑物體表面時,會沿著反射方向再度發射光線,所 以場景中與此光線相交的最近物體即為原物體上可看見的反射結果;而光線進入 或離開透明介質時會發生折射的現象,其光線方向決定於進入物體前介質的折射 率與物體本身的折射率,折射光傳回的顏色會再與物體的顏色做運算來得出最後 的結果。檢查物體是否會在陰影中的測詴可避免追蹤場景中所有的光線,若某光 線與物體間存在著不透明的物體,便可判斷該表面(surface)存在於陰影之中。上 述的光線計算方法可使得光線追蹤的影像更為真實。然而 Whitted 提出的演算法 雖能夠成功模擬直接照明,卻無法計算出間接照明(indirect lighting)的效果;而全 局照明除了考慮來自光源的光線,也會計算其他物體提供的光照,本研究使用的 多光源方法便屬於全局照明演算法的一種。. 圖 2-1:光跡追蹤方法示意圖[Wiki 08]。 6.

(15) 第二節 即時輻射度 即時輻射度為 Keller[Kel 97]提出的新演算法,首先會由光源產生許多粒子, 並基於 Monte Carlo 積分方法在場景中隨機遊走,接著圖形顯示卡會將每個粒子 當作點光源進行渲染,最後將上一步產生的多張圖像進行加總便可得到全局照明 的結果。計算平均輻射度的公式為 L mn : L, mn  Le , mn  T fr L, mn  Le , mn  Tmn L. (2-2-1). 其中 mn 為探測光照函數(Detector Function)的統稱; L 為輻射度,源自 radiance equation[Kaj 86]. .  . . . .  . L y,  r  Le y,  r   f r  i , y,  r L h y,  i   i cos i di . (2-2-2).  表示在單位半球(hemisphere)上所有垂直於點 y 的方向    ,   的集合;函數 h 會回傳從點 y 朝向方向  i 射出光線所擊中的第一個點;cos  i 會將入射光垂直投 影 到表面上;  i 為點 y 在表 面上的法線與入射 方向為  i 的方位角 (azimuth angle)。點 y 在方向  i 的輻射度 L 會相等於來自光源的輻射度 Le 加上反射的輻射 度,因此公式 2-2-2 可以改寫為. L  Le  T fr L. (2-2-3). 其中 f r 為雙向反射分佈函數(Bidirectional Reflectance Distribution Function, BRDF),定義了光線在不透明表面的反射情形,此函數通常和入射、反射方向的 輻射度與位置有關。 7.

(16) 即時輻射度的方法與陰影貼圖(Shadow Map)一起使用時,這些虛擬點光源便 代表了場景中所有物體提供的間接照明。陰影貼圖是一種用於生成陰影的技術, 藉由與 z-buffer 或深度圖(Depth Image)進行比較來測詴各個像素是否可從光源的 角度被看見,並且儲存在材質貼圖(texture)中。而 Tabellion[Tab 04]證明了在即時 輻射度演算法中,粒子在場景中彈跳一次所渲染出的圖片已足夠模擬出真實世界 的光照效果。 本研究所使用的多光源方法衍生自即時輻射度,差別在於多光源方法通常不 會與陰影貼圖一起做計算,可以省去計算材質貼圖的時間。. 第三節 多光源方法(Many-Light Methods) 多光源方法衍生自即時輻射度,可簡單分成兩步驟,如圖 2-2 所示:於圖 2-2(a) 中,先以光源為出發點向任意方向發射粒子,並在其與場景相交的地方設置新的 虛擬點光源(Virtual Point Lights,VPLs);在圖 2-2(b)中,則是以攝影機或是眼睛 為觀察位置,將第一步驟中所產生的虛擬點光源做為照明並藉此模擬近似間接照 明的效果。詳細的演算法會在下一章中說明。 一、. 虛擬點光源生成. 在生成虛擬點光源方面,主要的改良都是在討論如何恰當地分佈虛擬點光源 上,由於最基本的演算法是朝任意方向發粒子,在虛擬點光源數量夠多的時候應 幾乎是平均分佈在場景中的,但有可能因為攝影機放置的位置,在某個區域內的 8.

(17) 虛擬點光源數量與其對場景中可見部分的光照貢獻不成比例,舉例來說,今有一 個相當大的場景,其內被設置了許多虛擬點光源,但因為攝影機擺放位置的問 題,可被看到的範圍只佔整個場景中的一小部分,其餘不在可見範圍內的虛擬點 光源便浪費了儲存空間與發射時間;此外當傳統虛擬點光源生成演算法追蹤到場 景中的凹幾何(Concave Geometry)時,其虛擬點光源的密度不足以真實地呈現相互 反射的效果。Georgiev 等人[Geo 10]提出了一個評估虛擬點光源貢獻程度的方式, 透過該演算法便不會將虛擬點光源設置在無法提供貢獻的地方。. (a). (b). 圖 2-2:多光源方法的兩個步驟。[Dac 13] (a)生成虛擬點光源;(b)以虛擬點光源照明並模擬具間接照明的效果。 二、. 利用虛擬點光源提供照明 傳統的多光源方法只能夠處理產生漫反射(Diffuse Reflection)的物體材質,當. 遇到場景中有金屬或玻璃材質表面時,不正確的運算很可能影響到整個畫面的照 明,Hašan [Haš 09]等人提出了一個新的結構——虛擬球光源(Virtual Sphere Light,VSL),虛擬球光源能夠捕捉到虛擬點光源沒有考慮到的光線,進而消除原 9.

(18) 先虛擬點光源造成的光線尖峰(spikes)現象,並能夠真實地模擬出金屬材質在場景 中應有亮度與效果。 本研究為避免金屬材質所造成的影響,將場景中所有物體材質皆設為可產生 漫反射的粗糙表面,而攝影機的位置則會放置於能夠完全看到場景的地方,解決 上述所提到的一些問題。. 第四節 加速結構 由於光線相交測詴的計算量十分龐大,在光跡追蹤演算法被提出後,在結構 方面進行加速的研究紛紛被提出。2002 年時,Harven[Har 02]提出針對路徑追蹤 設計來快速建造 K-d tree 的演算法,而在 K-d tree 尋訪(traversal)的各部份中,也 發展了許多種做法,如 Floyed[Flo 05]為了節省頻繁的記憶體使用所造成的延遲, 提出了 K-d restart、K-d backtrack,以及 Horn[Hor 07]提出的 short stack 等方法。 在 Horn 等人的實作結果中,可達到每秒鐘追蹤 15-18 百萬條主要光線(primary rays)與 16-27 百萬條陰影光線(shadow rays),在當時的時代背景下是非常高的資 料計算量。 本研究渲染的場景屬於靜態場景(static scene),針對場景的加速結構採用了以 堆疊為輔的 K-d tree 加速結構,這部分將在下一章中做說明。. 第五節 OpenCL 異質系統架構指在同一系統中,有兩種或兩種以上架構差異極大的計算裝. 10.

(19) 置,像是 CPU 與顯示晶片組(GPU)。目前最常見的為 GPGPU 的應用,即利用一 般 GPU 進行 3D 繪圖以外的計算工作。 OpenCL 平台為異質系統架構下許多廠商共同協助開發的計算語言,其可在 異質多核心系統架構上良好地運作,使得 GPUs 除了在擴充圖形生成的能力外, 更提供了以任務為主(task-based)與以資料為主(data-based)的平行化機制。 在 OpenCL 平台上,程式主要分為兩個部份:主機端(host)與裝置端(device), 主機端程式是屬於一般的 CPU 程式,而裝置端則是執行裝置內核程式(kernel program),在 Single Instruction Multiple Thread(SIMT)的模式下,使用者能夠自已 決定平行化的程度並且藉此提升程式的效能。 另外,根據裝置端所使用到的不同架構,OpenCL 平台記憶體的宣告也分成 全域記憶體(Global Memory)、共享記憶體(Local Memory)與私有記憶體(Private Memory)三種型態,其中全域記憶體是所有的內核執行緒(kernel thread)都能夠存 取的記憶體區塊,而共享記憶體可以和同一個工作群組(work group)共享資料,另 外,私有記憶體是只有單一內核執行緒能夠存取的區塊,後兩者存取的速度都較 所有內核執行緒能夠存取的全域記憶體快上許多。. 第六節 GPGPU GPGPU(General-Purpose computing on Graphics Processing Unit)的發展起源於 現代圖形處理器擁有可程式化流水線(Programmable Pipeline)進行平行處理的能. 11.

(20) 力,常被用來計算原先由中央處理器處理的通用計算任務,特別是 SIMT 的應用。 在以往光跡追蹤方法中,我們會利用多層迴圈大量且重複地套用相同的計算 公式來處理整個畫面,逐一對每個像素做相同模式的計算。若換成利用 GPGPU 的平行化能力,便可將工作分配給多個執行緒平行地完成工作,大幅減少運算所 需要的時間成本。 Purcell[Pur 07]在 2002 年首次提出完全在 GPU 上運行的光跡追蹤渲染器,其 在可程式化(programmable)的圖形硬體上搭配了標準網格(uniform grid)的加速結 構。而 Günther[Gün 07]提出了一個以 BVH 結構設計的 GPU 光跡追蹤器,並且使 用將光線打包(Ray Packeting)方法的平行遍歷演算法,利用 BVH 結構能夠突破在 GPU 上運算場景大小的限制。 近期的研究則以 GPGPU 的形式將光跡追蹤的計算平行化,Shih[Shi 09]的研 究為基於 CUDA 平台的光跡追蹤演算法,實現了基礎(Whitted-style)的光跡追蹤畫 面效果,且在特定場景中能夠達到每秒處理 30-43 百萬條光線的速度。由 Nvidia 所推出的可程式化光跡追蹤引擎 OptiX 採用了 Nvidia CUDA GPU 的計算架構, Marques[Mar 10]等人探討了利用 OptiX 實作即時全局照明演算法的成果,證明了 結合三種優化演算法的確能夠達到互動式(interactive)渲染,但會犧牲掉畫面品質。. 12.

(21) 第三章. 研究議題與方法. 第一節 OpenCL 光跡追蹤器 本研究的主要目的是在異質多核心系統架構下利用多光源方法實現具全局 照明效果的渲染結果,並比較虛擬點光源數量的多寡對畫面細緻度所造成的影 響。OpenCL 主要提供兩種平行化運算模式,分別為資料平行(Data Parallelism)與 任務平行(Task Parallelism),本研究將針對多光源方法的兩個步驟進行平行化,一 為虛擬點光源的生成,另一則是以像素為單位的顏色計算,兩者皆屬於資料平行 的運算方法,這部分將在後面的章節做詳細說明。. 第二節 研究流程與架構 本研究的研究流程主要可分為兩個部份,一為虛擬點光源的生成,另一為匯 集(gathering)虛擬點光源的貢獻,分別對應圖 3-1 中左右兩個長方形。 圖 3-1 中,左方長方形描述程式由主機端開始執行,首先讀入場景資訊,接 著完成啟動內核(kernel)的參數設定,然後將生成虛擬點光源的工作交由裝置端計 算,達到使用者設定的虛擬點光源數目後便回傳資訊給主機端,詳細的虛擬點光 源生成流程與方法會在下一節中說明。圖中右方的長方形部份主要目的為透過運 算給定每個像素顏色值,其承接左方經運算後得到的資料並重新設定裝置端的相 關參數,然後將工作交給裝置端,把每個虛擬點光源當作點光源進行光跡追蹤, 13.

(22) 將得到的顏色資訊記錄下來並進行累加,接著回傳運算結果給主機端,並繪製出 渲染出的結果,這個步驟會不斷重複執行,最後由主機端結束程式。. Start. Set the arguments of kernel. Input the scene. Set the arguments of kernel. Accumulate contribution of VPLs. Generate VPLs Return the data No. Is #VPLs. Output the image. enough?. Stop. Yes. Return the data. 圖 3-1:研究流程圖。. 14.

(23) 第三節 多光源方法 本節將分作兩部分介紹多光源演算法,如圖 3-2 所示,分別為黑色線段部分 的虛擬點光源生成以及藍色、綠色線段部分的利用虛擬點光源照明。. 圖 3-2:多光源演算法示意圖。黑色線段表示由光源發粒子並建立虛擬點光源的 過程;藍色以及綠色線段表示由攝影機位置為觀察角度進行光跡追蹤。 一、. 虛擬點光源生成 本研究使用類似於光子映射(Photon Mapping)[Jen 01]演算法中生成光子. (photon)的隨機行走(random walk)程序將虛擬點光源分佈在場景中。 隨機行走程序的起點為場景中的光源,接下來每個虛擬點光源的演算流程如 圖 3-3 所示,以下將依照順序作逐步解說: 1.. 將光源設定為光跡追蹤演算法的起點。. 2.. 以亂數決定粒子發射方向並進行光跡追蹤。 15.

(24) 3.. 該粒子在場景中是否存在相交點?是,則光跡追蹤演算法會回傳該點資 訊,如位置、型態(球、三角片或平面),並進入下一步驟;否,則結束 光跡追蹤,終止此回合,且並未建立虛擬點光源。. 4.. 使用俄羅斯輪盤機制決定該虛擬點光源會繼續彈跳或者結束他的行 走,若為繼續彈跳,則回到步驟 2.,唯一不同的地方是光線的起始點應 改為目前粒子走到的位置而非原本的光源;若為結束行走過程,則在目 前位置建立一個虛擬點光源,記錄其光通量(flux)、位置以及入射方向, 並終止此回合。. 我們會利用 OpenCL 內核(kernel)進行平行運算,因此會同時產生許多虛擬點 光源,接著回傳到主機端檢查當前虛擬點光源數量是否合乎設定的數目,若不足 則會再次呼叫內核生成更多虛擬點光源。此外,本研究中的光通量會紀錄被擊中 物體的顏色。. 16.

(25) Trace from the light source. Emit a VPL. Dose the VPL hit in the scene?. Yes. Yes No. Dose the VPL survive? (Use Russian roulette to determine). No. Create a VPL. Terminate the path. 圖 3-3:虛擬點光源生成流程圖。 二、. 以虛擬點光源照明. 本研究以互動式(interactive)方法呈現出渲染的圖像。在上一階段完成虛擬點 光源的生成後,我們會以像素為運算單位,將每個虛擬點光源當作光跡追蹤演算 法中的光源,渲染出和虛擬點光源數目相同的畫格(frame)並累加其顏色結果。值 17.

(26) 得一提的是,由於我們以眾多虛擬點光源模擬了間接照明的效果,所以在進行光 跡追蹤時只計算主要光線(primary ray)的貢獻。. 第四節 OpenCL 內核 OpenCL 平台含有主機端(host)與裝置端(device),主機端會與一個或多個 OpenCL 裝置連接,裝置端為執行內核(kernel)的地方,其可為 CPU、GPU、DSP 或是任何其他類型的處理器,各個裝置端會有一個或多個運算單元 (compute unit) ;各個運算單元會包含一個或多個處理元件(Processing Element),如圖 3-4 所示。. 圖 3-4:OpenCL 平台模型[Mun 11]。 內核為一個在主機端被定義且在裝置端進行運算的函數,本研究配合多光源 方法設計了兩個內核,分別為虛擬點光源生成內核(VPLs generation kernel)與匯集 內核(gathering kernel),其中每一個內核的呼叫與執行順序皆由主機端控制。以下 就兩個內核分別進行介紹。. 18.

(27) 一、. 虛擬點光源生成內核. 虛擬點光源生成內核的任務為自光源朝向任意方向發射粒子,並記錄其在場 景中擊中物體時的相關資訊。主機端會將和場景相關的資訊傳入內核,如光源、 球體、平面、三角片的數目和位置等。此外,主機端也會將為了加速光跡追蹤演 算法而事先建立好的 K-d tree 傳入,如圖 3-5 所示。 // Set up Kernel Arguments errFlag = clSetKernelArg(myKernel, 0, sizeof(cl_mem), (void *)&frameCL); errFlag |= clSetKernelArg(myKernel, 1, sizeof(int), (void *)&lightNum); errFlag |= clSetKernelArg(myKernel, 2, sizeof(int), (void *)&sphereNum); errFlag |= clSetKernelArg(myKernel, 3, sizeof(int), (void *)&planeNum); errFlag |= clSetKernelArg(myKernel, 4, sizeof(int), (void *)&triangleNum); errFlag |= clSetKernelArg(myKernel, 5, sizeof(cl_mem), (void *)&lightCL); errFlag |= clSetKernelArg(myKernel, 6, sizeof(cl_mem), (void *)&sphereCL); errFlag |= clSetKernelArg(myKernel, 7, sizeof(cl_mem), (void *)&planeCL); errFlag |= clSetKernelArg(myKernel, 8, sizeof(cl_mem), (void *)&triangleCL); errFlag |= clSetKernelArg(myKernel, 9, sizeof(cl_mem), (void *)&treeCL); errFlag |= clSetKernelArg(myKernel, 10, sizeof(cl_mem), (void *)&photonCL);. 圖 3-5:虛擬點光源生成內核的參數設定。 在多光源方法中,決定粒子發射方向與粒子是否繼續彈跳此兩步驟需有亂數 參與運算,由於在內核中無法直接地生成亂數,因此需要在主機端呼叫亂數生成 的函式並將其設置為參數提供內核使用,如圖 3-6 所示。. seed = (unsigned int)(rand()%1000)+1; errFlag = clSetKernelArg(myKernel, 11, sizeof(unsigned int), (void *)&seed);. 圖 3-6:亂數的參數設定。 在此內核中,首先會以光源為起點朝亂數方向發射光線,接著計算出其在場 19.

(28) 景中的擊中點並記錄光通量(flux)、位置與入射方向,然後利用俄羅斯輪盤機制以 及最大彈跳步數決定各個粒子將繼續彈跳與否,最後會回傳一個記錄著虛擬點光 源資訊的陣列給主機端。此陣列長度取決於虛擬點光源的數量,陣列中每一個元 素(element)為自訂結構虛擬點光源型態。如圖 3-7 所示,能夠儲存在接下來的運 算中所需用到的必要資訊:位置、入射方向以及光通量。 typedef struct { cl_float4 pos; cl_float4 indir; cl_float4 flux; } VPL;. 圖 3-7:自訂結構 VPL 的內容。 二、. 匯集(gathering)內核. 匯集內核的任務為利用虛擬點光源的資訊來計算顏色,其以像素為單位進行 平行運算。首先會由主機端傳入球體、平面、三角片的數目和位置以及記錄著虛 擬點光源資訊的陣列等,在這個內核中,由於會使用光跡追蹤演算法朝任意方向 發射光線,因此需要傳入事先在主機端生成的亂數。接著每次以一個虛擬點光源 當作光跡追蹤中的光源,計算出每個像素的顏色並累加之。最後回傳一個長度為 圖片尺寸、記錄著每個像素顏色資訊的陣列給主機端。 由於輸出圖像是使用 OpenGL 中 glDrawPixels 這個函式,選用的資料型態為 GL_UNSIGNED_BYTE,換言之即每個像素的 RGB 三色儲存在一個 unsigned byte. 20.

(29) 中,各佔有八個 bits,因此在計算顏色的時候,必須小心不能讓數值產生溢位或 影響到其他顏色通道的情況。. 第五節 資料結構 本研究採用 K-d tree 作為光跡追蹤的加速結構,K-d tree 為二元樹(binary tree) 的一種,每個節點皆具 K 個維度,K-d tree 中除了葉節點外的每個節點各紀錄了 一個超平面,其會將空間分割成兩部分並儲存在其左右子樹中,如圖 3-8 所示, 若選擇以 x 軸劃分,則空間中凡是 x 座標小於指定值的節點都會出現在左子樹, 所有 x 座標大於指定值的節點都會出現在右子樹。場景中的模型(model)越複雜, 在建樹的時候我們便會將 K-d tree 切割的層數值設定得越大。以下就自訂的 K-d tree 資料結構以及尋訪演算法做介紹。. 圖 3-8:K-d tree 劃分空間的邊界框架示意圖[Wiki 06]。. 21.

(30) 一、. K-d tree 資料結構 我們將 K-d tree 中節點的資料結構定義為 Tnode,如圖 3-9 所示,在讀入場景. 資訊時,我們會為球體、平面、三角片進行編號,objId 會記錄該節點範圍內包含 了哪些物體(object);axis 標記該節點是利用 x、y、z 哪一個軸平分其左右子樹; struct Tnode { int *objId; int axis; float bound; cl_float4 boundMax; cl_float4 boundMin; int objNum; Tnode *leftChild; Tnode *rightChild; };. 圖 3-9:自訂結構 K-d tree 內容。 bound 用作紀錄區分出左右子樹的值;boundMax 與 boundMin 為每個節點的邊界 框架(bounding box)的最大與最小值點;objNum 為該節點內物體的數量,leftChild 與 rightChild 則分別記錄了該節點的左右子樹。 二、. 尋訪演算法 由於目前的 OpenCL 版本已經可以使用自行維護的堆疊(stack),因此我們便. 採用標準的 K-d tree 尋訪演算法[Wal 04]。在利用上述的結構建立好樹之後,將有 可能被光線擊中的節點放入堆疊中,並且不斷的 pop 檢查,直到尋訪到葉節點或 堆疊為空為止,其會回傳被擊中的物體編號或是 NULL 供光跡追蹤作為相交測詴. 22.

(31) 的結果。利用樹狀結構進行光跡追蹤能夠讓我們每次只需要搜尋光線有可能擊中 某一邊的子樹,以減少運算時間。. 第六節 累加機制 如圖 3-2 所繪製的研究流程中,我們會不斷地加總虛擬點光源給的貢獻並且 更新輸出的畫面。前幾個被輸出的畫格通常品質較差,也無全局照明的效果,當 累積的畫格數越多時,畫面會變得越細緻,如圖 3-10 所示。 我們為前一百個畫格設置了一個機制,除了第一個畫格外,為了避免特定位 置的虛擬點光源造成畫面過於黑暗,在將顏色加入累加陣列前,會先經過一個判 斷式,若其顏色數值低於我們設定的門檻值,則不予加入陣列中,由於經過一百 次累加後的顏色所佔的影響較小,因此無須通過此判斷式,也藉此修正一些顏色 上的不正確。. (a) (b) 圖 3-10:虛擬點光源數量多寡所造成的畫面品質差異。 (a)1 個虛擬點光源渲染出的結果;(b)203 個虛擬點光源渲染出的結果。. 23.

(32) 第四章. 實驗結果與分析. 本章將分別展示在 OpenCL 上實現虛擬點光源生成與利用虛擬點光源進行照 明所渲染出的結果,以及展現在我們的 openCL 光跡追蹤器中可以做到的幾種效 果,如動態模糊(motion blur)、景深(depth of field)等。 以下實驗以 cornell box 作為主要場景,其內放置的模型則選用 dragon,模型 本身的三角片數為 100,026 片,並使用 Intel(R) Iris(TM) Pro Graphics 5200 做為 OpenCL 的裝置及實驗平台,實驗環境如表一所示。 表 5-1:本研究的實驗環境 實驗環境 中央處理器(CPU). Intel(R)Core(TM) i5-4570R CPU @ 2.70GHz. 圖形處理器(GPU). Intel(R) Iris(TM) Pro Graphics 5200. 主記憶體. 8.00 GB. 作業系統. Microsoft Windows7 64 位元. OpenCL SDK. 1.2. 開發軟體. Microsoft Visual Studio 2010. 第一節 虛擬點光源生成 本節將展示在場景中生成虛擬點光源的示意圖。在我們的程式中,使用者可 以自行決定虛擬點光源的數量,以下就 100 個虛擬點光源到 100,000 個虛擬點光. 24.

(33) 源的生成畫面作討論。 圖 4-1 的(a)、(b)、(c)、(d)分別為創建 100 個、1,000 個、10,000 個、100,000 個虛擬點光源的示意圖,圖片中的黃色球體為場景中的光源、黑色點則為透過 OpenCL 內核創建的虛擬點光源。. (a). (b). (c). (d). 圖 4-1:不同數量的虛擬點光源在場景中的示意圖。 (a)100 個虛擬點光源;(b)1,000 個虛擬點光源; (c)10,000 個虛擬點光源;(d)100,000 個虛擬點光源。. 25.

(34) 以數量較少的虛擬點光源進行光跡追蹤時,每一個虛擬點光源的位置對最後 渲染出的圖像會有很大的影響,倘若結果不正確或效果不佳,只要重新執行程 式,便會再一次創建新的虛擬點光源,即使是建立相同數量的虛擬點光源,他們 的位置也不會完全相同,如將圖 4-1(c)與圖 4-2 相比,可以發現同樣是生成 1,000 個虛擬點光源,但由於方向與路徑的皆為亂數決定,虛擬點光源的位置並不會完 全相同。. 圖 4-2:10,000 個虛擬點光源在場景中的示意圖。. 第二節 利用虛擬點光源進行照明 本節將展示由 1 個虛擬點光源到 1,000 個虛擬點光源所渲染出的場景,每相 差 50 個畫格便記錄一次。每個畫格會以 1 個虛擬點光源當作光源進行光跡追蹤, 即畫格數等同於目前使用到的虛擬點光源的數量。接著我們會透過色彩相減得到 這些畫格的差異。 26.

(35) (a). (b). (c). (d). (e). (f). 圖 4-3:不同數量的虛擬點光源渲染出的結果。 (a)第 1 個畫格的畫面;(b)第 50 個畫格的畫面; (c)第 100 個畫格的畫面;(d)第 150 個畫格的畫面; (e)第 200 個畫格的畫面;(f)第 250 個畫格的畫面。 27.

(36) 圖 4-4:使用 1,000 個虛擬點光源渲染出的結果。. 圖 4-5:以第 100 個畫格減去第 50 個畫格的結果。. 28.

(37) 圖 4-6:以第 1,000 個畫格減去第 500 個畫格的結果。 圖 4-3 展示了使用 1 個到 250 個虛擬點光源渲染的結果,與使用 1,000 個虛 擬點光源的圖 4-4 相比可以發現——對我們的場景來說,大約使用 200 個虛擬點 光源便足以呈現良好的全局照明效果。圖 4-5 與圖 4-6 分別為兩個畫格做差異比 較的結果,可以發現前者的畫格數相差較少,圖片的差異卻較大,代表畫面在虛 擬點光源到達一定的數量後變化甚小,使用者可以依此標準衡量時間與畫面品質 的取捨。. 29.

(38) 第三節 效果呈現 本節將展示我們的 OpenCL 光跡追蹤器能夠達到的效果,分別為動態模糊 (motion blur)、鏡面反射以及景深等,並對這三種效果做介紹。 一、動態模糊 動態模糊是模擬物體快速移動所時產生的明顯痕跡,如賽車遊戲常會利 用動態模糊的效果使畫面更為真實。本研究將動態模糊的程度數值化,數值 越大表示物體振動幅度越大,由於球體較容易看出動態模糊的效果,因此我 們選擇設置三顆圓球在場景中。圖 4-7 為原圖,圖 4-8 至圖 4-10 皆為模擬水 平振動的效果,圖 4-11 則是模擬垂直方向的振動。. 圖 4-7:未加入效果的原始圖像。. 30.

(39) 圖 4-8:動作模糊程度為 20、左右振動的圖像。. 圖 4-10:動作模糊程度為 40、左右振動的圖像。. 31.

(40) 圖 4-11:動作模糊程度為 20、上下振動的圖像。. 二、鏡面反射 鏡面反射的定義為:當數道平行光照射到鏡面材質的物體上,其反射光也會 平行的射出。前面幾節我們渲染的物體皆為漫反射材質,這種材質因為表面凹击 不平,因此照向他們的光線經過反射後會射向不同方向,但也因此我們能夠從不 同的地方看到同一個物體;而鏡面反射材質則是要在特定範圍內才能看見其反射 的特定物體。 圖 4-12 中,我們將場景中長方體的其中一面設定為鏡面材質,可以透過該面 看見前方的龍以及在其斜上方的圓球,這說明了我們的程式能夠渲染出不同材質 的物體。. 32.

(41) 圖 4-12:具鏡面反射效果的圖像。. 三、景深 景深是指相機對焦點前後相對清晰的範圍,在景深範圍內的影像會是清晰 的,而在此範圍外的影像則是會依據與焦點的遠近而呈現不同的模糊程度。 我們實作景深效果的方法為:首先在投影平面相對於攝影機的另一側設定一 個假想的焦平面,接著由攝影機發出的光線與焦平面產生相交的點即為焦點,如 圖 4-13 所示。然後我們將進行光跡追蹤的起點改為由投影平面上一個正方形網格 範圍開始,發出多條朝向焦點的射線,接著平均藉由光跡追蹤結果所得到的顏色 數值,以得到景深的效果。圖 4-14,距離焦平面越遠的光線會越發散,我們因此 能夠模擬出圖像中距離景深範圍越遠越模糊的現像。. 33.

(42) 圖 4-13:實作景深效果的示意圖﹝一﹞。. 圖 4-14:實作景深效果的示意圖﹝二﹞。. 34.

(43) 圖 4-15 中,我們將攝影機的位置設在 z 值為 1000 的地方、投影平面設在 z 值為 300 的地方,而焦平面則設在 z 值為 100 的地方;三顆球的 z 值分別相差 200, 我們將中間的球置於焦平面上,藉此呈現出中間球為清晰,其左右兩顆球為模糊 的效果。. 圖 4-15:具景深效果的圖像。. 35.

(44) 第五章. 結論與未來工作. 第一節 結論 本論文的主要目的為在 OpenCL 平台上實作多光源方法,利用 GPGPU 運算 快速的特性,配合多光源方法能夠透過簡單的光跡追蹤與累加畫格得到全局照明 的效果,實作出一個 OpenCL 光跡追蹤器。 本研究就多光源方法的兩步驟分別進行平行化。首先透過主機端讀入場景資 訊,接著 OpenCL 核心會平行地產生虛擬點光源,然後再利用這些虛擬點光源進 行光跡追蹤,最後再次用 OpenCL 核心平行計算出每一個像素的顏色並累加其數 值,再交由主機端輸出圖像。 本論文針對不同數目的虛擬點光源渲染結果進行比較,並使用多光源方法做 出動態模糊、鏡面反射以及景深等效果,驗證了多光源方法雖然只利用主要光 線,但仍能夠渲染出品質良好且具有各種效果的畫面。. 第二節 未來工作 本論文著重在於 OpenCL 平台上使用多光源方法,以達成平行化及即時更新 圖像的成果,但數目較少的虛擬點光源渲染出的結果往往不夠細膩,因此在虛擬 點光源的位置以及渲染順序方面可以再做調整,如優先將位置重要性較高的虛擬 點光源拿來進行光跡追蹤,或者是將在看不到或幾乎無法接收到照明位置的虛擬 點光源去除。 36.

(45) 在某些遊戲引擎如 Unity 中,為了能夠配合畫面的快速轉換,使用了一種叫 做―Light Probe‖的球狀光源,此光源會被放置在一些重要的位置並進行光線的採 樣,當其他位置需要光照資訊的時候,透過內插鄰近的 light probes 便能取得所需 數值,由於計算內插值的速度非常快,因此適合使用在遊戲中,不過 light probe 的缺點為擺放位置必須依賴美術人員。若將多光源方法結合 light probe 的概念, 事先將光照資訊壓縮並且儲存在虛擬點光源內,並在 OpenCL 平台上進行實作, 或許可以減少光跡追蹤的運算量並將渲染的速度提高,此為一個值得研究的方 向。. 37.

(46) 參考文獻. [Dac 14]. C. Dachsbacher, J. Křivánek, M. Hašan, A. Arbree, B. Walter and J. Novák, ―Scalable Realistic Rendering with Many ‐ Light Methods,‖ Computer Graphics Forum, Vol. 33, No. 1, pp. 88-104, 2014.. [Gün 07]. T. Foley and J.Sugerman, ―Kd-tree acceleration structures for a gpu raytracer,‖ HWWS '05: Proceedings of the ACM SIGGRAPH/ EUROGRAPHICS conference on Graphics hardware, ACM Press, p.15-22, 2005. I. Georgiev, P. Slusallek, ―Simple and robust iterative importance sampling of virtual point lights,‖ Proceedings of Eurographics (short papers), 2010. J. Günther, S. Popov, H. P. Seidel and P. Slusallek, ―Realtime ray tracing. [Hav 02]. on GPU with BVH-based packet traversal,‖ Interactive Ray Tracing, RT'07, IEEE Symposium on, IEEE, p. 113-118, 2007. V. Havran and J. Bittner, ―On improving kd-trees for ray shooting,‖. [Fol 02]. [Geo 10]. [Haš 09]. [Hor 07]. [Jen 01]. Proceedings of WSCG’2002 conference, p.209-217, 2002. M. Hašan, J. Křivánek, B. Walter and K. Bala, ―Virtual spherical lights for many-light rendering of glossy scenes,‖ ACM Transactions on Graphics (TOG), ACM, Vol. 28, No. 5, p. 143, 2009. D. R. Horn, J. Sugerman, M. Houston amd P. Hanrahan, ―Interactive kd tree GPU raytracing,‖ Proceedings of the 2007 symposium on Interactive 3D graphics and games, ACM, pp. 167-174, 2007. H. W. Jensen, ―Realistic image synthesis using photon mapping,‖ AK Peters, Ltd, 1986.. J. T. Kajiya, ―The rendering equation,‖ ACM Siggraph Computer Graphics, ACM, p. 143-150, 1986. [Kel 97] A. Keller, ―Instant radiosity,‖ Proceedings of the 24th annual conference on Computer graphics and interactive techniques, ACM Press/Addison -Wesley Publishing Co., p. 49-56, 1997. [Mar 10] R. Marques, L. P. Santos, ―Instant Global Illumination on the GPU using OptiX,‖ In Proc. INForum'10, p.329-340, 2010. [Mun 11] A.Munshi, The OpenCL Specification, http://www.khronos.org/ registry/ cl/specs/opencl-1.1.pdf, 2011. [Kaj 86]. [Pur 02]. T. J. Purcell, I. Buck, W. R. Mark and P. Hanrahan, ―Ray tracing on 38.

(47) [Shi 09]. [Tab 04]. [Wal 04] [Wik 08] [Whi 79]. programmable graphics hardware,‖ ACM Transactions on Graphics (TOG), ACM, Vol. 21, No. 3, pp. 703-712, 2002. M. Shih, Y. F. Chiu, Y. C. Chen and C. F. Chang, ―Algorithms and Architectures for Parallel Processing,‖ volume 5574 of Lecture Notes in Computer Science, chapter Real Time Ray Tracing with CUDA, p. 327–337, 2009. E. Tabellion and A. Lamorlette, ―An approximate global illumination system for computer generated films,‖ ACM Transactions on Graphics (TOG), Vol. 23, No. 3, 2004. I. Wald, ―Realtime Ray Tracing and Interactive Global Illumination,‖ PhD thesis, Saarland University, 2004. 維基百科,“Ray Tracing”,取自 http://en.wikipedia.org/wiki/Ray_trac ing_(graphics),2008 年。 T. Whitted, ―An improved illumination model for shaded display,‖ ACM SIGGRAPH Computer Graphics, Vol. 13, No. 2, 1979.. 39.

(48)

參考文獻

相關文件

This formula, together with some algebraic manipulations, implies that for simple P r flops the quantum corrections attached to the extremal ray exactly remedy the defect caused by

Theorem 3.1, together with some algebraic manipulations, implies that the quantum corrections attached to the extremal ray exactly remedy the defect caused by the classical product

Other advantages of our ProjPSO algorithm over current methods are (1) our experience is that the time required to generate the optimal design is gen- erally a lot faster than many

• X-ray variability correlates with mass transfer rate: H/He disk stability model predicts various states. • X-ray bursts (active and

The existence of cosmic-ray particles having such a great energy is of importance to astrophys- ics because such particles (believed to be atomic nuclei) have very great

• A way of ensuring that charge confinement does occurs is if there is a global symmetry which under which quarks (heavy charges) are charged and the gluons and other light fields

coordinates consisting of the tilt and rotation angles with respect to a given crystallographic orientation A pole figure is measured at a fixed scattering angle (constant d

• Paul Debevec, Rendering Synthetic Objects into Real Scenes:. Bridging Traditional and Image-based Graphics with Global Illumination and High Dynamic