games101-3 BRDF101

dyccyber發表於2024-04-25

BRDF101

概述

本文基於知乎Maple對brdf的文章,在此基礎又收集了一些其它來源的關於brdf的文章,希望能夠完全理解記憶相關知識
關於Jakub Boksansky的文章,看的過程中又去搜集了很多其它文章來理解,發現已經超出了我目前的知識厚度,因此只會簡單的翻譯一下我能理解的部分,感興趣的可以自行看原文。
侵刪~~~

Maple

文章地址:https://zhuanlan.zhihu.com/p/21376124
文章討論了BRDF(Bidirectional Reflectance Distribution Function)雙向分佈反射函式
介紹了輻射度量學、BRDF定義、如何使用BRDF計算

ScratchPixel

scratchpixel關於brdf的教學內容偏少 基本上被maple的文章內容所覆蓋 但是仍然可以起到補充的作用
地址:https://www.scratchapixel.com/lessons/3d-basic-rendering/brdf-linear-exposure/intro-brdf.html

Flux(輻射通量)、Irradiance(輻照度)與Radiance(輻射率)

img

結合上圖理解
輻照度可以看作量化給定點的入射光子數,而輻射率是量化給定點從特定方向的入射光子數,輻射率可以代表從給定方向觀察看到的點的顏色
其中給定點指的是很小的面積 \(dA\) 在這個極小的面積上輻射通量可以看做是不變的
而特定方向可以用一個非常小的圓柱體來表示 由於透視關係顯示為小圓錐體
並且上圖中的\(\theta\) 代表著透過該點的光子數佔總光子數的比例 當圓柱體垂直時 全部光子透過該點 當圓柱體平行該點時 透過該點的光子數為0
根據輻照度與輻射率的單位或者具體的定義
我們可以得出 一個點的總輻照度 可以透過聚合打到該點半球上所有方向的入射光線輻射率:

img

而當我們只考慮一個方向時 就得到了輻照度的微分表示:

img

而BRDF定義了入射光輻照度 和 反射光輻射率的比值:

img

我們經過積分 就可以得到從特定方向觀察到的某個點的顏色 即特定方向該點的輻射率:

img

Jakub Boksansky

Jakub Boksansky是一位來自英偉達的圖形程式設計師,他的部落格裡實現了brdf 並且也是 Ray Tracing Gems II Chapter 14 的配套程式碼
地址:https://boksajak.github.io/blog/BRDF

BRDF的性質

獨立性

BRDF 描述了給定的入射光和出射光方向組合的表面反射率。換句話說,它決定了當一定量的光從另一個方向入射時,有多少光在給定方向上反射,具體取決於表面的特性。這個公式非常靈活,因為它使我們能夠將表面材料的響應封裝到 BRDF 實現及其引數設定中,這獨立於光傳輸的底層演算法。請注意,BRDF 不區分直接和間接入射光,這意味著它可用於計算場景中放置的虛擬光(區域性照明)和從其他表面反射一次或多次的間接光(全域性照明)的貢獻。這也意味著BRDF獨立於燈光的實現,可以單獨開發和編寫(BRDF只需要知道入射光的方向及其在陰影點的強度)。

渲染演算法和光照的獨立性意味著我們可以將這種抽象的 BRDF 實現為“材質外掛”,透過簡單的 API 訪問,而且不同渲染器產生的視覺結果將是相同的。

物理上真實

為了使BRDF實現的效果更加逼真,一般要求提出的BRDF模型要滿足以下兩個條件:
Helmholtz reciprocity------入射和出射方向可以交換(因此稱為雙向),並且所得反射率將相同。請注意,某些演算法會跟蹤來自相機的光線(路徑跟蹤),其他演算法會跟蹤來自光源的光線(光子對映)或兩者都追蹤(雙向路徑跟蹤)。Helmholtz reciprocity確保所有型別的演算法得到一致的結果。

Energy conservation(能量守恆)------對於具有完全白色反照率且無吸收的表面,從表面反射的能量應等於接收到的能量

但是一些成功的模型並不滿足這些要求。 Disney 模型不是能量守恆的,而 Autodesk 模型不一定滿足Helmholtz reciprocity。迪士尼模型與單向路徑追蹤結合使用,缺乏雙向性不會帶來重大問題。完美的能量守恆也可能不是一個嚴格的要求,因為除非 BRDF 反射的能量多於它接收到的能量,否則不太可能造成問題,除了能量損失帶來的表面變暗。

幾種常見的BRDF模型

常用的向量引數講解

img

向量 𝑁 是給定表面的著色法線(可能來自法線貼圖)。向量𝑉,,指定從著色點到觀察者(相機)的方向,更一般地說,它指定出射光方向,在典型的路徑追蹤器中,這與光線方向相反。向量 𝐿 指向光源,或者根據上下文指定入射光線反射的方向。向量 𝐻,半向量位於 𝑉 和 𝐿 之間。它也等於第 4 節中討論的微表面模型的微表面法線。向量 𝑅 是向量 𝐿 沿法線 𝑁 的完美鏡面反射方向,向量 𝑇 是三角形平面上垂直於 𝑁 的切線。所有這些向量都被標準化。向量 𝑣 和 𝑙 是 𝑉 和 𝐿 在三角形平面上的投影。 注意\(\varphi_{v} \theta_{v}\)\(\varphi_{l} \theta_{l}\) 是 𝑉 與 𝐿的球面座標表達。

Lambertian diffuse BRDF

朗伯函式是用於漫反射項的最簡單的 BRDF 函式之一,它假設入射光在所有可能的方向上均勻散射(在表面法線周圍的半球內),即是完美的漫反射。
定義為:

img

考慮餘弦項(代表著入射光方向帶來的能量的損失):

img

其中\(diffuseReflectance\)代表著有多少光被反射 \(PI\)是球面積分 保證能量守恆的結果

Phong Reflection Model

Phong引入了過去常與 Lambertian 一起使用的另一種流行的反射模型,為實時渲染提供計算成本低廉的鏡面高光。不要將 Phong 反射模型與 Phong 著色相混淆——Phong 著色是一種用於實現平滑鏡面高光的法線插值方法。雖然 Phong 的原始論文指出,他的反射模型是基於物理的,但按照今天的標準,它並不是基於物理的,因為它缺乏非鏡面峰值、菲涅爾反射等現象。
定義為:

img

高光的寬度由指數(通常稱為光澤度shinines)控制,這是一個無界引數,但通常將其範圍限制在 10000 左右。為了實現 Phong 模型,我們必須計算向量 𝑅 ,但正如 Blinn 在其最佳化版本中所示,可以使用半程向量 𝐻 代替

由於它既不能量守恆也不雙向,因此將其稱為這種形式的“Phong BRDF”在技術上是不正確的,但是,已經有人嘗試修復這些缺陷。 Blinn 推出了一個最佳化版本,並將 Phong 的鏡面高光與朗伯漫反射和恆定環境項相結合,建立了 Blinn-Phong 反射模型,該模型成為實時應用程式的標準,直到被更先進的基於物理的模型所取代

關於其它修正的Phong模型的BRDF 可自行到原文的參考文獻查閱

Oren-Nayar Diffuse Reflectance Model

Oren 和 Nayar 引入了更先進的漫反射反射模型,該模型考慮了表面粗糙度。他們的模型基於這樣的觀察:當視線方向接近入射光方向時,粗糙表面反射的光比Lambertian模型預測的要多(這種效應稱為反向散射,這種非Lambertian表面的一個例子是月球)。 Oren-Nayar 模型透過推廣朗伯模型並使其對錶面粗糙度和觀察方向敏感。
Oren 和 Nayar 提出了他們模型的幾個版本,並進行了不同程度的簡化。本文附帶的程式碼使用最簡單的“定性”模型:

img

粗糙度。。。。。

Disney (Burley) Diffuse Model

另一種流行且廣泛使用的模型是 Disney 漫射模型,有時也稱為 Burley 漫射模型。它是透過觀察測量資料得出的經驗模型。它類似於 Oren-Nayar 模型,但評估起來更簡單。它基於 Schlick 菲涅爾近似公式(見後),並擴充套件了基本朗伯模型。
定義:

img

微表面模型

使用微面模型的 RDF 通常被稱為基於物理的,以表明它們是根據物理定律(光學)設計的,而不是根據觀察經驗進行設計的,儘管在計算機圖形學中,我們經常使用簡化和近似來使計算簡化。

一個著名的微表面模型Cook and Torrance :

img

其中各引數含義簡述如下:

D 項 – 微面分布函式 – 告訴我們有多少微面面向方向 𝐻,該方向可以將從方向 L 傳入的光沿著方向 𝑉 反射

F 項 – 菲涅爾項,評估給定入射角有多少光會從表面反射

G 項 – 幾何衰減項(也稱為掩蔽和陰影項),說明微表面的相互遮蔽,有時也用於 BRDF 的標準化

分母 – 來自使用完美鏡面作為微表面的微表面模型的推導

微表面分佈項 或者說微表面的法線分佈函式(NDF)

常用的NDF 本文介紹了兩種
一種是Beckmann:

img

其中\(\theta_{h}\)代表著法線與半程向量的夾角 \(\alpha\)代表著材質的粗糙率
一種是GGX:

img

對於上面的兩個公式 我們可以將tan角使用餘弦角來表示 因為餘弦更加容易計算 只需要一個點積:

img

img

兩者隨著餘弦角度變化的對比圖:

img

從上圖中可以看出 GGX有著更長的尾巴,意味著鏡面高光下降的更為緩慢,更符合現實,因此GGX被更為廣泛的應用

還有一個由 Blinn 使用 Phong 反射模型匯出的 NDF(稱為 Blinn-Phong NDF),並且在 Walter 的論文中也進行了討論,他得出的結論是,對於某些粗糙度值,Beckmann 和 Blinn-Phong 分佈非常適合相似的,這可以解釋 Phong 著色模型的長壽,因為它能夠準確地表示某些材料(尤其是塑膠)。

正如我們所看到的,每個模型的粗糙度單位可能有很大不同。 Torrance 和 Sparrow 以及 Oren-Nayar 模型直接使用正態分佈的標準差,Beckmann 和 Trowbridge-Reitz 使用斜率的統計均方根,而 Burley 使用在合理範圍內根據經驗選擇的值。當多個 BRDF 耦合在一起時(通常是鏡面反射和漫反射 BRDF),將藝術家指定的粗糙度仔細轉換為底層 BRDF 使用的粗糙度單位非常重要。

幾何遮擋項

幾何衰減項 𝐺 解釋了由於微表面的幾何形狀而導致的反射光衰減,這種衰減是在某些微面相互遮擋時發生的。

𝐺 項抵消了菲涅爾項,並導致了菲涅爾預測的高反射率因掠射角處的 𝐺 項產生的顯著陰影而減弱,對於某些粗糙度的材料會出現“非鏡面峰值”,即峰值反射率出現在較低的角度

微表面的幾何形狀由用於模擬其形狀的輪廓給出。有兩種重要的微表面輪廓:V-Cavity模型,假設微表面由一定寬度和高度的V形凹槽組成,以及基於斜率隨機分佈的Smith模型。 Cook-Torrance 和 Oren-Nayar 在他們的 BRDF 中使用了 V-Cavity模型,但正如 Heitz 的一篇文章展示的,Smith 函式是更為正確的模型,因此,我們將只討論 Smith 的𝐺函式,定義為:

img

其中 𝑆 是 𝐿 或 𝑉 向量,𝐻 是微表面法線,λ 是特定於所選分佈函式 (NDF) 的函式:

img

在考慮微表面的入射光與反射光時。我們可以發現兩者均會發生遮蔽現象,所以我們的G函式會由兩部分組成
img

img

如果我們考慮到微表面更深的面被陰影和遮蔽的可能性更高,還有一種更為精確的G函式提出:

img

任一形式的 𝐺函式 都可以用於前面介紹的微面模型反射公式中的 𝐺 項,但後一種更可取,因為它只是稍微貴一點但是更準確。

菲涅爾項

菲涅耳項𝐹決定了有多少光將從表面反射,有效地告訴我們有多少光將有助於評估 BRDF。剩餘部分 (1 − 𝐹) 將傳遞到底層材料層(例如,漫反射 BRDF 或透射 BTDF)。到目前為止,我們的實現僅討論了兩層(鏡面反射和漫反射),但可以建立具有多個層的複雜材質。菲涅耳項應在光從一層傳播到另一層的每個介面上進行評估。為簡單起見,各個層的厚度通常為零,但可以結合光譜渲染對某些厚度進行建模,以產生諸如當層介面比穿過它的光的波長薄時發生的衍射(虹彩)等效果。

Christophe Schlick 引入了一種廣泛使用的菲涅爾近似值,用於計算機圖形學 。正如他指出的那樣,完整的菲涅爾方程不僅計算成本昂貴,而且依賴於不直觀的折射率 𝑛 和消光 𝑘,這不符合我們對可預測且易於使用的引數的需求。更復雜的是,全折射率是一個由實部(折射率)和虛部(消光係數)組成的複數,並且是按波長指定的。這不適合使用 RGB 三元組進行渲染。 Naty Hoffman 題為“被認為有害的菲涅爾方程” 的文章對該主題進行了進一步討論,並得出結論,除非使用光譜渲染,否則完整的菲涅爾方程並不比 Schlick 近似更精確。

Schlick 近似使用這樣的觀察結果:在 90 度以下觀察時,所有材料都表現出完美的反射率,並且我們可以僅使用一個引數 ------ 法線入射(0 度到F0度)下的表面反射率來近似完整的菲涅爾方程:

img

其中 𝑢 是法線與觀察方向之間角度的餘弦 (𝑢 = 𝑁 ∙ 𝑉),並且 \(F_{90}\) 等於 1,除了接下來討論的情況。請注意,折射率和消光係數已被消除,但我們現在需要指定從法線入射時的反射率\(F_{0}\)

消除折射率和消光係數簡化了計算,但也導致失去對材料是否表現為電介質(低吸收係數——塑膠、木材等)或導體(高吸收係數——銅、金等)的控制。正如 Cook 和 Torrance 所指出的,金屬反射是根據法線入射材質的基色著色的(表示為 \(F_{0}\))。利用這些知識,我們可以透過引入一個稱為金屬度的引數來“修復”對於金屬菲涅爾反射的顏色,該引數將 \(F_{0}\) 計算為電介質的預設反射率和金屬的基色之間的混合:

img

\(F_{0Dielectrics}\)的常見選擇是 0.04(4% 反射率),例如 UE4 和 Frostbite 使用的

混合BRDF

在本文中,為了將鏡面 BRDF 與漫反射 BRDF 結合起來,我們使用一種基於菲涅耳項的簡單方法,將鏡面反射和漫反射 BRDF 混合在一起。請注意,微面模型已經用 𝐹 衡量鏡面 BRDF 的權重,因此我們可以用 (1 − 𝐹) 衡量漫反射 BRDF 的權重。這是受到分層材料的啟發,其中光與每一層相互作用,菲涅耳項用於評估有多少光從表面反射以及有多少散射到表面。