實時光線追蹤是一種強大的渲染技術,可以生成非常逼真的圖像。 NVIDIA OptiX 和 RTX 技術使這一切成為可能,即使是具有大量細節的場景也是如此。然而,當這些細節豐富的場景涉及到動作和動畫時,保持實時光線追蹤性能可能具有挑戰性。
本文將探討 NVIDIA OptiX 9 的全新 RTX Mega Geometry 功能 (尤其是 Cluster Acceleration Structures (CLAS)) 如何實現動態、高密度幾何圖形的快速光線追蹤。我們將特別關注細分表面。您可以在 NVIDIA/optix-subd GitHub 資源庫中獲取演示 OptiX 中 CLAS API 的開源示例代碼以及本文中描述的概念。
動態場景的挑戰
RTX 硬件上的 NVIDIA OptiX 能夠以每個像素一個樣本的速度實時光線追蹤大型場景,前提是幾何圖形保持不變。這適用于極其密集的幾何圖形,甚至接近像素大小的微型三角形的密度。
然而,這種密度水平的場景每幀都會發生變化,這帶來了新的挑戰。幾何加速結構(RTX 硬件用于將三角形與光線匹配的搜索樹)必須保持最新,這可能比追蹤本身花費的時間更長。

有時,您可以走捷徑:如果頂點位置發生變化,但三角形數量及其連接保持不變,OptiX 可對加速結構進行重新擬合運算。重構會重復使用現有的大部分搜索樹,因此比完全重建快得多。但也存在局限性:如果頂點移動過多,則針對加速結構追蹤光線的時間會變慢。還有一個基本限制,即不能以不同的方式添加、刪除或重新連接三角形,因為這些操作會使樹失效。
NVIDIA OptiX 9 引入了一種新的數據結構,即 Cluster Acceleration Structure (CLAS) 。CLAS 的輸入是用戶定義的小三角形集群,CLAS 成為 Cluster Geometry Acceleration Structure (Cluster GAS) 的輸入,它與現有的 GAS 非常相似。

對于某些類型的場景,CLAS 可以提供改裝速度,同時保留完整重建的大部分靈活性和追蹤性能。簡而言之,我們的想法是在集群級別以類似于 Refit 的方式重復使用模式,然后僅在集群上進行完全重建。
可能的集群重用有兩種類型。首先,相同的集群可以跨幀重復使用,甚至可以使用動畫頂點。這與現有的 GAS refit 類似,可能是在流式傳輸細節級別系統中使用集群的好方法。
重要的是,如果多個集群具有相同的拓撲 (頂點模式) ,且位置不同,則還可以在同一幀內在空間上重復使用相同的集群模式。這種空間重用是這里的主要關注點,因為它非常適合細分表面的動態曲面細分。
細分曲面基礎知識
Catmull-Clark 細分表面 (subds) 是動畫電影以及未來游戲中呈現幾何圖形的常用方式。它們由主要由四邊形組成的 控制網格 以及一套將四邊形細分為光滑極限曲面的數學規則組成。控制網格上的任何點都可以使用 優化的 GPU 方法 進行評估,并映射到極限表面,從而實現無限的微三角形密度。此外,高頻細節可以與其他紋理一起高效存儲在單獨的位移貼圖中。

這種表征在電影或游戲制作流程中具有許多優勢。造型、綁定、動畫等操作只需處理控制網格,而控制網格通常是輕量級的。動態鑲嵌極限表面以進行渲染,這意味著幾何密度可以瞄準攝像頭。屏幕外或隱藏的表面可以以較低的速率進行鑲嵌。
實時曲面細分
圖 4 顯示了自適應曲面細分管道對于使用具有集群幾何圖形的 OptiX 的渲染器的效果。此工作流將運行每一幀,重新解析每個動態網格并重建其加速結構。

前幾個步驟發生在用戶空間代碼中,通常作為 CUDA 內核實現。
- 動畫或蒙皮 :為子控制網格的頂點制作動畫。
- 鑲嵌和位移 :在子極限表面上定義聚類,密度約為每個像素一個三角形。將集群描述和集群頂點保存到設備緩沖區中。
加速重建和渲染步驟主要由 OptiX 處理。
- CLAS 實例化:使用描述和頂點作為輸入,為每個集群創建 CLAS。請注意,這是一次函數調用,可獲取設備內存中的幾乎所有參數。
- GAS 和 IAS 構建 :完成構建更高級別的加速。由于 GAS 的葉子是集群而不是三角形,因此此步驟的速度比其他方式快 10 倍至 100 倍。
- OptiX 啟動:向場景中發射光線并對其進行著色。OptiX 提供集群 ID 和命中三角形的頂點作為著色上下文。
在足夠密集的幾何結構中,可以直接將 microtriangle facet normals 用作著色法線;也可以選擇在曲面細分期間評估 limit normals,并將其傳遞給緩沖區中的 path tracer。
空間集群重用
在對圖 5 中的環面等表面進行鑲嵌時,您可以有意地以相似或相同的方式對集群進行鑲嵌,以提供空間重復使用的機會。這里基于 quad-based 控制框架對您有利。得到的大多數集群都是矩形網格,其中許多集群具有相同的 MxN 分辨率。

OptiX API 中可重復使用的集群稱為 Cluster Template 。它存儲 CLAS 的所有內容 (頂點除外) 。只需提供具有相同拓撲的新頂點 (類似于 refit) ,即可反復快速實例化。
您可以創建 Cluster Templates 并將其重復用于任何三角形索引 (圖 6,左) 。但是,由于網格模式對于細分表面和其他情況非常有用,OptiX 有一個單獨的 API 調用,用于從網格創建模板 (圖 6,右) 。由于無需提供網格模板的拓撲結構,網格版本不僅使用起來更簡單,而且生成的 Cluster Template 通常更小、更快實現光線追蹤,因為 OptiX 可以針對預定義拓撲進行優化。有關 API 詳情,請參閱 OptiX 9.0 編程指南。

這加快了整體 frame time,因為:
- 場景中的許多 CLAS 使用相同的 Cluster Template (集群模板) 。
- 集群模板會預先計算 CLAS 構建的大部分工作。
- 與直接在微三角形上構建相比,基于 CLAS 構建的 GAS 的條目數量減少了大約 100 倍。
總體而言,與將所有三角形放入單個平面 GAS 中相比,Cluster Templates 可以將加速重建速度提高一個數量級。
DLSS 光線重建
圖 4 所示的整個工作流以 OptiX 啟動結束,該啟動以每個像素約一個樣本的速度追蹤場景,以保持高幀率。例如,用于膠片中最終幀照明的經典 OptiX 應用會累積 16-32 幀,以獲得更融合的圖像,然后運行降噪器以消除剩余的 Monte Carlo 噪點。如果攝像頭和幾何圖形完全動畫化,這種方法就會變得復雜得多。
您可以將用戶空間累積循環替換為 DLSS-RR ,后者借助運動向量和其他輸入導向層自行進行內部累積。DLSS-RR 不會收斂到參考圖像,因此并非適合所有用戶,但會生成穩定、視覺上流暢的圖像。
為了計算子節點的精確運動向量,需要上一幀的控制支撐架以及當前幀的命中點。有關如何執行此操作的詳細信息,請參閱使用 CUDA 和 OptiX 的基于集群的曲面細分示例源代碼。

總結和后續步驟
本文介紹了如何在 NVIDIA OptiX 9 中使用集群加速結構 (CLASes) ,以實現動態、高密度幾何圖形的高效光線追蹤。CLASes 是 RTX Mega Geometry 的關鍵組件,可重復使用集群模式,與傳統方法相比,可顯著加速加速結構重建。這對于渲染動態細分表面尤為有益,其中動態曲面細分可以與 DLSS 光線重建相結合,以獲得高質量的實時結果。
如需了解詳情,請探索示例源代碼 (用于生成本文中的部分圖像) ,在 OptiX Developer Forum 中發布技術問題,并查看以下相關資源: