大家好~本課程基於全連接和卷積神經網絡,學習LBF等深度學習降噪算法,實現實時路徑追蹤渲染的降噪
本課程偏向於應用實現,主要介紹深度學習降噪算法的實現思路,演示實現的效果,給出實現的相關代碼
線上課程資料:
本節課錄像回放
加QQ羣,獲得相關資料,與羣主交流討論:106047770
本系列文章爲線上課程的覆盤,每上完一節課就會同步發佈對應的文章
本課程系列文章可進入合集查看:
深度學習降噪專題課系列文章合集
降噪的目的
光追、路徑追蹤 都會產生噪點,需要降噪
實時路徑追蹤渲染中,降噪是重點
傳統降噪方法
小波過濾
SVGF、BMFR
針對1 spp降噪
算法的基本思想:
- 通過幀間複用,累積多幀的採樣數,從而提升1 spp到X spp
- 在Compute Shader中使用小波過濾、線性代數過濾等傳統過濾方法對採樣的圖片降噪
- 結合TAA,實現抗鋸齒
它們屬於實時降噪,其中:
SVGF耗時:4ms
BMFR耗時:1.6ms
深度學習降噪方法
這是最近的趨勢,目前已經有了深度學習蒙特卡洛實時渲染降噪,如WSPK,它只耗時7ms左右
深度學習蒙特卡洛降噪和深度學習圖片降噪區別
前者多出了使用輔助特徵來加速收斂,輔助特徵包括:normal、world position、camera space depth、albedo等
深度學習蒙特卡洛降噪介紹
深度學習蒙特卡洛降噪主要包括LBF、KPCN、WPSK等算法
深度學習蒙特卡洛降噪的基本思想
主要包括下面幾個部分:
輸入->network->輸出
其中,分爲訓練、推理兩個階段
在訓練階段中:
輸入是包含輔助特徵的多個patch數據,如對於KPCN而言,輸入的tensor的shape爲[64,28,128,128],它是一個batch的輸入數據,batch size爲64,有28個channel,大小爲(128寬,128高)
輸出是包含顏色(也就是輻射亮度)的patch數據,如對於KPCN而言,輸出的tensor的shape爲[64,3,128,128],它是一個batch的輸出數據,batch size爲64,有3個channel(輻射亮度的r、g、b),大小爲128*128
在推理階段中:
輸入是包含輔助特徵的整個場景圖片,如對於KPCN而言,輸入的tensor的shape爲[1,28,720,1280],它是一個batch的輸入數據,batch size爲1,有28個channel,大小爲場景大小(這裏爲1280寬,720高)
輸出是包含顏色(也就是輻射亮度)的整個場景圖片,如對於KPCN而言,輸出的tensor的shape爲[1,3,720,1280],它是一個batch的輸出數據,batch size爲1,有3個channel(輻射亮度的r、g、b),大小爲場景大小(這裏爲1280寬,720高)
訓練通常是離線的,它的dataset是預先準備好的圖片。訓練完成後,將模型數據保存到文件中。
推理通常是實時的,它的dataset是圖片或者GPU數據(如WebGPU中的GBuffer數據,它保存了輔助特徵以及color),需要先讀取模型數據到network中
爲了提高訓練和推理速度,我們通常是優化network這部分:
如使用更快收斂的network,以及改進network的輸出層(如通過核預測實現類似於softmax的輸出);
另外,對於WPSK而言,由於network使用了RepVGG塊,可以通過結構重參數化來使得訓練和推理的network的結構不一樣(訓練的network是多路架構,推理的network是單路架構),從而提高network的收斂速度
深度學習蒙特卡洛降噪的實現
我們會使用pytorch框架來實現訓練,使用WebNN API來實現推理
WebNN API是瀏覽器提供的深度學習API,底層調用了深度學習硬件來加速,同時使用WebGPU、WebGL來做polyfill