>[!Warning] 施工中。 此筆記處於尚未完成的階段。
>[!Warning] 新手上路。 我第一次寫這種教學文,寫太爛或有錯誤請回饋給我。
>[!Warning] 作者懶癌發作。 如果看到這個條目很久沒更新,請催更。
# 更新進度
上次更新8/29
# 如何閱讀這個筆記
可以的話先看Games202的Lecture10,11來對接下來的內容進行快速overview,正文可以搭配Real Time Rendering edition 4 Chapter 9來看,因為大多數的東西都是從這本數上~~抄~~(參考)的。不想搭配也沒差,我會把該書的精華擷取下來,順便補充了書中沒有很明確介紹的概念。可以的話再開始讀正文前把所有公式和專有名詞都搞懂。
實踐的部分我打算以blender和unity分別進行展示,希望我7月底前能把正文打完。
# 必須具備的知識
>[!Warning]非常重要! **為了理解PBR(基於物理的著色),您需要具備以下基本知識,本文不與介紹。**
>- 高中水平的數學和物理學基礎。
>- 基礎的輻照度量學、色度學和幾何光學。
>- 基礎的微積分。
>- 了解連續隨機變數和機率密度函數的意義。
如果需要惡補知識的話可以參考我其他的筆記或是額外連接中那些優秀的知乎答主或自己去找學習內容。對於那些對美術上基於物理的渲染(PBR)流程感興趣的人來說,雖然可以選擇跳過理論學習,但是掌握這些理論知識將使您對材質的特性和參數調整有更深層次的理解,並且大多數的遊戲引擎都是以shader的方式進行實踐,並不像3D軟體一樣是以Artist friendly的角度出發讓使用者拉節點和拖一拖參數就能實現想要的效果了。
# 需要的額外知識
對於任意有節點材質編輯功能的DCC軟體或是有內置材質節點編輯器的遊戲引擎有一定的基礎(能會寫shader那最好),以便理解接下來的實作。
## 幾個常見的3D軟件
:::spoiler 列表
- Cinema 4D的Node Material系統
- Blender的Material Node
- 3DMax的Material Editor
:::
## 幾個常見的3D引擎
:::spoiler 列表
- 虛幻引擎的Material Editor
- CryEngine的Material Editor
- Unity中的ASE plugin
:::
本文打算使用Unity的ShaderLab(一種Unity自己魔改HLSL而誕生的著色語言)進行在遊戲引擎內的PBR渲染展示,想稍微了解的ShaderLab請參考馮樂樂(圖形學女神+前MiHoYo員工)所撰寫的Unity Shader入門精要和Unity的Documentation,想了解著色語言的請左轉Learn OpenGL。樓下有傳送門。
- [馮樂樂 知乎](https://www.zhihu.com/people/lele-feng-15)
- [Unity Shader入門精要](https://singlelogin.re/book/10988021/f620b3/unity-shader%E5%85%A5%E9%97%A8%E7%B2%BE%E8%A6%81.html)
- [Unity ShaderLab](https://docs.unity3d.com/Manual/SL-Reference.html)
- [Learn openGL](https://learnopengl-cn.github.io/)
>[!Note]註
>大多現在的主流的遊戲引擎和DCC(數字創作軟件)都支援材質節點的功能,選一個熟悉的即可,以上我只列舉幾個我看過的。
# 公式和專有名詞
## 反射方程式
- 反射方程式:
- $L_o(x,ω_o)=\int_{Ω}L_i(x,ω_i)\cdot f(ω_o,ω_i)\cdot cos(θ_i)dω$
>[!Note]註
>$L$ 指的是$radiance$,下標的$i,o$為入射和出射,$x$為空間中的點的座標$,\int_Ωdω$表示$hemispheric$(半球面)上所有立體角的積分。
- 反射方程式之基於面光源採樣
- $\int^{}_{A}L_i(q\rightarrow p)\cdot f_r(p,q\rightarrow p,\omega_o)\cdot\dfrac {\cos(\theta_p)\cdot cos(θ_q)} {\rvert\rvert p-q\lvert\lvert^2}dA$
>[!Note]註
>將上面的公式基於立體角採樣用積分換元換成基於面光源,也就是把$dω=\dfrac {dA\cdot cos(θ_q)} {\rvert\rvert p-q\lvert\lvert^2}$ p是採樣點x的平面,q是面光源平面上的點。
- 反射方程式之二重積分形式:
- $L_o(\theta_o,\phi_o)=\int_{\phi_i=0}^{2π}\int_{θ_i=0}^{π/2}f(θ_i,\phi_i,θ_o,\phi_o)\cdot L(θ_i,\phi_i)\cdot cos(θ_i)\cdot sin(θ_i)dθ_id\phi_i$
>[!Note]註
>此公式為了方便表示省略的點的座標,三維空間中向量可以用由仰角$θ$和方位角$φ$來代替,對立體角的積分可以由立體角的定義$dω=\dfrac{dA}{r^2}$推導出$dω=sin(θ_i)dθ_idφ_i$。
- 反射方程式之二重積分餘弦形式
- $L_o(\mu_o,\phi_o)=\int^{2\pi}_{\phi_i=0}\int^{1}_{\mu_i=0}f(\mu_i,\phi_i,\mu_o,\phi_o)\cdot L(\mu_i,\phi_i)\cdot \mu_id\mu_id\phi_i$
>[!Note]註
>把反射方程式之二重積分形式中的$cos$項換成$µ$(簡單的積分換元),就可以得到以上公式
>[!Note]以下為維基百科的示意圖

>
[Wiki超連結](https://zh.wikipedia.org/zh-tw/%E6%B8%B2%E6%9F%93%E6%96%B9%E7%A8%8B)
>[!Note]註
之所以展示這麼多種表示法是因為在推導複雜的公式時,選擇合適的表示法確實可以簡化計算過程。以上是我在閱讀相關論文看到幾個常見的表示法。
## BXDF
接下來會提到一系列以BXDF縮寫形式出現的方程式,可以簡單的將方程式理解為一種在某種光傳播行為之下的分布函數。BXDF中的DF是Distribution Function(分布函數)的縮寫,而B則是Bidirectional(雙向的)。而X就是光的某種傳播行為。
>[!Note]
>分布函數可以理解各個方向入射光對反射光的貢獻比,可以圖像化的理解為一個以半球分布的lobe。下圖幾個BRDF的例子。
>
- BXDF例子:
- BRDF的R指的是Reflectance反射,所以可以把BRDF理解為光在反射的這個行為下的分布方程式,接下來的例子都可以此類推。
- BSSRDF的SSR指的是Scattering Surface Reflectance(散射表的反射)。
- BSDF的S是Scattering(散射)。
- BTDF的T是Transmittance(透射)。
>[!Note]註
>在電影大英雄天團中,Disney使用了一種特化的BRDF來處理BTDF,(BRDF)來處理雙向透射分佈函數(BTDF),以此來渲染杯麵(Baymax)的超薄表面,此技術在還廣泛的應用在紙張,布料衣服等。
- BCSDF的CS是 Curve Scattering(不知道怎麼翻譯)
>[!Note]註
此模型是用來專門渲染頭髮的模型。
## 全光函數
全光函數是一個用來描述光的函數,上述的BXDF系列是全光函數,只不過在函數的維度有所下降(做了一些假設,例如如果BXDR是Anisotropic,那函數維度就會上升2,因為多了描述入射和反射的張角和仰角),下圖是整個全光函數層層化簡的過程。每個箭頭可以理解為剛剛提到的假設,而假設是用來降低全光函數的維度。

## BRDF
- 定義:$f_r(l,v)=\dfrac{dL_r(ω_r)} {dE_i(ω_i)}$
- 微表面模型$BRDF$:$f(l,v)=\dfrac {F(l,h)\cdot G(l,v)\cdot D(h)}{4\cdot cos(θ_i)\cdot cos(θ_o)}=\dfrac {F(l,h)\cdot G(l,v)\cdot D(h)}{4\cdot \lvert n\cdot l\rvert\cdot \lvert n\cdot v \rvert}$
- 符號 $l$為入射方向的向量,$v$為觀察方向的向量,其和渲等染方程中的 ω<sub>o</sub>,ω<sub>i</sub>一樣
>[!Note]
>分母的各個為F為菲涅爾項,G為幾何自遮擋,D為微表面法線分布。
[Wiki超連結](https://en.wikipedia.org/wiki/Bidirectional_reflectance_distribution_function)
## BSSRDF
>[!Warning]
>由於此概念涉及到各種複合知識(etc 偶極子,電磁學,複雜材質之數學建模),本人對於這個東西的理解有限,內容僅會注重在結論且可能存在部分錯誤,請斟酌參考。
>
- 定義:$S_d(p_i,ω_i,p_o,p_o)=\dfrac {dL_o(p_o,ω_o)}{dΦ_i(p_i,ω_i)}$
- 可分離$BSSRDF$:$S_d(p_i,ω_i,p_o,p_o)\approx(1-F_r(cos(θ_o)))\cdot S_p(p_o,p_i)\cdot S_ω(ω_i)$
- 
## 定向半球反射率
- $R(l)=\int_{v \in Ω}^{}f(l,v)\cdot (n\cdot v)dv$
>[!Note]註
>$f為BRDF,l和v與前面所定義的相同$
## 半球定向反射率
- $R(v)=\int_{v \in Ω}^{}f(l,v)\cdot (n\cdot l)dl$
>[!Note]註
>$f為BRDF,l和v與前面所定義的相同$
## 各項同性/異性
- 在計算機圖形學領域,各向同性表面不會隨着其幾何法線旋轉而改變外觀,反之則會。
[百度超連結](https://baike.baidu.hk/item/%E5%90%84%E5%90%91%E7%95%B0%E6%80%A7%E4%BB%8B%E8%B3%AA/2638643)
## Helmholtz互異性
用於描述BRDF的性質,入射方向與反射方向交換後函數仍然相等,即:$f(l,v)=f(v,l)$
可以理解為由於光具有可逆性,引此交換仍然等價,同時可以使用這個性質來檢驗BRDF模型是否為物理正確的。
## 精確光源
精確光源就是如下圖所示的一個球面面元(面光源),其光錐張角ε無限小,且光錐內方向為l的光線的亮度為$L_t(l)$
>[!Note]以下為超連接中的示意圖

[我是超連結](https://www.cnblogs.com/wantnon/p/6954242.html)
## 相位速度
可以理解為觀測一波之波峰與波谷在空間中移動的速度,光速的相位速度為c,即光速。
## 輻照度量學
$\Phi$表示為輻射功率(Radiant Power)或是輻射通量(Radiant flux)。單位為瓦特(J/s)
$E$表示為輻射通量密度(Radiant flux density)
射通量密度又包含兩個概念,輻照度(Irradiance)和輻射出射度(稱作輻射度Radiant Exitance)
- $I$表示輻照度(Irradiance),表示輻射接收單元每單位面積的接收的輻射通量(輻射功率)。
單位為$\frac {d\Phi}{dA}$
- $M$表示為輻射出射度(Exitant Radiant)或被稱為輻射度,被稱為輻射度時計為$B$(Radiosity),其表示為輻射源單位的每單位面積的輻射通量(輻射功率)。
$L$表示為輻射亮度(Radiance),其表示為每單位面積單位立體角的單位功率的平方。
單位為$\frac {d^2\Phi}{dA\omega cos(\theta)}$
>[!Note]註
>其實在各個文章中對於以上輻射單位量的表示法還是有歧異的,閱讀時建議對著英文或是音譯去看,以上符號所表示的單位僅供參考:P。
##
以上的一坨東西正文都會不多做介紹,先列出來只是為了方便各位回顧和查閱。
# 正文
## 成像原理和光
PBR的工作原理就是盡可能的讓著色模型符合光在真實世界的行為,在開始介紹光之前,先了解一下人眼是如何看到影像和相機是如何成像。在計算機領域中,我們最終要求的是著色表面最後到虛擬相機位置所傳入的radiance,以此來模擬現實世界的成像系統。
### 成像原理
在現實世界的成像系統,同長都會有一個許多由離散傳感器所組成的傳感器表面,像是相機的cmos感光元件矩陣,人眼的椎狀和桿狀細胞。此外,成像系統還會有一個小孔(光圈)和透鏡來對入射的光線進行限制。
- 為什麼不把感光元件直接放在空間中?
這是因為光的傳播是全方位的。如果感光元件直接暴露於空間中,將會導致影像變得模糊不清。因此,透鏡和光圈的使用至關重要,它們的作用是賦予感測器特定的方向性,這意味著感測器只會捕捉來自特定區域和方向的光線。這個過程實際上是在測量來自各個方向的平均光流,也就是平均radiance。
- 景深和光圈
### 光的本質
光是波,還是粒子?在量子力學中,光具有波動與粒子的二項性,這種二元性賦予了光以超越傳統物理學的複雜行為。量子光學模型利用這一特性,能夠精確地描述光在亞原子層面的行為,然而,由於其模型的複雜性和微觀尺度的細節,它在日常應用中並不常見。
>[!Note]科普
>在量子光學的發展過程中,出現了兩大學派的理論爭鋒:一方是以薛丁格為代表的哥本哈根詮釋,主張波動學派的觀點;另一方則是以普朗克和玻爾為首的粒子學派。這兩派學者對於光的本質進行了長時間的辯論。最終,德布羅伊提出的波粒二元性理論為這場爭論畫上了句點,確立了所有物質既有波動性也有粒子性的觀點,這也是我們在高中物理課本中所學習到的物質波概念。
關於薛丁格的貓,這個思想實驗最初是由粒子學派提出,用以諷刺薛丁格的波動學派觀點,試圖指出一隻貓不可能同時處於生與死的疊加狀態。這個著名的悖論反映了量子力學中的一些非直觀特性,並引發了對量子狀態和觀測問題的深入探討。
在更為實用的層面上,我們可以將波動學派的理論簡化為波模型,這一模型由麥克斯韋方程式所描述。相比於使用薛丁格方程式的波動學派,波模型避免了大量抽象概念的使用,如哈密頓算子和波函數,使得衍射、干涉和偏振等光學效應的解釋變得更為直觀和易於理解。
在物理光學中(也就是波模型),光被描述為一種電磁波,其電場與磁場會在空間中與光傳播方向垂直面上來回震盪,
但是,在計算機領域中,以上的東西對於電腦來說太複雜了,引此大多時候會使用幾何光學作為光模型。
以下為幾何光學中的幾個重要假設
(1)光線是以直線傳播的,即不考慮光線繞射時發生的"彎曲"效應。
(2)光線瞬間穿過介質。這種假設基本上要求光以無限的速度不切實際地行進。當
然,這是一個實用的假設,因為它需要全域照明演算法來計算場景中光能的穩態分佈。
(3)光線不受外在因素的影響,如重力場或磁場。
## 介質與幾何
## 微表面模型
## BRDF
### 菲涅爾項
### 微表面法線分布
### 幾何自遮擋
## Disney BRDF
相較於剛剛經典的BRDF,Disney BRDF拆成了五個分別為Diffuse(漫反射),Metal(高光),Clearcoat(漆面)
### 漫反射
漫反射可以用以下數學公式表示,subsurface是控制次表面散射的參數
$f_{diffuse} = (1 − subsurface) · f_{baseDiffuse} + subsurface · f_{subsurface}$
### 基礎漫反射
在掠射反射情況下(當半向量大致與法線垂直時),光滑材料(即更具鏡面反射特性的材料)的反射率往往會下降,而粗糙材料則在掠射角度下會出現反射率的峰值。
直白來說就是補足Schlick Fresnel approximation的不足之處,在使用前面的近似公式時,材質的反射率其實會隨視角而變。
相較於最一開始的BRDF的diffuse term,Disney BRDF中的diffuse term根據以上的觀察而得到以下公式。
$f_{baseDiffuse}=\frac {baseColor} {\pi}\cdot F_D(\omega_{in})F_D(\omega_{out})|n\cdot\omega_{out}|$
其中函數$F_D(\omega)$的定義如下
$F_D(\omega)=(1+(F_{D90}-1)(1-|n\cdot\omega|))$
$F_{D90}=\frac {1} {2}+2\cdot {roughtness}\cdot|n\cdot\omega_{out}|^2$
以上就是$f_{baseDiffuse}$的完整公式
### 次表面散射
disney在這個部分使用到介質路徑追蹤,所以我這邊小改一下用Lommel-Seeliger law推出的快速次表面散射公式。
$f_{subsurface}=\frac{1.25\cdot baseColor} {\pi}(F_{ss}({\omega_{in}})\cdot F_{ss}({\omega_{in}})\cdot (\frac {1} {|n\cdot \omega_{in}|+|n\cdot \omega_{out}|}-0.5)+0.5)\cdot |n\cdot \omega_{out}|)$
其中$F_{SS}(\omega)=(1+(F_{SS90}-1)\cdot(1-|n\cdot \omega|)^5)$
$F_{SS90}=roughtness \cdot |h\cdot \omega_{out}|^2$
以上就是$f_{subsurface}$的完整公式
### 高光項
以下是Disney BRDF中的高光項的細節
高光項可以用以下數學公式表示$f_{metal}=\frac {F_mD_mG_m} {4|n\cdot \omega_in|}$
### 菲涅爾項
和前面的一樣,使用的都是五次方的近似模型。
$F_{schlick}=F_0+(1-F_0)(1-cos(\theta))^5$
下面是更進階的,加上$F_{90}$來讓artist更好的控制電介質的顏色變化
$F_{schlick}=F_0+(F_{90}-F_0)(1-cos(\theta))^5$
以上就是$F_m$項的完整公式
### 微表面法線分布
Trowbridge-Reitz自原本的GGX提出更廣義的法線分布函數,但我們這邊使用一個和GGX折中的版本,公式如下
>[!note]
>Trowbridge-Reitz推倒的公式多出了一個參數 $\gamma$,這個是用來控制分布函數尾部的形狀,而把以下的分母二次方改成$\gamma$次方和多傳入一個參數給$anisotropic$的$k$函數就是完整的公式了
$D_{ggx}(h,\alpha_g)=k(\alpha_g)\frac {\alpha_g^2} {\pi\cdot (1+(n\cdot h)^2\cdot (\alpha_g^2-1))^2}$
以下是anisotropic的形式,忘記什麼是anisotropic請回顧前面的公式與專有名詞。
$D_{ggx}(h,\omega)=\frac {1} {\pi\cdot \alpha_x \cdot \alpha_y((\frac{h \cdot \omega_{x}}{\alpha_x})^2+(\frac{h \cdot \omega_{y}}{\alpha_y})^2+(n\cdot h)^2)^2}$
- 變數定義:
$k$為歸一化函數,其定義如下
$k(\alpha)=
\begin{cases}
\frac {1} {\pi},& \text{if } a\geq 1\\
\frac {\alpha^2-1}{ln(\alpha^2)},& \text{otherwise}
\end{cases}$
$\alpha_g$是粗糙度的平方,$h$是半程向量
$anisotropic$公式中的$\alpha_x$和$\alpha_y$由參數${anisotropic
}$控制,其關係為以下。
$asspect=\sqrt {1-0.9\cdot anisotropic}$, $\alpha_{min}=0.0001$
$\alpha_x=max(\alpha_{min},roughtness^2 /asspect)$
$\alpha_y=max(\alpha_{min},roughtness^2 \cdot asspect)$
>[!note]
>anisotropic中的$\omega$的各個xyz分量表示在切線座標中的t(切線),b(副切線),n(法線)
### 幾何自遮擋
$G_m = G(ω_{in})\cdot G(ω_{out})$
以下為函數G的定義
$G(\omega)=\frac {1}{1+\Lambda(\omega)}$
當$isotropic$時
$\Lambda(\omega)=\frac {\sqrt{1+\frac{1}{\alpha}}}{2}$
當$anisotropic$時
$\Lambda(\omega)=\frac {\sqrt{1+\frac{(\omega_l \cdot x\cdot \alpha_x)^2+(\omega_l \cdot y\cdot \alpha_y*/ )^2}{\omega_l\cdot z^2}}-1}{2}$
$x,y,z$是模型空間的座標(吧?)
### 漆面項
以下是Disney BRDF中的漆面項的細節
漆面項可以用以下數學公式表示$f_{clearcoat}=\frac {F_cD_cG_c} {4|n\cdot \omega_in|}$
### 微表面法線分布
### 幾何自遮擋
$G_m = G(ω_{in})\cdot G(ω_{out})$
## 加上Kulla Conty能量補償得BRDF
相較於前面粗暴的加上diffuse term,Kulla Conty在2017的imagework上提出能量補償的概念。
>[!Warning] 前方高能
>以下的內容可能有錯,請斟酌參考。因為網路上沒有詳細介紹的文章加上我能力有限所以也沒有看得很懂 :P
## Disney BSDF
## 次表面散射
Real Time Rendering一書中第九章介紹的物表面散射解決方案都是基於BRDF的,我個人理解為該書提出的方案是過時且效果不佳的,因此下文只簡單介紹基於BRDF解決次表面散射的方案,下圖的結果也可以佐證BRDF不是一個準確的模型。
>[!Note]註解
>下圖由左至右分別為利用BRDF,BSSRDF,蒙特卡羅算法(光線追蹤)來解決次表面散射的結果

就目前而言,大多三維軟體都是採用BSSRDF(或BSDF)作為解決次表面散射的解決方案。Blender中的Subsurface Scatering就是使用BSSDF的,而Unity對於次表面散射的解決方案也是基於BSSRDF的,將BSSRDF項中的Diffusion項以Normalized Diffusion來進行在實時渲染中的快速計算(此方法能有解析解,且與無偏計算中的結果非常近似)。次表面散射還有更快更單的算法,只不過效果上會大打折扣,下文將依序介紹何謂次表面散射和推導BSSRDF。
>[!Note]註 以下為Blender中的次表面散射材質節點

>[!Note]註
>下面兩張圖是上面材質節點所呈現出來的效果,可以看到低一張圖是攝像機在物體被光面時,可以看到物體邊緣有光為為滲出,呈現出通透感。第二張圖為受光面側面,可以看到材質中較厚的部分的混濁感。
>- 背光面
>
>- 受光面側面

次表面散射指的光會穿透物體的表面,在物體內部不同角度被反射若干次,最終穿出物體。這種效果常出現在像是大理石、皮膚、樹葉、蠟、牛奶,玉等多種不同材料。而如前文所提到,BRDF雖然也可以作為次表面散射的解決方案,但是由於模型本身的限制,所以沒辦法很好的表現,但還是簡單得介紹一下如何用BRDF來解決次表散射。
在進行次表面散射時,如果散射半徑小於微表面的起伏變化,則可以理解為次表面散射的光會最終從同個採樣範圍中射出,相當於在原先的鏡面反射分布上加上一個diffuse的分布,因此直接套用Lambertian模型是一個合理的假設。以Lambertian模型對BRDF進行建模,也就是公式$f_d(l,v)=\dfrac {ρ_s}{π}$作為次表面的BRDF。在最後進行渲染時只要再原先的反射面的BRDF項加上這個額外的BRDF項就可以模擬次表面散射了。
[維基百科-次表面散射](https://zh.wikipedia.org/zh-tw/%E6%AC%A1%E8%A1%A8%E9%9D%A2%E6%95%A3%E5%B0%84)
## 參與介質的渲染
體積散射可以分解為以下幾個過程
- Absorption(吸收)
- Emission(發散)
- Scattering(散射)
- In-Scattering
- Out-Scattering
### 吸收
當光線在空間中傳播時會被部分介質遮擋,煙霧會投射陰影就是因為光在煙霧中傳播時被空間吸收。
當光線在空間中傳播時,空間中參與傳遞的介質會吸收光源的輻射量。關於空間是如何吸收光源,可以以$\sigma_a$描述光線在空間中傳播中是如何被吸收(及光的衰減)。
>[!Note]
>傳播的過程以及接下來推導中的變數定義可以由下圖來理解。
>
- $\sigma_a$被定義為在介質中傳遞一個單位的能量衰減比值(因次為$m^{-1}$),其數值可以是任意正數。
在定義玩吸收係數$\sigma_a$,開始定義吸收的過程。
- 推導
給定空間中一點$p$,一傳遞方向$\omega$,傳入點$p$的$radiance$定義為$L_i(p,\omega)$,從$p$進入後經過微分圓柱體後輸出的$radiance$定義為$L_o(p,\omega)$。
- 傳遞的過程的能量的變化即為以下等式。
$L_o(p,\omega)-L_i(p,-\omega)=dL_o(p,\omega)$
- 又根據$\sigma_a$的定義$\sigma_a\cdot dt$可以理解為衰減量,故以下等式成立。
$dL_o(p,\omega)=-\sigma_a(p,\omega)\cdot L_i(p,-\omega)\cdot dt$
>[!Note]
>
>$\sigma_a$可以被定義為一個和入射方向和位置有關的函數。
>$dt$表示為光在微分空間中傳遞的距離。
### 發散
## BSSRDF
# 實踐
目前打算帶讀unity的UnityStandardBRDF.cginc內置的PBR解決方案。等我把自訂義管線修完再來自己寫PBRshader。
# 參考資料
Real Time Rendering Edition 4th-Chapter 9
Physically Based Rendering: From Theory To Implementation-Chapter 11
全局光照技术:从离线到实时渲染-Chapter 1
# 有用的網站
Different Material's IOR Table https://pixelandpoly.com/ior.html
https://www.realtimerendering.com/refs.html
# 進階閱讀
如果看到這邊還覺得意猶未盡,以下有幾本書籍可以做額外的學習,推薦皆來自RTR4所引用的論文和章節末端的推薦書籍。
# PBR後記
目前有打算研究一下PBNPR和全局光照,對這幾個主題有興趣或是想交流的可以留個言 :)。之後會再開新的筆記慢慢介紹許多和render的東西,但這是以後的事了。