實(shí)時(shí)渲染路徑追蹤概述
大家好,本文是對(duì)Real-Time Path Tracing and Beyond和它的視頻:HPG 2022 Monday, Day 1 (enhanced)學(xué)習(xí)的總結(jié),并結(jié)合我的理解進(jìn)行了一些延伸
得益于下面的技術(shù)進(jìn)步,使得通常應(yīng)用于離線渲染技術(shù)中的路徑追蹤能夠應(yīng)用于實(shí)時(shí)渲染:
- RTX顯卡帶來(lái)的硬件光追管線
使用該管線可使射線與場(chǎng)景相交計(jì)算大幅提升;并且不再需要自己維護(hù)BVH加速結(jié)構(gòu),而是直接使用管線默認(rèn)提供的加速結(jié)構(gòu)來(lái)代替 - 新的采樣方法:ReSTIR
該采樣方法通過(guò)在渲染過(guò)程中減少采樣的方差,帶來(lái)了幾十倍的速度提升;并且能夠優(yōu)化有大量光源的情況;并且支持更健壯的光源路徑(比如光源隱藏在門(mén)后的情況) - 新的降噪技術(shù)
主要代表為SVGF等結(jié)合時(shí)間和空間上的信息一起做Filter的降噪算法以及基于神經(jīng)網(wǎng)絡(luò)降噪技術(shù)
渲染管線
實(shí)時(shí)渲染路徑追蹤的渲染管線如下圖所示:

管線分為三個(gè)部分:
前端->光照傳輸->后處理
下面依次討論:
前端
前端主要負(fù)責(zé)組織場(chǎng)景數(shù)據(jù),包括構(gòu)造和更新場(chǎng)景數(shù)據(jù)
有兩個(gè)實(shí)現(xiàn)方案:
- 使用基于光追管線提供的BLAS和TLAS來(lái)組織場(chǎng)景數(shù)據(jù),并使用它的API來(lái)更新場(chǎng)景數(shù)據(jù)
- 對(duì)于不支持光追管線的情況,也可以自己構(gòu)造和更新BVH
- 如何使用LBVH算法在CPU端構(gòu)造BVH,可參考如何用WebGPU流暢渲染百萬(wàn)級(jí)2D物體?->實(shí)現(xiàn)BVH
- 如何改進(jìn)GPU端遍歷BVH,可參考WebGPU實(shí)現(xiàn)Ray Packet
- 如何在GPU端構(gòu)造BVH并具有良好的訪問(wèn)性能,可參考PLOC算法,參考代碼在這里
- 如何更新BVH,可參考更新BVH樹(shù)
光照傳輸
光照傳輸使用路徑追蹤來(lái)實(shí)現(xiàn)直接光照和間接光照的計(jì)算。
不過(guò)對(duì)路徑追蹤進(jìn)行了下面的改進(jìn):
原文還對(duì)frameless render進(jìn)行了討論,不過(guò)我不是很了解
后處理
后處理包括降噪->DLSS->其它后處理(如tone map)
這里討論降噪
原文使用了Nvdia的NRD Denoiser來(lái)降噪,它相當(dāng)于SVGF的改進(jìn)版
我其實(shí)更看好神經(jīng)網(wǎng)絡(luò)降噪,這也是最近的發(fā)展趨勢(shì)
原文中也提到了一種神經(jīng)網(wǎng)絡(luò)降噪的方法:Neural Temporal Adaptive Sampling and Denoising
它還有改進(jìn)的論文:
Interactive Monte Carlo Denoising using Affinity of Neural Features
通過(guò)參考下面的資料:
我確定了通過(guò)依次實(shí)現(xiàn)下面的論文,可以逐漸改進(jìn)蒙特卡洛降噪器:
- 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: 著色器語(yǔ)言中的Typescript
因?yàn)槭褂昧私y(tǒng)一的路徑追蹤算法,所以只需要一個(gè)shader
這個(gè)shader原文作者寫(xiě)了1萬(wàn)行,規(guī)模相當(dāng)大,因此需要一種更容易維護(hù)、更模塊化的shader語(yǔ)言
因此,原文作者使用了slang,它支持接口定義等語(yǔ)法,貌似可以進(jìn)行單元測(cè)試,可以編譯為GLSL、HLSL等著色器語(yǔ)言
slang相當(dāng)于Typescript,也就是在原始的著色器語(yǔ)言之上增加了一層編譯器
我構(gòu)想的具體實(shí)現(xiàn)的方案
下面是我構(gòu)想的具體實(shí)現(xiàn)的方案:
應(yīng)用領(lǐng)域
Web3D
技術(shù)棧
- WebGPU
如果渲染器是運(yùn)行在瀏覽器中的話,則使用WebGPU這個(gè)圖形API。但是目前WebGPU只有計(jì)算管線而沒(méi)有光追管線,所以我們就需要自己維護(hù)BVH - WebGPU Node
如果渲染器是運(yùn)行在Nodejs中的話,則可以使用WebGPU Node這個(gè)開(kāi)源的Nodejs項(xiàng)目。它底層封裝了Vulkan SDK,上層使用了dawn-ray-tracing項(xiàng)目,提供了WebGPU API,實(shí)現(xiàn)了在Nodejs環(huán)境中使用WebGPU API和光追管線來(lái)實(shí)現(xiàn)硬件加速的光線追蹤。
具體介紹可見(jiàn)WebGPU+光線追蹤Ray Tracing 開(kāi)發(fā)三個(gè)月總結(jié)
技術(shù)方案
我們應(yīng)該會(huì)優(yōu)先使用WebGPU Node,因?yàn)樗С止庾饭芫€
我們使用自主開(kāi)發(fā)的神經(jīng)網(wǎng)絡(luò)降噪器來(lái)降噪
我們基于自主開(kāi)發(fā)的Meta3D:開(kāi)源Web3D低代碼平臺(tái),通過(guò)實(shí)現(xiàn)多個(gè)獨(dú)立且可組裝的擴(kuò)展來(lái)開(kāi)發(fā)可維護(hù)、可擴(kuò)展、可讀的渲染器
初步的開(kāi)發(fā)計(jì)劃
1.實(shí)現(xiàn)基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)降噪器
需要重點(diǎn)實(shí)現(xiàn):
需要使用我開(kāi)發(fā)的深度學(xué)習(xí)庫(kù),并將其改為支持GPU端訓(xùn)練和推理
2.直接使用基礎(chǔ)的路徑追蹤算法來(lái)渲染基本的場(chǎng)景,并用神經(jīng)網(wǎng)絡(luò)降噪器來(lái)降噪
3.使用slang來(lái)寫(xiě)著色器語(yǔ)言,編譯為GLSL
4.實(shí)現(xiàn)動(dòng)態(tài)場(chǎng)景
5.將渲染器拆成光照傳輸和降噪器兩個(gè)部分,并重構(gòu)為基于Meta3D的擴(kuò)展
6.將光照傳輸改為使用RTXDI實(shí)現(xiàn)直接光照、使用ReSTIR GI實(shí)現(xiàn)間接光照
大家好,本文是對(duì)Real-Time Path Tracing and Beyond學(xué)習(xí)的總結(jié),并結(jié)合我的理解進(jìn)行了一些延伸
得益于下面的技術(shù)進(jìn)步,使得通常應(yīng)用于離線渲染技術(shù)中的路徑追蹤能夠應(yīng)用于實(shí)時(shí)渲染
浙公網(wǎng)安備 33010602011771號(hào)