主頁 >  其他 > 實時&離線皮膚渲染技術(Real-time&Offline Skin Rendering)

實時&離線皮膚渲染技術(Real-time&Offline Skin Rendering)

2021-12-23 06:56:13 其他

目錄
  • 現實皮膚模型
  • BSSRDF 渲染模型 [2001]
  • Diffusion Profile(擴散剖面)[2001]
    • 偶極子 [2002]
    • 高斯和 [2007]
    • Burley Normalized Diffusion [2015]
  • 基于模糊的 SSS 方法
    • 紋理空間模糊(Texture Space Blur) [2003]
    • 螢屏空間模糊(Screen Space Blur) [2009]
    • Pre-Integrated Skin(預積分的皮膚著色)[2010]
    • Separable SSS(可分離的次表面散射)[2015]
    • Bilateral Filtering [2010]
  • Participating Media 渲染模型
  • Phase 函式
    • 各向同性 Phase
    • 各向異性 Phase
    • Schlick Phase 近似
  • Random Walk SSS(Volumetric Path Tracing)
    • Path Sampling 的一些方法 [2016、2017]
    • Manifold Next Event Estimation,MNEE [2015]
    • Subdivision Next-Event Estimation,SNEE [2016]
  • 工業界實作方案
    • UE4 方案 [Metahuman]
      • Skin Pipeline
      • 皮膚毛孔
      • 皮膚反射
      • BSSRDF 渲染
      • 改進的 SSAO
    • Unity 方案 [Siggraph 2018]
      • 薄物體透射
    • Nvidia 方案 [Siggraph 2021]
  • 參考文獻

最近在做一個數字人渲染DEMO,本博客將用于記錄搜集到的 Skin Rendering 技術,持續更新中,

現實皮膚模型

在渲染皮膚時主要關注以下光照路徑:

  • 鏡面反射:6%入射皮膚的光被皮膚最上層油脂菲涅爾反射
    • 實作例子:Dual Specular BRDF

  • 次表面散射(Subsurface Scattering,SSS):94% 的光進入皮膚次表層,在圍繞進入點的 3D 鄰域中回傳和離開表面,現實的皮膚介質是多層的,而較物理的渲染一般建模成至少兩個不同的層,散射路徑還可進一步細分為單次散射和多次散射的路徑:

    • 單散射:在介質內部只散射了一次的光照貢獻,與光線角度相關性大
    • 多散射:在介質內部散射了2次或更多次的光照貢獻(也是diffuse現象的主要來源,而皮膚主要貢獻便是多散射)
    • 實作例子:BSSRDF

  • 透射 [可選]:對于較薄的物體(如耳朵邊緣、鼻子邊緣),光射入的平面和射出的平面很可能是不一樣的,實際上如果次表面散射的路徑實作的足夠物理,自然而然也會包含透射現象,因此該光路是可選的

    • 實作例子:BTDF with Thickness Map & Shadow Thickness

BSSRDF 渲染模型 [2001]

光線進入 shading point 周圍的像素后經過在散射介質內部的隨機游走(Random Walk),可能會從 shading point 射出,但 SSS 的光線在散射介質中的游走行為難以模擬,為了達成實時渲染的性能要求,便有了以下思路:

  • 提供一個類似于 BRDF 的函式(也就是 BSSRDF),但輸入引數從4D(入射方向、出射方向)變成了8D(入射點位置、入射方向、出射點位置、出射方向)
  • 太遠的像素對 shading point 的散射光貢獻極小,因此可以忽略它們,只對一定范圍內的表面 A 進行積分
img

圖左是 BRDF 的行為,圖右是 BSSRDF 的行為

于是便有了基于 BSSRDF 的渲染方程,相當于在 BRDF 渲染方程的基礎上增加了對表面的積分:

\(L_{o}\left(p_{o}, \omega_{o}\right)=\int_{A} \int_{2\pi} S\left(p_{o}, \omega_{o}, p_{i}, \omega_{i}\right) L_{i}\left(p_{i}, \omega_{i}\right)\left|\cos \theta_{i}\right| d \omega_{i} d A\)

然后又基于下列假設:

  • 次表面散射的物體是一個曲率為零的平面
  • 這個平面的厚度,大小都是無限
  • 平面內部的介質引數是均勻的
  • 光線永遠是從垂直的方向入射表面

得出 BSSRDF 函式的形式:

\(S\left(p_{o}, \omega_{o}, p_{i}, \omega_{i}\right)=\frac{1}{\pi} F_{t}\left(\eta_{o}, \omega_{o}\right) R_{d}\left(\left\|p_{i}-p_{o}\right\|\right) F_{t}\left(\eta_{i}, \omega_{i}\right)\)

Diffusion Profile(擴散剖面)[2001]

Diffusion Profile 描述了光線如何在半透明物體中進行擴散和分布,其函式形式如下:

\(R_{d}\left(\left\|p_{i}-p_{o}\right\|\right)\)

其實就是一個記錄了 BSSRDF 答案的二維 LUT ,輸入引數是單散射的albedo和距離,

實際上 Diffusion Profile 就是預計算散射光線在介質內部的 Random Walk 行為,然后做成 LUT 以供 BSSRDF 快速查詢結果,從而達成實時渲染的性能需求,

圖片2

常見有計算 Diffusion Profile 的方法:

  • 偶極子(Dipole)[2002]
  • 多級子(Multipole)[2005]
  • 高斯和(Sum-of-Gaussians)擬合 [2007]
  • Burley Normalized Diffusion 擬合 [2015]

偶極子 [2002]

將 BSSRDF 分成單散射部分和漫反射部分去擬合:

\(S = S_{ss}+S_{ms}\)

單散射近似:為了簡化折射路徑,假設光源離表面距離很遠,將使用直射的ray來近似折射,因此可用 BRDF 來近似,結合蒙特卡洛方法計算出來,單散射的 radiance,受折射路徑距離、折射吸收率擴散率影響:

\(L_{o}^{(1)}\left(x_{o}, \vec{\omega}_{o}\right)=\frac{\sigma_{s}\left(x_{o}\right) F p\left(\vec{\omega}_{i} \cdot \vec{\omega}_{o}\right)}{\sigma_{t c}} e^{-s_{i}^{\prime} \sigma_{t}\left(x_{i}\right)} e^{-s_{o}^{\prime} \sigma_{t}\left(x_{o}\right)} L_{i}\left(x_{i}, \vec{\omega}_{i}\right)\)

雖然BRDF是基于直射路徑的,但是關于折射路徑的距離仍然可以通過以下斯涅耳定律公式估計出:

\(s_{i}^{\prime}=s_{i} \frac{\left|\vec{\omega}_{i} \cdot \vec{n}_{i}\right|}{\sqrt{1-\left(\frac{1}{\eta}\right)^{2}\left(1-\left|\vec{\omega}_{i} \cdot \vec{n}\left(x_{i}\right)\right|^{2}\right)}}\)

漫反射近似:假設兩次及以上的散射事件導致了光分布的均勻,因此這部分散射視為漫反射,使用偶極子來表示入射光源分布,上面為正的真實光源,下面為負的虛擬光源,

image-20211128161658294

仍然采用蒙特卡洛方法,取N個sample分布于不同的半徑 \(z_r\)(與負光源的距離),然后推算出一系列變數(如\(Z_v\)),其中 1 個sample 受偶極子源影響的漫反射:

\(\begin{aligned} R_{d}(r) &=\frac{\alpha^{\prime}}{4 \pi}\left[\left(\sigma_{t r} d_{r}+1\right) \frac{e^{-\sigma_{t r} d_{r}}}{\sigma_{t}^{\prime} d_{r}^{3}}+z_{v}\left(\sigma_{t r} d_{v}+1\right) \frac{e^{-\sigma_{t r} d_{v}}}{\sigma_{t}^{\prime} d_{v}^{3}}\right] \end{aligned}\)

偶極子方法實在太老而且極子部分涉及的物理知識完全沒學過,沒什么參考價值還是跳過把,

高斯和 [2007]

用若干個高斯函式去擬合 Diffusion Profile:

  • 1個高斯函式可以很好擬合多散射效果,但無法擬合單散射+多散射
  • 2個高斯函式可以勉強擬合單散射+多散射
  • 6個高斯函式可以得到相當高精度的擬合效果

Burley Normalized Diffusion [2015]

放棄物理,直接擬合,

  • 開銷低,精確度卻相當逼近基于蒙特卡洛暴力積分的無偏解
  • CDF 有決議解,可進行重要性采樣優化

\(R_{d}(r)=\frac{e^{-r / d}+e^{-r / 3 d}}{8 \pi d r}\)

基于模糊的 SSS 方法

紋理空間模糊(Texture Space Blur) [2003]

img

總體流程:

  1. 渲染任何陰影貼圖

  2. 渲染拉伸校正貼圖(可以是預先計算的)

  3. 渲染輻照度紋理

  4. 紋理模糊:

    • 卷積核的權重:由高斯和擬合的 Diffusion Profile 確定
    • 卷積核的半徑:由拉伸矯正貼圖提供半徑拉伸系數
    • 對每個高斯核進行可分離的模糊 Pass,并保存對應高斯卷積紋理
  5. 在 3D 中渲染網格:

    • 訪問每個高斯卷積紋理并線性組合
    • 為每個光源添加鏡面反射

螢屏空間模糊(Screen Space Blur) [2009]

img

核心思路:

  • 只需要對螢屏中 Stencil 標記過的 Skin像素進行若干卷積操作,極大地降低了 Blur 的像素數目
  • 卷積核的大小:根據當前像素的深度 z(x,y) 及其深度兩個方向的導數來確定

Pre-Integrated Skin(預積分的皮膚著色)[2010]

img

Pre-Integrated Skin 是一個遠遠脫離物理基礎的演算法,其特點主要是高效、簡單、視覺可接受

核心思路:

  • 預先對紋理進行卷積,而不用運行時卷積,
  • 查找表的引數分別是dot(N,L)和曲率,這兩者結合就可以反映出光照隨著曲率的變化,

Separable SSS(可分離的次表面散射)[2015]

  • Separable Subsurface Scattering [2015]

BSSRDF 實質就是進行一次2D卷積運算,可分離的卷積核就是在尋找一個可分離的核來表示的 Diffusion Profile 的近似,然后轉成兩個1D 卷積 Pass ,讓時間復雜度從O(n^2)=>O(n)

如圖,先經過一次 X 方向的卷積 Pass ,再經過一次 Y 方向的卷積 Pass 就能得到相當于 2D 卷積的效果,最后再添加 Specular 就能得到很好的 SSS 材質效果,

注:不可以先添加 Specular 再進行卷積,不然會出現明顯的 aritifact (例如高光處被卷積成十字形狀)

  1. 高斯和函式的卷積核:傳統擬合方法;1個2D高斯雖然可分離,6個2D高斯和卻是不可分離的,除非使用6*2個1D卷積 Pass ,或者老老實實 2D 卷積,但都比較耗性能
  2. 基于SVD分解的可分一維卷積核:有局限
  3. 藝術家易用的卷積核:分解為近距離散射和遠距離散射兩個部分,兩個高斯函式先相加后相乘,相當于四個高斯函式單獨作用再相加

\(a_{m}(x)=w G\left(x, \sigma_{n}\right)+(1-w) G\left(x, \sigma_{f}\right)\)
\(A_{m}(x, y)=a_{m}(x) a_{m}(y)\)

  1. 增加引導函式的可分一維卷積核:給每個位置增加了一個重要性系數,用戶可自定義,但沒有直接的物理意義

  1. 預積分可分離核(Pre-integrated Separable Kernel):paper主要推薦的卷積核,

前提是假設 \(E\) 可分離:

\(E(x, y)=E_{1}(x)+E_{2}(y)\)

或者換個形式表示就是 \(\frac{\partial E}{\partial x \partial y}=\frac{\partial E}{\partial y \partial x}=0\)

一個常見的滿足E可分離的例子便是曲率為0的平面,換句話說,如果一個點的周圍都是平的且不考慮外部的陰影遮蔽關系,那么該點鄰域內各個位置的 E 都是一樣的,

然后根據下列公式推導,2D核 \(R_d\) 就可被分離成兩個1D核 \(a_p\)

\(\begin{aligned} M_{e}(x, y)=& \iint E\left(x^{\prime}, y^{\prime}\right) R_{d}\left(x-x^{\prime}, y-y^{\prime}\right) d x^{\prime} d y^{\prime} \\=& \int E_{1}\left(x^{\prime}\right) \underbrace{\int R_{d}\left(x-x^{\prime}, y-y^{\prime}\right) d y^{\prime} d x^{\prime}}_{a_{p}\left(x-x^{\prime}\right)} \\ &+\int E_{2}\left(y^{\prime}\right) \underbrace{\int R_{d}\left(x-x^{\prime}, y-y^{\prime}\right) d x^{\prime}}_{a_{p}\left(y-y^{\prime}\right)} d y^{\prime} \\=& \iint E\left(x^{\prime}, y^{\prime}\right) \frac{1}{\left\|a_{p}\right\|_{1}} a_{p}\left(x-x^{\prime}\right) a_{p}\left(y-y^{\prime}\right) d x^{\prime} d y^{\prime} \end{aligned}\)

其中,\(\left\|a_{p}\right\|_{1}=\left\|R_{d}\right\|_{1} \quad\|x\|_{1} =\sum_{i}\left|x_{i}\right|\)

這樣可以把2D卷積寫為2個1D卷積:

\(\left(E * R_{d}\right)(x, y) \approx(E * A)(x, y)=\sum_{i=1}^{N}\left(\left(E * a_{i}\right) * a_{i}\right)(x, y)\)

其中,\(A(x, y)=\sum_{i=1}^{N} a_{i}(x) a_{i}(y)\)

具體實作

  1. 需提前有一份較精確的 diffusion profile(如6個高斯和擬合成的 \(R_d\) 函式),然后對 \(R_d\) 進行預先卷積(對距離的積分)得到 \(a_p(offset)\) 函式,換句話說就是一張一維表(輸入一個 \(offset\) 值,輸出一個 \(a_p\) 值)
  2. 在具體實作中,則使用 N 個 sample 來取代這張一維表,規定好每個sample 的 offset 值 和計算出對應的 \(a_p\) 輸出值
  3. 將這個 sample list 傳給 shader,讓 shader 根據這些配置好的 sample 進行兩次 1D 卷積 Pass

注:即使E實際不可分,作者認為預計分可分離核的使用效果仍然足以接受,因此目前仍廣泛適用于各類實時BSSRDF皮膚渲染上

額外處理作業:

  • 抖動 Jittering:paper 使用的一個可分核的擴散近似,在入射輻射度發生高頻變化的地方會產生人工痕跡,這是因為信號的空間占用(尺寸)比核的寬度更小,從而產生不對稱的星形圖案,因為本文使用的近似核不是完全經向對稱的

    image-20211206153516816
    • 對1D過濾器作用一個隨機旋轉(逐個像素)
    • 這種方式不需要對進行重新預積分,因為核的寬度并沒有變化
    • 為了減少計算負荷,作者只對靠近像素的采樣進行處理(10%),增加區域可以取得更好的效果,看下圖區別:
image-20211206153638984
  • 核的寬度:卷積核的尺寸受一個于深度相關的拉伸因子

\(s_{x}=\frac{a}{d(x, y)+\beta \cdot a b s\left(V_{x} d(x, y)\right)}\)

\(s_{y}=\frac{a}{d(x, y)+\beta \cdot a b s\left(V_{y} d(x, y)\right)}\)

  • 重要性采樣:

    • 為了計算1D函式的卷積,需要對這個函式進行采樣(離散化)
    • 為了計算效率,三個顏色通道使用一樣的重要性采樣,這個重要性采樣由主導通道決定

    Bilateral Filtering [2010]

    絕大部分 BSSRDF 模型有一個很大的缺陷就是假設表面是平面,并且在平面上進行采樣,這顯然錯誤,現在通過 Bilateral Filtering 技術,可以把深度資訊考慮進去做采樣,

    \(I \approx \frac{2 \pi}{n} \sum_{i=1}^{n} \frac{R\left(r_{i}, d_{i}\right)}{p\left(r_{i}, d_{i}\right)} L=\frac{2 \pi}{n} \sum_{i=1}^{n} \frac{R(\sqrt{r_{i}^{2}+d_{i}^{2}})}{p\left(r_{i}, d_{i}\right)} L\)

    接下來就碰到困難了,\(p(r_i,d_i)\) 怎么算,之前的pdf是按平面計算的,它們的對應關系很難求,Unity 在報告中采用強制能量守恒,添加一個歸一化常數,

    \(I=\frac{\sum_{i=1}^{n} \frac{R\left(\sqrt{r_{i}^{2}+d_{l}^{2}}\right)}{p\left(r_{i}, d_{i}\right)} L}{\sum_{i=1}^{n} \frac{R\left(\sqrt{\left.r_{i}^{2}+d_{l}^{2}\right)}\right.}{p\left(r_{i}, d_{i}\right)}}\)

Participating Media 渲染模型

image-20211128170325457

Participating Media 是描述次表面散射最精確的模型,它描述了光線傳播時因散射、吸收而導致的變化率方程:

\(\frac{\partial}{\partial t} L_{o}(p, \omega)=-\sigma_{t}(p, \omega) L_{i}(p,-\omega)+\sigma_{s}(p, \omega) \int_{\delta^{2}} phase \left(p,-\omega^{\prime}, \omega\right) L_{i}\left(p, \omega^{\prime}\right) d \omega^{\prime}\)

image-20211201152655702

\(\sigma_a\) = absorption 系數,\(\sigma_s\) = in/out-scattering 系數,\(\sigma_t=\sigma_a+\sigma_s\) = extinction 系數

散射介質內部的 albedo 定義為:

\(\rho=\frac{\sigma_{s}}{\sigma_{s}+\sigma_{a}}=\frac{\sigma_{s}}{\sigma_{t}}\)

使用這個渲染模型就意味著要模擬光線在物體內部空間的隨機游走(Random Walk),相比于只求了表面積分的 BSSRDF 渲染方程,它更加精確但也是計算量最大的方法,基于該方法的基本都是離線的體積渲染方法:

  • Volumetric Path Tracing
  • Volumetric Photon Mapping
  • 等等

圖左是 BSSRDF 渲染模型做的,圖右是Participating Media 渲染模型做的

image-20211128170320424

Phase 函式

phase 函式表示了每對傳入傳出方向的能量分配概率,

各向同性 Phase

相當多的次表面散射的擴散模型假設各向同性,不捕獲各向異性散射,這樣簡化的各向同性 phase 函式:

\(p=\frac{1}{4\pi}\)

各向異性 Phase

image-20211201153141562

常用的各向 phase 函式便是 Henyey-Greenstein (HG) 函式,其中 n 為散射次數:

\(p_{n}\left(\omega \rightarrow \omega^{\prime}\right)=\frac{1-g^{2 n}}{4 \pi\left(1+g^{2 n}-2 g\left|g^{n-1}\right|\left(-\omega \cdot \omega^{\prime}\right)\right)^{3 / 2}}\)

皮膚的真實測量顯示了各向異性值為 g = 0.8,隨著n的增長,越來越呈現各向同性,

Schlick Phase 近似

獲得與 HG Phase 函式相似結果的一種更快的方法是使用 Blasi 等人提出的近似方法,通常為第三位作者命名為 Schlick Phase 函式:

\(p(\theta, k)=\frac{1-k^{2}}{4 \pi(1+k \cos \theta)^{2}}\)

其中, \(k \approx 1.55 g-0.55 g^{3}\)

它不包括任何復雜的冪函式,而只是一個平方,這是更快的計算, 為了將該函式映射到原始HG相函式,需要從g中計算k引數,對于具有恒定g值的參與介質,只需執行一次, 在實際應用中,Schlick相位函式是一個很好的能量守恒近似,

Random Walk SSS(Volumetric Path Tracing)

Diffusion-based 近似現在仍然廣泛使用,在假設介質是半無限長的平板(semi-infinte slab)的情況下,可以有很好的效果,而 MC 方法才能表現出物理正確,尤其在皮膚邊緣處(例如鼻子邊緣、耳朵邊緣)更加符合現實,

圖左是 normalized diffusion,圖右是 path-traced SSS

image-20211202130146661

Path Sampling 的一些方法 [2016、2017]

  • Practical and Controllable Subsurface Scattering for Production Path Tracing [2016] [Disney]
  • Path Traced Subsurface Scattering using Anisotropic Phase Functions and Non-Exponential Free Flights [2017] [Pixar Animation Studios]

距離采樣

  • 固定步長,無重要性

  • 根據單一波長的消散系數,適用于單色介質:\(p(s)=\sigma_{t} e^{-\sigma_{t} s}\)

  • 根據RGB三種波長的 transmittance (spectral MIS):

    • [2016] 累計吞吐量(throughput),權重取決于單散射 albedo,當某個波長吞吐量到達0時,就不需要做更多的采樣了

    • [2017] 使用基于 RGB 三種波長的 MIS:

      \(P(s)=P(\lambda) * P_{\lambda}(s)\)

      \(P_{\lambda}(s)=\sigma_{\lambda} e^{\left(-s \sigma_{\lambda}\right)}\)

      MIS 權重將使用平衡啟發式:\(W_{\lambda}(s)=P(\lambda) /\left(P\left(\lambda_{R}\right)+P\left(\lambda_{G}\right)+P\left(\lambda_{B}\right)\right)\)

      剩下的問題就是選取哪個 \(P(λ)\) ,也就是選擇R、G、B哪個通道的波長來做距離采樣:使用當前吞吐量(throughput)來指導選取某個 \(P(λ)\) 的概率,所謂吞吐量其實就是通道的貢獻度,貢獻度越高的通道更容易被選取

image-20211130180558091

RGB三種波長的消散系數往往是不同的(transimittance是不同的),例如皮膚介質中的紅光比其他波長傳播得更遠

方向性采樣

  • 假設各向同性時,無重要性
  • 假設各向異性時,根據 Phase 函式分布做重要性采樣(皮膚介質的 g 引數大約是0.8)

Dwivedi Sampling

  • 根據介質厚度“bias”一下采樣來增加 random walk 回傳到入射平面或者從另一個出射平面射出的機會,從而加速收斂
  • 需要先通過一個探測射線來估計物體厚度,而且需要將該物體假設為曲率為0的平板物體
image-20211202135113978

將這些采樣方法通過 MIS 組合起來使用,最后Pixar的論文實作中的 MIS 共使用了6個采樣方法(for RGB renders)

對藝術家調參友好

  • [2016] 近似公式映射單散射 albedo \(\alpha\) 、表面 diffuse color、多重散射 albedo \(A\) ,減少控制引數數量:

    \(\begin{aligned} \alpha &=1-e^{-5.09406 A+2.61188 A^{2}-4.31805 A^{3}} \\ s &=1.9-A+3.5 *(A-0.8)^{2} \\ \sigma_{t} &=1 /(d * s) \end{aligned}\)

\(d\) 是散射距離,

  • [2017] Numerical Albedo Inversion:支持 diffuse color 來反向計算出 單散射 albedo,對藝術家調參友好 ;主要通過多項式來擬合

先算出輸入單散射 albedo 到輸出 diffuse color 的映射表(40 albedo \(\alpha\) * 40 各向異性系數 \(g\) = 1600 組合的 diffuse color)

  • \(A、C、D、F\) 將使用含 \(g\) 的多項式擬合:\(A(g)=a_{0}+a_{1} g+a_{2} g^{2}+a_{3} g^{3}+a_{4} g^{4}+a_{5} g^{5}+a_{6} g^{6}+a_{7} g^{7}\)
  • \(B、E\) 將使用含 \(g\) 的指數多項式擬合:\(B(g)=a_{0}+a_{1} \exp \left(a_{2} g+a_{3} g^{2}+a_{4} g^{3}+a_{5} g^{4}+a_{6} g^{5}+a_{7} g^{6}+a_{8} g^{7}\right)\)

只要記好了各種 \(a_i\) 系數,之后渲染就可以通過輸入表面顏色 \(x\) 和各向異性系數 \(g\) 來得到單散射 albedo

\(\alpha(x, g)=\left(1-x^{0.25}\right) \cdot A(g) \tan ^{-1}(B(g) x)^{C(g)}+x^{0.25} \cdot D(g) \tan ^{-1}(E(g) x)^{F(g)}\)

  • [2017] Non-Exponential Free Flight:將傳統物理的 Transmittance 公式(即散射傳播距離與剩余光子率的關系)改成非指數的公式,引數更好控制,對藝術家友好

Manifold Next Event Estimation,MNEE [2015]

  • Manifold Next Event Estimation [2015]

核心思路:已知攝像機到散射介質內表面的折射路徑 \(x_a,x_1,x_b\),然后在面光源上采樣一個點 \(x_c\),連接 \(x_b、x_c\) 為種子路徑 \(Y\),然后根據采樣半程向量 \(h\) 的結果,來不斷迭代讓路徑 \(Y\) 折成可以滿足折射規律的可接受的路徑 \(X\)

image-20211205164205714

Subdivision Next-Event Estimation,SNEE [2016]

  • Subdivision Next-Event Estimation for Path-Traced Subsurface Scattering [2016]

傳統的游走路徑最終的 BTDF 可能很難打在光源上(圖左),而SNEE的主要想法是通過一條額外的子路徑來滿足折射規律的情況下還能直接打到光源上,

image-20211204210344351

采樣邊界頂點 \(x_k\),兩個采樣子路徑:

  • 一個從光源出發的自頂向下路徑(NEE)
  • 一個根據 Phase 函式分布的自底向上路徑(正常的 Phase 函式分布采樣)

image-20211204215421513

不同散射介質適用不同的nee技術:

  • 高密度介質,如皮膚, 僅需要在最后一個點做NEE
  • 對于低一些密度的介質,例如水或者液體,需要在內部每個游走點(單散射的)做NEE,并且使用 transparent shadows 來通過幾何
  • 對于散射介質含內部表面,如眼球,可以使用MNEE產生焦散,隨著在介質的透射距離而減弱

image-20211204221754230

工業界實作方案

UE4 方案 [Metahuman]

Skin Pipeline

  • 幾何處理 Pass:根據各種貼圖及某些混合計算方式來算出每個像素點的 BaseColor、Specular、Roughness、Normal 等屬性(G-Buffer)
  • Lighting Pass:根據光源到表面的 diffuse transmission 和表面的 BaseColor 等屬性計算出該像素點的 diffuse radiance
  • SSS Pass:使用 Separable SSS/Burley SSS/Both 實作基于螢屏空間的模糊
  • 其它 Pass:
    • 增加高光效果,即 Dual Specular
    • 改進的 SSAO
    • 其他后處理效果

皮膚毛孔

皮膚毛孔及其它皮膚表面細節導致了皮膚的各向異性,對于不同的地方應該有不同的specular、roughness等引數,一般是混合額外的細節貼圖,這樣就可以增加鏡頭很近時的皮膚細節

  • Specular:微觀高光度貼圖,與全域specular混合
  • Roughness:微觀粗糙度貼圖,與全域roughness混合,此外還通過Fresnel節點加強了角色視角邊緣的粗糙度
  • Normal:微觀法線貼圖,主法線與微觀法線按一定比例混合規范化

接近物理真實的渲染:\(cavity \cdot Specular(gloss) \cdot Fresnel(reflectance)\)

近似渲染: \(Specular(gloss) \cdot Fresnel(cavity \cdot reflectance)\)

cavity 是凹陷度,可從 cavity map(下圖)中采樣獲得;Specular(gloss) 表明高光項;Fresnel(reflectance) 是與視覺角度相關的反射

img

皮膚反射

  • 直接反射:采用 雙鏡葉高光(Dual Lobe Specular),即兩個 Cook-Torrance 的 BRDF Lobe 按一定比例混合:\(Lobe1?0.85 + Lobe2?0.15\)

  • 間接反射:Specular IBL

img

BSSRDF 渲染

Separable SSS:

  • 通過6個高斯和預計算profile,再用預積分的可分離核去近似擬合profile,運行時便是2個pass
  • 后處理:基于螢屏的模糊,且僅用兩個pass(橫向、縱向)去實作模糊,時間復雜度 O(n^2)=>O(2*n)

Burley Normalized SSS:

  • 基于 Burley Normalize Diffusion

Both:

  • 尚未看完原始碼,還不清楚怎么將這兩種技術結合的

改進的 SSAO

  • AO 貼圖混合了Bleed Color(皮膚通常取紅色),使得皮膚渲染更加貼切,皮膚暗處的亮度和顏色更真實美觀
202111261654242

Unity 方案 [Siggraph 2018]

薄物體透射

圖片1

  • Thickness Map:專門用于記錄物體厚度的紋理
  • Shadow Thickness:兩層shadow 分別記錄最遠、最近深度來表示物體厚度
  • 結合兩種方案,使用 \(max(textureThickness,shadowThickness)\)

Nvidia 方案 [Siggraph 2021]

Realistic Digital Human Rendering with Omniverse RTX Renderer,基于 Participating Media 渲染模型,

image-20211129113728027

Nvidia 的實作中,主要基于以下幾點:

  • 通過散射系數來決定距離采樣
  • 沒有使用 NEE
  • Single-sample spectral MIS
  • Phase 函式使用各向異性 HG 函式(mean cosine is currently non-spectral)
  • 輸入、射出介質表面時,使用 Lambertian BTDF
  • 對藝術家調參友好,支持 diffuse color 來反向計算出 單散射 albedo

實際效果:

image-20211201162455216

參考文獻

  • [1] 《GPU Gems 3》:真實感皮膚渲染技術總結 | 知乎
  • [2] 基于物理著色(四)- 次表面散射 | 知乎
  • [3] 剖析Unreal Engine超真實人類的渲染技術Part 1 - 概述和皮膚渲染 | cnblog
  • [4] 【02】實時高逼真皮膚渲染02 次表面散射技術發展歷史及技術詳細解釋 2 | 知乎
  • [5] Approximate Reflectance Profiles for Efficient Subsurface Scattering
  • [6] Separable-Subsurface-Scattering
  • [7] Rendering AAA-Quality Characters of Project A1
  • [8] Manifold Next Event Estimation
  • [9] Subdivision Next-Event Estimation for Path-Traced Subsurface Scattering
  • [10] Practical and Controllable Subsurface Scattering for Production Path Tracing [2016] [Disney]
  • [11] Path Traced Subsurface Scattering using Anisotropic Phase Functions and Non-Exponential Free Flights [2017] [Pixar Animation Studios]
  • [12] Realistic Digital Human Rendering with Omniverse RTX Renderer | Nvidia | Siggraph 2021
  • [13] Efficient screen space subsurface scattering | Unity | Siggraph 2018

施工中

作者:KillerAery 出處:http://www.cnblogs.com/KillerAery/

本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390306.html

標籤:其他

上一篇:1588PTP網路時鐘服務器(時間同步)技術應用方案

下一篇:剛入行想自學軟體測驗,需要達到什么水平才能找到8k的作業?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more