目錄
- 現實皮膚模型
- 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]
- UE4 方案 [Metahuman]
- 參考文獻
最近在做一個數字人渲染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 進行積分
圖左是 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 快速查詢結果,從而達成實時渲染的性能需求,

常見有計算 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)}}\)
漫反射近似:假設兩次及以上的散射事件導致了光分布的均勻,因此這部分散射視為漫反射,使用偶極子來表示入射光源分布,上面為正的真實光源,下面為負的虛擬光源,
仍然采用蒙特卡洛方法,取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]

總體流程:
-
渲染任何陰影貼圖
-
渲染拉伸校正貼圖(可以是預先計算的)
-
渲染輻照度紋理
-
紋理模糊:
- 卷積核的權重:由高斯和擬合的 Diffusion Profile 確定
- 卷積核的半徑:由拉伸矯正貼圖提供半徑拉伸系數
- 對每個高斯核進行可分離的模糊 Pass,并保存對應高斯卷積紋理
-
在 3D 中渲染網格:
- 訪問每個高斯卷積紋理并線性組合
- 為每個光源添加鏡面反射
螢屏空間模糊(Screen Space Blur) [2009]
核心思路:
- 只需要對螢屏中 Stencil 標記過的 Skin像素進行若干卷積操作,極大地降低了 Blur 的像素數目
- 卷積核的大小:根據當前像素的深度 z(x,y) 及其深度兩個方向的導數來確定
Pre-Integrated Skin(預積分的皮膚著色)[2010]
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個2D高斯雖然可分離,6個2D高斯和卻是不可分離的,除非使用6*2個1D卷積 Pass ,或者老老實實 2D 卷積,但都比較耗性能
- 基于SVD分解的可分一維卷積核:有局限
- 藝術家易用的卷積核:分解為近距離散射和遠距離散射兩個部分,兩個高斯函式先相加后相乘,相當于四個高斯函式單獨作用再相加
\(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)\)
- 增加引導函式的可分一維卷積核:給每個位置增加了一個重要性系數,用戶可自定義,但沒有直接的物理意義

- 預積分可分離核(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)\)
具體實作 :
- 需提前有一份較精確的 diffusion profile(如6個高斯和擬合成的 \(R_d\) 函式),然后對 \(R_d\) 進行預先卷積(對距離的積分)得到 \(a_p(offset)\) 函式,換句話說就是一張一維表(輸入一個 \(offset\) 值,輸出一個 \(a_p\) 值)
- 在具體實作中,則使用 N 個 sample 來取代這張一維表,規定好每個sample 的 offset 值 和計算出對應的 \(a_p\) 輸出值
- 將這個 sample list 傳給 shader,讓 shader 根據這些配置好的 sample 進行兩次 1D 卷積 Pass
注:即使E實際不可分,作者認為預計分可分離核的使用效果仍然足以接受,因此目前仍廣泛適用于各類實時BSSRDF皮膚渲染上
額外處理作業:
-
抖動 Jittering:paper 使用的一個可分核的擴散近似,在入射輻射度發生高頻變化的地方會產生人工痕跡,這是因為信號的空間占用(尺寸)比核的寬度更小,從而產生不對稱的星形圖案,因為本文使用的近似核不是完全經向對稱的
- 對1D過濾器作用一個隨機旋轉(逐個像素)
- 這種方式不需要對進行重新預積分,因為核的寬度并沒有變化
- 為了減少計算負荷,作者只對靠近像素的采樣進行處理(10%),增加區域可以取得更好的效果,看下圖區別:
- 核的寬度:卷積核的尺寸受一個于深度相關的拉伸因子
\(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 渲染模型

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}\)

\(\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 渲染模型做的

Phase 函式
phase 函式表示了每對傳入傳出方向的能量分配概率,
各向同性 Phase
相當多的次表面散射的擴散模型假設各向同性,不捕獲各向異性散射,這樣簡化的各向同性 phase 函式:
\(p=\frac{1}{4\pi}\)
各向異性 Phase

常用的各向 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

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(λ)\) 的概率,所謂吞吐量其實就是通道的貢獻度,貢獻度越高的通道更容易被選取
-
RGB三種波長的消散系數往往是不同的(transimittance是不同的),例如皮膚介質中的紅光比其他波長傳播得更遠
方向性采樣
- 假設各向同性時,無重要性
- 假設各向異性時,根據 Phase 函式分布做重要性采樣(皮膚介質的 g 引數大約是0.8)
Dwivedi Sampling
- 根據介質厚度“bias”一下采樣來增加 random walk 回傳到入射平面或者從另一個出射平面射出的機會,從而加速收斂
- 需要先通過一個探測射線來估計物體厚度,而且需要將該物體假設為曲率為0的平板物體
將這些采樣方法通過 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\)

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

采樣邊界頂點 \(x_k\),兩個采樣子路徑:
- 一個從光源出發的自頂向下路徑(NEE)
- 一個根據 Phase 函式分布的自底向上路徑(正常的 Phase 函式分布采樣)

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

工業界實作方案
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) 是與視覺角度相關的反射
![]()
皮膚反射
-
直接反射:采用 雙鏡葉高光(Dual Lobe Specular),即兩個 Cook-Torrance 的 BRDF Lobe 按一定比例混合:\(Lobe1?0.85 + Lobe2?0.15\)
-
間接反射:Specular IBL
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(皮膚通常取紅色),使得皮膚渲染更加貼切,皮膚暗處的亮度和顏色更真實美觀
Unity 方案 [Siggraph 2018]
薄物體透射

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

Nvidia 方案 [Siggraph 2021]
Realistic Digital Human Rendering with Omniverse RTX Renderer,基于 Participating Media 渲染模型,
Nvidia 的實作中,主要基于以下幾點:
- 通過散射系數來決定距離采樣
- 沒有使用 NEE
- Single-sample spectral MIS
- Phase 函式使用各向異性 HG 函式(mean cosine is currently non-spectral)
- 輸入、射出介質表面時,使用 Lambertian BTDF
- 對藝術家調參友好,支持 diffuse color 來反向計算出 單散射 albedo
實際效果:
參考文獻
- [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
標籤:其他
