【從UnityURP開始探索遊戲渲染】專欄-直達
蘭伯特漫反射的能量守恆性
能量守恆基本原理
在物理正確的渲染中,能量守恆要求:
- 表面反射的光能總量 ≤ 入射光能
- 漫反射+高光反射 ≤ 1.0
- 沒有能量憑空產生或消失
經典蘭伯特模型的能量守恆問題
傳統蘭伯特漫反射公式:
$漫反射 = 表面反照率 × max(0, N·L)$
不守恆的原因:
- 缺乏歸一化因子:
- 半球積分結果應為π,但蘭伯特模型直接使用N·L
- 正確公式應為:$漫反射 = 表面反照率 / π × max(0, N·L)$
- 反射率超標:
- 當反照率(albedo)設為1.0時,反射率可能超過100%
- 例如:N·L=1時反射率為100%,但實際應有吸收損失
- 恆定反射率:
- 對所有入射角使用相同反射率
- 現實中菲涅爾效應導致掠射角反射率增加
URP中的修正方案
Unity URP採用改進的蘭伯特模型:
hlsl
// URP實際實現(Lighting.hlsl)
half diffuseTerm = saturate(dot(normal, lightDir));
half3 diffuse = albedo * lightColor * diffuseTerm * INV_PI;
其中:
INV_PI ≈ 0.31831(1/π)- 通過除以π實現能量歸一化
PBR工作流兼容性分析
兼容性類型
| 兼容維度 | 支持情況 | 説明 |
|---|---|---|
| 數據輸入 | ✅ 完全兼容 | 使用相同的albedo貼圖輸入 |
| 光照計算 | ⚠️ 部分兼容 | 缺乏物理反射特性 |
| 材質工作流 | ✅ 完全兼容 | 支持標準材質參數 |
| 後期處理 | ✅ 完全兼容 | 兼容HDR/Bloom等效果 |
| 全局光照 | ⚠️ 有限兼容 | 需要特殊處理 |
完全兼容的方面
- 材質參數統一:
- 使用相同的albedo紋理和顏色參數
- 支持相同的法線貼圖格式
- HDR管線整合:
- 支持線性顏色空間
- 兼容HDR渲染和自動曝光
- 後期處理協同:
- 與Bloom效果無縫配合
- 支持屏幕空間環境光遮蔽(SSAO)
有限兼容的方面
-
能量守恆缺口:
graph LR A[入射光能量] --> B[經驗模型] B --> C[漫反射輸出] C --> D{能量總和} D --> |100%| E[違反守恆] D --> |物理模型<90%| F[正確守恆] -
金屬度工作流問題:
- 金屬表面應無漫反射,但蘭伯特模型無法正確處理
- 需要額外代碼屏蔽金屬表面的漫反射
-
菲涅爾效應缺失:
- 掠射角反射率無增強
- 影響邊緣光照的真實性
-
全局光照不一致:
- 與基於物理的GI系統配合時可能出現能量不匹配
- 需要手動調整間接光照強度
URP中的兼容性實現
- URP採用混合方案實現兼容:
hlsl
// URP的BRDF處理(BRDF.hlsl)
half3 BRDF_lambert(half3 albedo)
{
return albedo * INV_PI;
}
#if defined(_PBR_ENABLED)
// 物理正確的漫反射計算
half3 diffuse = BRDF_lambert(albedo) * saturate(NdotL);
#else
// 傳統蘭伯特計算
half3 diffuse = albedo * saturate(NdotL);
#endif
結論與建議
能量守恆結論
- 原始蘭伯特模型不守恆:缺乏歸一化因子,反射率可能超標
- 修正版可基本守恆:通過添加1/π因子實現能量平衡
- URP實現部分守恆:在標準着色器中已包含修正因子
PBR兼容性結論
- ✅ 美術工作流兼容:可使用相同材質和紋理
- ️ 物理精度侷限:無法完全匹配物理反射特性
- ️ 工程實用方案:適合風格化/性能優先項目
實際開發建議
-
移動端項目:
hlsl // 使用優化版蘭伯特(包含能量修正) half3 diffuse = albedo * saturate(NdotL) * 0.31831; -
PC/主機項目:
hlsl // 使用完整PBR漫反射(Disney模型) half3 diffuse = albedo * (1 / PI) * (1 - metallic) * saturate(NdotL); -
風格化渲染:
hlsl // 藝術導向的增強版 half3 diffuse = albedo * pow(saturate(NdotL), _RampPower) * _Intensity;
在URP中,經驗模型與PBR工作流可通過條件編譯實現無縫切換,開發者可根據目標平台和藝術需求選擇最適合的模型,在物理準確性和性能之間取得最佳平衡。
【從UnityURP開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)