大家好,本文是對Real-Time Path Tracing and Beyond和它的影片:HPG 2022 Monday, Day 1 (enhanced)學習的總結,並結合我的理解進行了一些延伸
得益於下面的技術進步,使得通常應用於離線渲染技術中的路徑追蹤能夠應用於實時渲染:
- RTX顯示卡帶來的硬體光追管線
使用該管線可使射線與場景相交計算大幅提升;並且不再需要自己維護BVH加速結構,而是直接使用管線預設提供的加速結構來代替 - 新的取樣方法:ReSTIR
該取樣方法透過在渲染過程中減少取樣的方差,帶來了幾十倍的速度提升;並且能夠最佳化有大量光源的情況;並且支援更健壯的光源路徑(比如光源隱藏在門後的情況) - 新的降噪技術
主要代表為SVGF等結合時間和空間上的資訊一起做Filter的降噪演算法以及基於神經網路降噪技術
渲染管線
實時渲染路徑追蹤的渲染管線如下圖所示:
管線分為三個部分:
前端->光照傳輸->後處理
下面依次討論:
前端
前端主要負責組織場景資料,包括構造和更新場景資料
有兩個實現方案:
- 使用基於光追管線提供的BLAS和TLAS來組織場景資料,並使用它的API來更新場景資料
- 對於不支援光追管線的情況,也可以自己構造和更新BVH
- 如何使用LBVH演算法在CPU端構造BVH,可參考如何用WebGPU流暢渲染百萬級2D物體?->實現BVH
- 如何改進GPU端遍歷BVH,可參考WebGPU實現Ray Packet
- 如何在GPU端構造BVH並具有良好的訪問效能,可參考PLOC演算法,參考程式碼在這裡
- 如何更新BVH,可參考更新BVH樹
光照傳輸
光照傳輸使用路徑追蹤來實現直接光照和間接光照的計算。
不過對路徑追蹤進行了下面的改進:
原文還對frameless render進行了討論,不過我不是很瞭解
後處理
後處理包括降噪->DLSS->其它後處理(如tone map)
這裡討論降噪
原文使用了Nvdia的NRD Denoiser來降噪,它相當於SVGF的改進版
我其實更看好神經網路降噪,這也是最近的發展趨勢
原文中也提到了一種神經網路降噪的方法:Neural Temporal Adaptive Sampling and Denoising
它還有改進的論文:
Interactive Monte Carlo Denoising using Affinity of Neural Features
透過參考下面的資料:
我確定了透過依次實現下面的論文,可以逐漸改進蒙特卡洛降噪器:
- LBF
A machine learning approach for filtering Monte Carlo noise - KPCN
Kernel-predicting convolutional networks for denoising Monte Carlo renderings - KPAL
Denoising with kernel prediction and asymmetric loss functions - Monte Carlo Denoising via Auxiliary Feature Guided Self-Attention
- Self-Supervised Post-Correction for Monte Carlo Denoising
slang: 著色器語言中的Typescript
因為使用了統一的路徑追蹤演算法,所以只需要一個shader
這個shader原文作者寫了1萬行,規模相當大,因此需要一種更容易維護、更模組化的shader語言
因此,原文作者使用了slang,它支援介面定義等語法,貌似可以進行單元測試,可以編譯為GLSL、HLSL等著色器語言
slang相當於Typescript,也就是在原始的著色器語言之上增加了一層編譯器
我構想的具體實現的方案
下面是我構想的具體實現的方案:
應用領域
Web3D
技術棧
- WebGPU
如果渲染器是執行在瀏覽器中的話,則使用WebGPU這個圖形API。但是目前WebGPU只有計算管線而沒有光追管線,所以我們就需要自己維護BVH - WebGPU Node
如果渲染器是執行在Nodejs中的話,則可以使用WebGPU Node這個開源的Nodejs專案。它底層封裝了Vulkan SDK,上層使用了dawn-ray-tracing專案,提供了WebGPU API,實現了在Nodejs環境中使用WebGPU API和光追管線來實現硬體加速的光線追蹤。
具體介紹可見WebGPU+光線追蹤Ray Tracing 開發三個月總結
技術方案
我們應該會優先使用WebGPU Node,因為它支援光追管線
我們使用自主開發的神經網路降噪器來降噪
我們基於自主開發的Meta3D:開源Web3D低程式碼平臺,透過實現多個獨立且可組裝的擴充套件來開發可維護、可擴充套件、可讀的渲染器
初步的開發計劃
1.實現基礎的神經網路降噪器
需要重點實現:
需要使用我開發的深度學習庫,並將其改為支援GPU端訓練和推理
2.直接使用基礎的路徑追蹤演算法來渲染基本的場景,並用神經網路降噪器來降噪
3.使用slang來寫著色器語言,編譯為GLSL
4.實現動態場景
5.將渲染器拆成光照傳輸和降噪器兩個部分,並重構為基於Meta3D的擴充套件
6.將光照傳輸改為使用RTXDI實現直接光照、使用ReSTIR實現間接光照