Stories

Detail Return Return

【光照】[物理模型]中的[BRDF]是什麼? - Stories Detail

【從UnityURP開始探索遊戲渲染】專欄-直達

雙向反射分佈函數 Bidirectional Reflectance Distribution Function 解釋當光線從某個方向照射到一個表面時,有多少光線被反射、反射方向有哪些。BRDF大多使用一個數學公式表示,並提供一些參數來調整材質屬性。

BRDF(雙向反射分佈函數)是計算機圖形學和光學中描述物體表面反射特性的核心數學模型,其定義和特性如下:


基本定義

BRDF(Bidirectional Reflectance Distribution Function)表示‌入射光方向(ωi)與出射光方向(ωr)的反射輻射率(radiance)與入射輻照度(irradiance)的比值‌,數學表達式為:

$f_r(ω_i,ω_r)=\frac{dL_r(ω_r)}{dE_i(ω_i)}$

其中,$L_rL_r$為反射輻射率,$E_i$為入射輻照度‌。


核心特性

  • 雙向性‌同時依賴入射和出射方向,能精確描述光線在表面的空間分佈‌。
  • 能量守恆‌反射率總和≤1,避免非物理的光能溢出‌。
  • 微觀結構關聯‌通過微表面理論(Microfacet Theory)建模表面粗糙度對反射的影響‌。

物理意義

  • 反射行為分解
    • 漫反射‌:光線均勻散射(如Lambert模型)
    • 鏡面反射‌:光線集中反射(如GGX模型)‌。
  • 材質區分‌金屬與非金屬的BRDF差異顯著(如菲涅爾效應在金屬中更明顯)‌。

‌BRDF的光照分解與實現原理‌

BRDF將表面反射分為‌漫反射Diffuse‌ 和‌鏡面反射Specular‌ 兩部分(環境光通過IBL技術整合),其數學表達式為:

$f_r(ω_i,ω_o)=f_{diffuse}+f_{specular}$

‌漫反射(Diffuse)‌

  • 作用‌:模擬光線在表面微結構中多次散射的均勻反射(如布料、粗糙牆面)。
  • 物理模型‌:
    • Lambertian模型‌:基礎形式 $f_{\text{diff}} = \frac{\text{albedo}}{\pi}$
    • 改進模型‌:Oren-Nayar(考慮表面粗糙度)或 Disney BRDF(藝術可控)
  • 能量守恆約束‌:漫反射部分需滿足:$∫_Ωf_{diff}(ω_i⋅n)dω_i≤1−F_0$其中 $F_0$ 是菲涅爾基礎反射率。

‌鏡面反射(Specular)‌

基於‌微表面理論‌(Microfacet Theory),分解為三個物理項:

$f_{spec}=\frac{F(θ_h)⋅D(α,θ_h)⋅G(α,θ_i,θ_o)}{4⋅(n⋅ω_i)⋅(n⋅ω_o)}$

  • 法線分佈函數 NDF
    • 作用‌:描述微表面法線朝向的統計分佈(決定高光形狀)。
    • 常用模型‌:
      • GGX/Trowbridge-Reitz‌:$D(h) = \frac{\alpha_g^2}{\pi [(n \cdot h)^2 (\alpha_g^2 - 1) + 1]^2}$(α=粗糙度,h=半角向量)
      • Beckmann‌:較早的物理模型,拖尾效果不如GGX真實
  • 幾何遮蔽函數 G
    • 作用‌:模擬微表面間陰影和遮擋(如粗糙表面的光能損失)。
    • Smith模型‌:$G = G_1(\omega_i) \cdot G_1(\omega_o)G_1(\omega) = \frac{n \cdot \omega}{(n \cdot \omega) (1 - k) + k}$(k=粗糙度重映射參數)
  • 菲涅爾項 F
    • 作用‌:計算不同視角下的反射率變化(如掠射角反射增強)。
    • Schlick近似‌:$F(\theta) = F_0 + (1 - F_0)(1 - \cos\theta)^5$($F_0$=基礎反射率,金屬≈0.5-1.0, 非金屬≈0.02-0.05)

‌環境光的處理(間接光照)‌

傳統“環境光”在BRDF中被升級為 ‌IBL Image-Based Lighting‌:

  • 漫反射環境光‌:通過‌輻照度貼圖Irradiance Map‌ 預計算半球積分$L_{diff}=albedo⋅\frac1π∫_ΩL_i(ω_i)(n⋅ω_i)dω_i$
  • 鏡面反射環境光‌:
    • 預過濾環境貼圖(Prefiltered Environment Map)
    • 重要性採樣 + BRDF LUT(查找表)

‌與傳統光照模型的對比‌

光照成分 標準光照模型 BRDF實現方式
漫反射 $Lambert = k_d * (n·l)$ 能量守恆約束的Oren-Nayar/Disney模型
高光反射 $Phong = k_s * (v·r)^n$ 微表面模型(D+F+G項物理計算)
環境光 恆定或環境貼圖採樣 IBL技術(輻照度圖+預過濾鏡面貼圖)
能量守恆 不保證(可能過曝) 強制滿足diffuse + specular ≤ 1

‌BRDF在渲染管線中的實現流程(以GGX為例)‌

hlsl
// Unity URP 中的核心代碼片段(簡化版)
float3 BRDF_PBS(float3 albedo, float metallic, float roughness,
                float3 N, float3 V, float3 L) {

  // 計算基礎參數
  float3 H = normalize(V + L);
  float NdotV = saturate(dot(N, V));
  float NdotL = saturate(dot(N, L));

  // 1. 菲涅爾項 (F)
  float3 F0 = lerp(0.04, albedo, metallic); // 基礎反射率
  float3 F = FresnelSchlick(saturate(dot(H, V)), F0);

  // 2. 法線分佈 (D)
  float D = NDF_GGX(roughness, N, H);

  // 3. 幾何遮蔽 (G)
  float G = GeometrySmith(roughness, NdotV, NdotL);

  // 4. 組合鏡面反射
  float3 nominator = D * G * F;
  float denominator = 4 * NdotV * NdotL;
  float3 specular = nominator / max(denominator, 0.001);

  // 5. 漫反射 (能量守恆)
  float3 kD = (1 - F) * (1 - metallic); // 金屬無漫反射
  float3 diffuse = kD * albedo / PI;

  return (diffuse + specular) * NdotL;
}

‌關鍵突破‌

  • 物理正確性‌:通過微表面理論和能量守恆避免人工調參的不真實感。
  • 材質統一性‌:參數(金屬度/粗糙度)在所有光照環境下保持一致性。
  • 環境響應‌:IBL使物體自然融入環境光照(如金屬反射周圍景物)。

‌示例對比‌:傳統Phong模型在粗糙金屬表面會產生圓形高光,而GGX BRDF會生成拖尾式高光(符合真實相機拍攝效果)。


【從UnityURP開始探索遊戲渲染】專欄-直達

(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)

Add a new Comments

Some HTML is okay.