2018 年, NVIDIA RTX 引入了對光線追蹤三角形網格的硬件支持。但是,頭發和毛皮的光線追蹤仍然是一個計算密集型問題,一直難以進一步加速。那就是,直到現在。
NVIDIA GeForce 50 系列 GPUs 在加速毛發和毛皮光線追蹤方面取得了重大進步:硬件光線追蹤支持線性掃描球體 (LSS) 基元。這種新基元是向實時渲染高質量數字人邁出的一大步。逼真的人類渲染的應用領域與日俱增,包括 AI 虛擬形象、電影和游戲角色、圖形研究、高性能科學計算應用、合成數據生成等。
LSS 現已在 NVIDIA OptiX 和 NVAPI SDK 中提供。 RTX Character Rendering SDK 是 NVIDIA RTX Kit 的一部分,其中包含使用基于物理性質的著色模型的 LSS 的高級實時毛發示例。RTX Kit 是一套神經渲染技術,可利用 AI 對游戲進行光線追蹤、渲染具有宏大幾何圖形的場景,以及使用逼真視覺效果創建游戲角色。RTX Kit 在 GeForce RTX 50 Series 發布時推出。
什么是 LSS 基元?
LSS 基元是一條具有不同半徑的粗而圓的 3D 線。可以將多個線性掃描球體鏈接在一起以構建 3D 曲線,在它們重疊的位置共享頂點,這與使用三角形構建 3D 表面的方式類似。LSS 的形狀類似圓柱形或錐形管,球體的兩端均可選擇覆蓋。

如果兩個端點重疊,因此直線沒有長度,則直線掃描球體僅會成為常規球體。這可用于硬件加速粒子渲染。為了方便球體和提高內存效率,我們將球體 LSS 的這種特殊情況作為單獨的一級球體基元公開。
通常情況下,線性掃描球體并不像圖 1 那樣以放大鏡頭顯示。相反,它們的屏幕尺寸較小,可能有 1 像素寬,可以取或取。當多個線性掃描球體被鏈式連接成多條鏈路,并將攝像頭稍微往后拉時,清晰的角度會消失,這些粗壯的線條會變成纖細的平滑曲線。

LSS 索引?
LSS 提供兩種索引模式:顯式列表模式和稱為連續隱式的半隱式模式。在列表模式下,系統會在頂點緩沖區中使用一對索引顯式指定每個片段。在連續隱式模式下,使用一個顯式索引和一個隱式索引指定線段,其中第二個點假定為頂點緩沖區中的下一個頂點。
由于內存中的連續頂點十分常見且方便,因此可以通過連續隱式模式在索引緩沖區中輕松節省 50% 的內存。圖 3 顯示了顯式索引緩沖區包含 [0,1,1,2,2,3,4,5,5,6] 的示例。通過連續的隱式索引,索引緩沖區將為 [0,1,2,4,5]。

使用傳統硬件渲染基于鏈的曲線
對于已經使用基于 CUDA 的光線追蹤 API 框架 NVIDIA OptiX 的用戶,LSS 已作為默認線性曲線類型提供,并且適用于 OptiX 支持的所有 GPU。OptiX 版本的 LSS 自動使用 NVIDIA Blackwell GPU 之前的 GPU 上的軟件回退,以及 GeForce RTX 50 Series GPU 上的新硬件加速基元,而無需更改任何代碼。如果您未使用 OptiX,則可能需要使用替代基元。
說到高性能,細分曲線是 LSS 的下一個最佳選擇。其中一個選項是攝像頭對焦或光線對焦四邊形。盡管在動畫的每一幀(毛發運動或相機運動)中,面向光線的四邊形的顯存占用相對較小,但其顯存占用相對較小。
不交正交三角形條 (DOTS) 提供了一個巧妙的曲線細分解決方案,支持從任何角度進行查看,而無需重新調整每幀三角形的方向以面向攝像頭。這樣,如果渲染靜態曲線,則無需在相機或頭發移動時重建包圍盒層次結構 (BVH)。三角形擁有廣泛支持,因此 DOTS 可以利用現有的 RTX 硬件。
如果您想在 GeForce RTX 50 系列 GPUs 上使用 LSS,仍然可以使用 DOTS 在較舊的 GPU 上支持光線追蹤鏈。一些同時使用 DOTS 和 LSS 的毛發示例將作為 RTX Character Rendering SDK 的一部分提供,該 SDK 可實現逼真的人類頭發和皮膚的路徑追蹤。
LSS 的一個優點是幾何體自然呈圓形,因此在投射陰影和反射光線時,很容易著色,并且很容易避免自交。像 DOTS 這樣的細分曲線通常需要使用自定義著色法線覆蓋幾何法線,如圖 4 所示。當使用圓周著色法線時,DOTS 的外觀可能與由線性掃描球體構成的曲線相似,甚至無法區分。

使用 LSS 的優勢?
一些現有的實時頭發處理方法包括:
- 紋理卡
- 面向光線的四邊形,鑲嵌管,正交四邊形 (DOTS)
- 軟件高階曲線基元 (例如 cubic Bezier)
紋理卡是在預算有限的情況下,在游戲中實現合理的頭發質量的好方法。但是,這種設置非常有限,沒有足夠的空間用于模擬頭發或制作頭發動畫。由于一張紋理卡的每張卡有多個鏈,因此根據設計,無法控制單個鏈。基于鏈的方法更具可控性和靈活性,這也是為什么鏈顯然是實時頭發渲染的未來,因為世界的硬件會隨著時間的推移而改進。

由于硬件目前已大力支持三角形,因此可以非常快速地將曲線細分為三角形(管、四邊形、DOTS)。缺點是細分需要時間,并且會占用大量內存。一個四邊形需要四個頂點,不過兩個頂點可以與鏈中的下一個相鄰四邊形共享。因此,面向四邊形的攝像頭平均每個鏈段至少會耗費兩個頂點。如果使用管或 DOTS,則鏈的每個部分最終平均將包含兩個以上的頂點。
LSS 的每個鏈段平均只需要一個頂點,因此與細分曲線相比,它使用的內存更少,同時實現了更高的渲染速度。當然,LSS 比軟件高階曲線基元 (如 cubic B-spline) 的速度要快得多。根據對質量的需求和容差,與 cubic curves 相比,這種額外的性能可能會帶有內存權衡,例如,如果需要更多的頂點來實現平滑度。
LSS 還有哪些其他用途?
RTX 版本的線性掃描球體在設計時主要考慮了毛發和毛皮,但它可以用于其他應用,包括粒子、分子模型、線框渲染、字體和路徑渲染以及您可以想象的其他任何應用。

開始使用 LSS?
NVIDIA GeForce RTX 50 系列 GPU 中的 RT Cores 為一種稱為線性掃描球體 (LSS) 的新基元引入了硬件支持。LSS 是一種厚度不同的 3D 圓線基元,支持靈活逼近各種鏈類型。作為 LSS 的一種特殊情況,GeForce RTX 50 系列 GPU 硬件基元還直接支持球體 (不包含掃描線性分割),這對于像粒子系統這樣的應用非常有用。
與 DOTS 相比,使用 LSS 在人類身上渲染動畫毛發的速度大約快 2 倍,同時存儲幾何圖形所需的 VRAM 也減少了大約 5 倍。這與其他常見用例類似。借助 GeForce RTX 50 系列 GPUs 上的 LSS 和早期 GPUs 上的 DOTS,現在可以在所有 RTX GPUs 上獲得盡可能高的毛發光線追蹤性能。
在 CUDA 中進行光線追蹤時,LSS 目前可在 OptiX 中使用。對于 DirectX,可以從 R570 版本的 NVAPI SDK 開始找到適用于 LSS 的 API。Vulkan 開發者可能會對 Vulkan LSS 擴展 感興趣。
有關基于物理效果的頭發渲染示例,請查看 RTX Character Rendering SDK 。如需詳細了解最新的 AI 和渲染技術,請查看 NVIDIA RTX Kit 。在 OptiX NVIDIA 開發者論壇 上加入有關 LSS 的對話。
?