第三章 系統實作
3. add OBJ into root group :
3.2.1 蒙地卡羅路徑追蹤
圖 3.5 OptiX 蒙地卡羅路徑追蹤流程圖
使用OptiX 設計蒙地卡羅路徑追蹤方法,主要設計上方四個 OptiX Program,分別為 RayGeneration、Intersection、miss、closestHit。
23
RayGeneration:在此從主程式載入從眼睛資料與路徑最大深度,迴圈深度數量創建ray 並呼 叫執行rt_trace(),每次成功 rt_trace()後根據回傳的顏色資料儲存至輸出緩衝 中,使主程式可以存取緩衝資料繪圖顯示螢幕或儲存圖片。
Intersection:物件交集判斷,諾成功交集時回報交集成功並將交集的座標、法向量與物 件的材質等資料儲存至緩存中,提供ClosestHit 程式使用。
Miss:
rt_trace 沒收到交集成功時觸發,此處設定為沒交集物件回傳黑色。
ClosestHit:
rt_trace 收到交集回報時,從緩存中讀取交集座標、法向量與物件材質等資 料,使用3.3節材質計算公式計算下一個取樣方向與材質顏色。
24
3.2.2 雙向路徑追蹤
圖 3.6 OptiX 雙向路徑追蹤流程圖
使用OptiX 設計雙向路徑追蹤可以發現在 RayGeneration 程式部份分為兩塊,
首先先產生light ray 運算,在 ClosestHit-light 中計算完成下一條取樣方向後,須 將目前的光點資訊儲存下來,提供給計算 Eye ray 時與光源連接計算。而在 ClosestHit-eye 中則加入與光源強制連接的部份,連接公式可參考3.4節,在連接的 過程另外需要產生一條新的 ray 去運算該物體與光源連接線是否有其他物品遮擋,
如有遮擋則代表這條連接光路徑無法產生顏色貢獻,這裡需要編寫使用 OptiX AnyHit 程式。
25
ClosestHit-light:
對於產生下一個取樣方向與PDF 皆與蒙地卡羅路徑追蹤方法相同,但須要
將目前相交的光點資訊儲存在緩存中。
ClosestHit-eye:
對於產生下一個取樣方向與PDF 皆與蒙地卡羅路徑追蹤方法相同,但在完成
取樣後再加入與光源點強制連接的運算,運算取得連接的路徑機率PDF。在
運算中需判斷該連接的過程中是否有被其他物體遮擋,若遮擋則使該連接失 敗,因此在此部份中將產生一條Ray 從交集的座標與光源方向,使用 rt_trace() 產生AnyHit 運算。
AnyHit:
在此AnyHit 運算交集座標至光源座標之間是否有其他物品遮擋,因此在此 處回報有交集則代表有物品遮擋,反之則無。
26
3.2.3 混合光線追蹤
圖 3.7 OptiX 混合光線追蹤流程圖
混合光線追蹤方法取自於雙向路經追蹤的規則特化,在雙向路徑追蹤中每次 計算皆須產生完整路徑深度追蹤,而在此加入一個中斷標誌功能,例如在Diffuse 材質時只要深度2則產生中斷標誌,此時 RayGeneration 則不再產生下一組新的取 樣。
由上圖可見在RayGeneration 中 light ray 與 eye ray 運算追中前皆多了一層判 斷是否已經有中斷標誌,如有中斷標誌則結束這部份的追蹤。
27
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
28