【光照】[物理模型]中的[BRDF]是什么?
【從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真實
- ?GGX/Trowbridge-Reitz?:$D(h) = \frac{\alpha_g^2}{\pi [(n \cdot h)^2 (\alpha_g^2 - 1) + 1]^2}$(
- ?幾何遮蔽函數 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開始探索游戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,??)

本文深入解析了雙向反射分布函數(BRDF)在游戲渲染中的應用。BRDF作為描述物體表面反射特性的核心數學模型,將反射分解為漫反射和鏡面反射兩部分,并通過微表面理論精確模擬光線行為。文章詳細介紹了GGX/Trowbridge-Reitz等主流BRDF模型的數學實現,包括法線分布函數、幾何遮蔽函數和菲涅爾項的計算方法,對比了傳統光照模型與基于物理渲染(PBR)的區別。最后給出了Unity URP中BRDF的實現代碼示例,展示了如何通過金屬度、粗糙度等參數實現更真實的材質表現。
浙公網安備 33010602011771號