實時渲染路徑追蹤概述

2023-02-25 15:02:36

大家好,本文是對Real-Time Path Tracing and Beyond和它的視訊:HPG 2022 Monday, Day 1 (enhanced)學習的總結,並結合我的理解進行了一些延伸

得益於下面的技術進步,使得通常應用於離線渲染技術中的路徑追蹤能夠應用於實時渲染:

  • RTX顯示卡帶來的硬體光追管線
    使用該管線可使射線與場景相交計算大幅提升;並且不再需要自己維護BVH加速結構,而是直接使用管線預設提供的加速結構來代替
  • 新的取樣方法:ReSTIR
    該取樣方法通過在渲染過程中減少取樣的方差,帶來了幾十倍的速度提升;並且能夠優化有大量光源的情況;並且支援更健壯的光源路徑(比如光源隱藏在門後的情況)
  • 新的降噪技術
    主要代表為SVGF等結合時間和空間上的資訊一起做Filter的降噪演演算法以及基於神經網路降噪技術

渲染管線

實時渲染路徑追蹤的渲染管線如下圖所示:

管線分為三個部分:
前端->光照傳輸->後處理

下面依次討論:

前端

前端主要負責組織場景資料,包括構造和更新場景資料

有兩個實現方案:

光照傳輸

光照傳輸使用路徑追蹤來實現直接光照和間接光照的計算。

不過對路徑追蹤進行了下面的改進:

  • 使用ReSTIR取樣方法
  • 使用RTXDI計算直接光照
  • 使用ReSTIR GI計算間接光照

原文還對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實現間接光照