新訊顯示卡

AMD Tetrahedral Cages 光追技術將 BVH 記憶體從 80 GB 降至 1.7 GB

AMD 最近展示一項光線追蹤研究技術,專門解決大量動畫幾何做 Ray Tracing 時,BVH 太肥、更新太慢的問題。AMD 透過稱為 Tetrahedral Cages(四面體 Cage) 的方法,讓大量獨立動畫三角形不需要各自維護與更新 BVH,大幅降低記憶體與運算開銷。

AMD Fellow Holger Gruen 在最近於 GPUOpen 的文章中展示這項技術,測試場景是一大片包含約 25,000 株、各自獨立動畫植物的地形。若全部以最高 LOD 計算,這些植物總共約有 28 億個三角形;經過 LOD 選擇後,每幀仍有約 5 億個動畫三角形需要進行光線追蹤,包含主要光線與陰影光線。

Amd_cage_2.jpg


這個場景最後是在 1080p 解析度下,以 Radeon RX 9070 XT 跑到 60 FPS 以上。不過真正有意思的地方並不是 5 億三角形本身,而是 AMD 如何處理這麼多動畫幾何所需要的 BVH。

傳統 Ray Tracing 做法會替每個獨立動畫物件建立自己的 Bottom-Level Acceleration Structure(BLAS),當物件變形或移動時,相關 BVH 也需要跟著更新。場景裡如果只有幾個角色當然沒什麼,但當數量變成幾萬株植物、數億個三角形時,光是更新這些加速結構就可能先把 GPU 拖死。

AMD 的方法則是把大量細密幾何包在比較簡單的可變形四面體 Cage裡。動畫時,不直接去修改裡面的每個頂點,也不需要重新建立密集幾何的 BVH,而是讓外層的 Cage 動起來,原本的高密度幾何與 BVH 維持不變。

Amd_cage_1.jpg


進行光線追蹤時,再把 Ray 轉換回原始幾何的參考座標系,利用那套沒有變動的幾何與加速結構完成相交測試。

從 AMD 的測試結果來看,有不小差距:
項目傳統密集三角形 BLASTetrahedral Cages
BVH 記憶體最多約 80GB約 1.7GB
每幀 BVH 更新時間超過 300ms約 3.3ms
LOD 後動畫三角形約 5 億約 5 億

在這個測試案例裡,BVH 所需記憶體從最多約 80GB 降到 1.7GB,大約少了 47 倍;每幀更新時間則從超過 300ms 降到約 3.3ms,差距超過 90 倍。

這對 Ray Tracing 來說相當重要。因為真正讓大量動畫場景難以即時光追的問題,不一定只是三角形太多,而是這些幾何還會不停變動,導致加速結構也必須跟著更新。AMD 這套方法等於把最昂貴的那一部分盡量固定下來,只讓相對簡單的 Cage 負責動畫。

當然,這種做法也不是什麼動畫都適合。四面體 Cage 比較適合大量細碎、外觀相似,而且不需要精確控制每個頂點的物件,例如樹葉、草地、植被、遠處人群與角色等。如果是需要精確肌肉變形、複雜拓撲變化,或每個頂點都必須獨立控制的模型,就不一定適合這套方法。

這項研究來自 AMD 的 Ray Tracing Massive Amounts of Animated Geometry 論文,並在 High-Performance Graphics 2026 獲得 Wolfgang Straßer Best Paper Award 第三名。AMD 目前也正在準備 DirectX Raytracing(DXR)範例,以及一套 header-only C++ library,讓開發者可以把這項技術整合進自己的渲染流程。

目前這仍然是研究展示,並不是已經出現在遊戲裡的現成功能,所以不能直接理解成RX 9070 XT 已經可以在遊戲中光追 5 億三角形。不過從測試結果來看,AMD 確實找到了一種相當有效的方式,把大量動畫幾何的 BVH 更新成本壓下來。

如果未來這類技術真的被遊戲引擎採用,像是大量草木、森林、群眾這種場景,就有機會在不塞進幾十 GB VRAM 給 BVH 的情況下加入更完整的 Ray Tracing。畢竟 80GB 光是拿來放 BVH,這已經不是顯卡 VRAM 夠不夠的問題,而是拿這種成本為了光追的意義何在。
其實根本就沒必要計算真實的光線追蹤 為每一個像素計算場景中所有光源的反射與折射對物品材質最終產生出的影響(真實光追)耗費巨量的計算資源 只需要讓模型知道在這個場景scene中哪裡有光(全局光照 點光源 平行光) 剩下的就是利用前者算法產生出來得真實光追圖當作數據去給AI訓練 訓練完以後 就得到了一個會畫素描的畫師 當這個畫師在畫臉的時候如果想像這張臉的左邊有光 那他自然而然地會給角色的右半邊臉加上陰影 這樣比真實地去計算每一個像素受到光源的影響來得節省資源的多
雖說是腦補出來的 但逼真程度已經足夠了