新聞中心

NVIDIA OptiX 著色器綁定表最佳化與光線追蹤資料配置 NEWS DETAIL

當前位置:首頁 > 新聞中心
資訊分類 · 新聞中心 作者 · 中科新遠內容團隊 審核人 · 中科新遠技術內容組 發佈時間 · 2025-01-09 更新時間 · 2026-08-07 來源 · 原頁面資料;原廠資訊待核驗
NVIDIA OptiX 著色器綁定表最佳化與光線追蹤資料配置

NVIDIA OptiX 是透過 CUDA 執行 GPU 加速光線追蹤的 API。對於具有大量物件執行個體、共用網格或共用材質的渲染器,著色器綁定表(Shader Binding Table,SBT)的配置方式會直接影響顯存用量、資料存取路徑與主機端維護成本。來源內容指出,將完整著色資料逐一放入每個執行個體的 SBT 記錄雖然容易實作,但在資料重複度高的情境中可能造成不必要的儲存負擔;改由 SBT、全域記憶體與幾何資料分工,則可減少重複資料。

光線追蹤中 SBT 解決的問題

當光線與幾何基元相交時,OptiX 需要決定要執行哪一組命中著色器,以及著色器從何處取得材質與幾何資料。SBT 可將著色器程式與使用者定義資料關聯至命中組記錄。以路徑追蹤器為例,著色可能需要頂點法線、反射率與粗糙度等資訊;其中大型頂點屬性通常位於獨立的全域配置,而 SBT 資料區可保存其參照或較小的參數。

來源示例假設使用 OptiX 內建三角形相交與單一光線類型。在此條件下,朴素作法是為每個執行個體建立一筆 SBT 記錄,記錄標頭指定著色器,資料區保存幾何與材質參照。此設計的優點是資料關聯直觀,適合情境與材質組合較簡單的應用。

從逐執行個體記錄到去除冗餘

逐執行個體儲存的主要取捨是重複。若多個執行個體共用網格、材質或著色器程式,SBT 標頭和資料區可能重複保存相同內容。來源中的假設情境含有 100,000 個執行個體、50,000 個唯一三角形網格、兩種材質著色器與 10,000 組唯一材質參數;在每個執行個體內嵌資料的配置中,SBT 記錄的對齊與標頭會形成額外負擔。

最佳化方向是把可共用的資料移出每筆 SBT 記錄。材質或著色參數可放入全域陣列,執行個體 ID 則用於索引對應資料。例如,裝置端程式可依 optixGetInstanceId() 取得目前執行個體所對應的著色參數。這個 ID 不必在所有執行個體間唯一;若多個執行個體共用相同的幾何與著色資料,可以指向同一個陣列項目。

幾何、材質與程式的分層配置

來源進一步將不隨執行個體改變的幾何資料分離。以法線陣列為例,若同一 GAS 被多次執行個體化,理想狀況是每個 GAS 只保存一次相關的 GeometryParams。來源指出,OptiX 8.1 引入的 optixGetGASPointerFromHandle 可取得與 GAS 關聯的二進位加速結構資料位址;應用程式可在配置 GAS 時於其前方安排自訂資料區,裝置端再據此取得幾何相關資料。

在此配置下,MaterialParams 可集中保存反射率與粗糙度等材質參數,GeometryParams 則保存法線等幾何參照。最後,若情境只有有限的材質著色器類型,SBT 記錄可依材質程式類型配置,而非依每個執行個體配置;執行個體的 SBT 偏移量再選擇對應的命中組。來源以漫反射與光澤兩種材質為例,表示可對應兩筆 SBT 記錄。

適合的情境與評估步驟

這類資料布局較適合有大量執行個體、重複使用網格、共用材質參數,或材質程式類型有限的光線追蹤情境。若應用規模小、資料模型仍在頻繁變動,逐執行個體 SBT 記錄可能較易驗證與維護。最佳化設計會增加索引、資料生命週期與記憶體配置的管理要求,因此不應只依記憶體理論用量做決策。

  1. 盤點執行個體、唯一 GAS、唯一材質參數集、幾何類型與光線類型的數量。
  2. 識別哪些資料會隨執行個體變動,哪些資料可按材質、GAS 或著色器類型共用。
  3. 先以正確性測試確認 instance ID、SBT 偏移量與資料索引的一致性。
  4. 在目標 GPU、情境規模與渲染路徑下量測顯存、建置成本與實際渲染表現。

多類型情境的限制

最佳化後的 SBT 筆數並非固定不變。若使用多種幾何類型,命中組通常取決於幾何類型與材質著色器的組合;加入多種光線類型後,光線類型也會成為乘數。來源指出,在真實範例中,光線類型、幾何類型與材質類型的乘積通常可落在 10 至 100 的範圍,但這不是所有專案的保證結果。

對於單一 GAS 含多種材質的情況,來源提出可利用輔助查找表,依執行個體 ID 與 SBT GAS 索引重新導向到著色參數索引。實際 API 行為、資料對齊規則、版本相容性與自訂幾何處理方式,仍應以特定 OptiX 版本的官方程式設計文件及完整專案測試為準。

常見問題

SBT 是否應完全不存放使用者資料?

不一定。來源說明,直接在 SBT 記錄保存著色器與資料參照是容易實作的方式,對簡單應用仍屬合理選擇。當執行個體間存在大量可共用資料時,才較值得評估將資料轉移至全域陣列或按 GAS 配置的設計。

使用 optixGetGASPointerFromHandle 前要確認什麼?

來源將此函式描述為 OptiX 8.1 引入的能力,並用於取得 GAS 關聯資料位址。導入前應核對專案所用 OptiX 版本的正式文件、GAS 記憶體配置與自訂資料區的位址計算,同時在目標平台測試資料存取正確性。

結論

OptiX 的 SBT 可用於綁定命中著色器與資料,但其效率取決於情境中的重複關係。對大型、共用資源比例高的情境,將材質、幾何與著色器程式分層配置,可減少重複儲存;對較簡單的渲染器,直接的逐執行個體配置可能更容易落地。最終選擇應依實際情境資料、OptiX 版本文件與專案量測結果決定。

圍繞「NVIDIA OptiX 著色器綁定表最佳化與光線追蹤資料配置」繼續瞭解 NVIDIA 產品與網路方案