Optix Ray Tracing 基本概念流程
Optix Ray Tracing 基本概念與流程
![]() |
| Optix 3D幾何物件階層與用途 |
- 基本設定設置好
- createContext() 建立context,並把該配置的東西配好
=>建立Context
=>設定Context的Ray Type數量、Entry Point計算入口點數量、stack size大小=>設定會成為Context的cuda中的一些成員資料
=>建立Output buffer,用以存放ray tracing結果
=>設定Ray Gerneration光線生成程式(也就是描述你的camera要如何生成ray來追蹤)
=>設定Exception例外程式
=>設定Miss Program(當光線沒打到任何3D內容物件時會執行miss程式) - createGeometry() 建立與設定3D內容與綁定render方法
=>設置好場景中的3D內容物件 (load model或用程式寫好描述好他)
=>對場景中每個3D物件客製化一個material材質,因為光線追蹤程式(rtTrace())是綁定material一起的,所以要一個個對material做設定
=>對個別3D物件material設定closeset hit program (常用於上色的光線追蹤)、any hit program (常用於陰影追蹤)等program
(*closest hit這些tracing program都寫在cuda之中)
=>透過context->createGeometryInstance()將3D物件與他的material綁定在一起,並丟到GeometryInstance的vector容器中
=>將每個GeometryInstance集結成一個Group送至GeometryGroup物件中(setChild())
=>將這個裝滿整個3D場景的Group送到cuda之中做tracing。 - 設定相機基本位置角度等資料
- 設定光源位置 顏色等相關資料,並傳入context
- context->validate() 使context準備完善
- 進入render loop
=>updateCamera(); 將目前最新的camera位置角度等等相關資訊傳入context中
=>context->launch(0, width, height); 啟動Optix Ray tracing context 追蹤整個3D場景內容
=>destroyContext(); 結束追蹤 銷毀context
=>重新執行loop - Debug技巧,在try and catch程式碼區段SUTIL_CATCH(context->get())的地方設置中斷點,並且透過visual studio的"逐步執行"觀察自動變數中optix所提供的Error Message(目前並不會提供compile error出來,只能用這種方法debug)


留言
張貼留言