【光照】Unity[光照探針]的作用與工作原理
【從UnityURP開始探索游戲渲染】專欄-直達
光照探針的作用
光照探針(Light Probes)是Unity中用于解決動態物體間接光照問題的核心技術,主要作用包括:
- ?為動態物體提供間接光照?:在靜態場景中,動態物體無法直接使用烘焙光照貼圖,光照探針通過存儲空間中的光照信息,讓動態物體也能獲得與靜態環境一致的間接光照效果。
- ?提升視覺一致性?:通過插值計算,使移動中的物體能夠平滑過渡不同區域的光照氛圍,避免光照突變帶來的不協調感。
- ?優化性能?:相比全實時全局光照計算,光照探針使用預計算數據,運行時只需簡單插值,性能消耗極低。
- ?支持復雜光照效果?:能捕捉顏色滲色、柔和陰影等高級光照現象,提升場景真實感。
發展歷史
光照探針技術在Unity中的演進可分為三個階段:
- ?傳統光照探針組Light Probe Group?:早期版本中需要手動放置探針點,形成三維網格覆蓋動態物體活動區域。
- ?自適應探針體積Adaptive Probe Volumes?:在URP中引入的自動化解決方案,根據場景幾何密度自動生成探針網格,支持大規模開放世界(Unity6 URP開始支持)。
- ?URP探針體積系統?:進一步優化存儲和加載機制,支持流式傳輸和動態光照切換(如晝夜循環)。
內部實現原理
光照探針的核心技術實現包括以下方面:
- 數據采集與存儲
- 使用球諧函數(SH)編碼存儲光照信息,通常采用三階SH以平衡精度和性能。
- 每個探針點記錄來自各個方向的入射光信息(主要是間接光)。
- 數據以"磚塊"(Brick)結構組織,高密度區域使用4x4x4小網格(間距1-3米),低密度區域使用大網格(間距9-27米)。
- 運行時插值機制
- 動態物體的包圍盒位置確定其所在的四面體,從四個頂點探針插值獲取光照。
- URP使用每像素8探針采樣和三線性插值,消除傳統方法的接縫問題。
- 插值權重基于物體到各探針的距離和相對位置計算。
- 技術限制
- 不適合大面積平坦或凹面物體,可能產生光照異常。
- 無法表現高頻光照細節(受SH階數限制)。
- 動態物體不會貢獻間接光到環境中。
自適應探針體積(APV)
自適應探針體積(Adaptive Probe Volumes)是Unity URP渲染管線中用于優化間接光照烘焙的核心技術,它通過自動化生成探針網格,動態適配場景幾何密度,實現高效的光照數據采樣與存儲?。
核心特性
- ?自動生成探針網格?:基于場景幾何密度自動生成規則排列的探針點,無需手動放置?
- ?自適應密度控制?:高密度區域(如室內細節)使用小間距探針(1-3米),低密度區域(如開放地形)使用大間距探針(9-27米)?
- ?高質量光照采樣?:每像素從8個最近探針采樣數據,通過三線性插值混合結果,消除傳統光照探針組的接縫問題?
- ?流式加載支持?:支持運行時動態加載/卸載探針數據,適用于開放世界場景?
與傳統光照探針的對比
| 特性 | APV探針體積 | 傳統Light Probe Group |
|---|---|---|
| 生成方式 | 自動基于幾何密度生成 | 手動放置 |
| 采樣精度 | 每像素8探針采樣,無接縫 | 按物體插值,可能產生接縫 |
| 內存管理 | 自適應優化,支持流式加載 | 固定密度,內存占用不可控 |
| 適用場景 | 大開放世界、動態物體 | 小型場景、靜態布局 |
具體使用方法
基礎設置流程
- ?啟用APV系統?:
- 在URP配置文件中(LightProbeSystem)選擇APV選項?
- 或通過代碼:
LightProbeSystem.current = new AdaptiveProbeVolumeSystem();
- ?創建探針體積?:
- 在場景中創建AdaptiveProbeVolume對象
- 調整其范圍覆蓋需要照明的區域?
- 設置MinProbeSpacing控制最小探針密度(提高精度)?
- ?烘焙光照?:
- 打開Window > Rendering > Lighting面板
- 點擊Generate Lighting進行烘焙?
- 啟用Skycclusion以獲得環境光照影響?
高級配置技巧
- ?光源設置?:
- 將光源設置為混合或烘焙模式
- 確保動態物體不標記為Static?
- ?性能優化?:
- 使用Probe Volumes的流式加載功能減少內存占用?
- 對移動物體采用"潛在可見集增量更新"策略?
- ?動態光照切換?:
- 通過Lighting Scenes實現晝夜循環等動態光照切換?
- 使用腳本控制探針數據的加載/卸載?
實際應用示例
示例1:室內場景光照設置
csharp
// 創建自適應探針體積
AdaptiveProbeVolume apv = new GameObject("APV_Indoor").AddComponent<ProbeVolumes>();
apv.minProbeSpacing = 1.5f;// 設置高密度探針間距
apv.bounds = new Bounds(transform.position, new Vector3(20, 10, 20));// 設置體積范圍// 烘焙光照
LightProbeSystem.current.BakeProbes();
示例2:開放世界流式加載
csharp
// 設置流式加載參數
AdaptiveProbeVolumeSystem system = LightProbeSystem.current as AdaptiveProbeVolumeSystem;
system.streamingDistance = 100f;// 設置流式加載距離
system.streamingPriority = 0.8f;// 設置加載優先級// 動態加載/卸載探針數據
void OnEnable() {
system.LoadProbesInRange(transform.position, 50f);
}
void OnDisable() {
system.UnloadProbesInRange(transform.position, 50f);
}
常見問題解決方案
- ?光照接縫問題?:
- 確保MinProbeSpacing設置合理,高變化區域增加探針密度?
- 檢查物體是否完全包含在探針體積范圍內?
- ?性能優化?:
- 使用Probe Volumes的流式加載功能?
- 對靜態物體使用光照貼圖,動態物體使用APV?
- ?動態物體光照異常?:
- 確保動態物體不標記為Static?
- 檢查探針體積是否覆蓋動態物體活動區域?
URP中的光照探針實現示例
基本設置流程
- ?創建光照探針組?:
- 在Hierarchy中右鍵 > Light > Light Probe Group。
- 或通過代碼:
GameObject.AddComponent<LightProbeGroup>()。
- ?布置探針點?:
- 手動模式:在Scene視圖中移動、添加或刪除探針點。
- 自動模式:使用腳本根據場景幾何自動生成探針布局。
- ?烘焙光照?:
- 確保動態物體不標記為Static。
- 打開Window > Rendering > Lighting面板,點擊Generate Lighting。
- ?驗證效果?:
- 選擇動態物體,Scene視圖會顯示影響它的探針點(黃色連線)。
- 移動物體觀察光照平滑過渡效果。
高級配置技巧
-
?探針密度優化?:
- 高變化區域(如墻角、門窗附近)增加探針密度。
- 開放空間減少探針數量以節省內存。
-
?混合光照模式?:
csharp // 在Shader中結合直接光和探針間接光 UnityLight light; light.color = _LightColor0.rgb * atten; light.dir = lightDirection; // 獲取探針光照 light.indirect = ShadeSH9(float4(worldNormal,1)); // 最終光照計算 half4 c = UNITY_BRDF_PBS(albedo, specular, oneMinusReflectivity, smoothness, worldNormal, viewDir, light, indirectLight); -
?性能優化?:
- 使用Light Probe Proxy Volume處理大型動態物體。
- 啟用Probe Volumes的流式加載功能減少內存占用。
與傳統光照探針的對比
| 特性 | URP探針體積 | 傳統Light Probe Group |
|---|---|---|
| 生成方式 | 自動基于幾何密度生成 | 手動放置 |
| 采樣精度 | 每像素8探針采樣,無接縫 | 按物體插值,可能產生接縫 |
| 內存管理 | 自適應優化,支持流式加載 | 固定密度,內存占用不可控 |
| 適用場景 | 大開放世界、動態物體 | 小型場景、靜態布局 |
光照探針技術是Unity URP管線中實現高質量動態光照的關鍵組件,通過合理配置可以顯著提升場景的視覺一致性和運行效率
【從UnityURP開始探索游戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,??)

光照探針是Unity中解決動態物體間接光照的核心技術,通過預計算存儲空間光照信息,使動態物體獲得與靜態環境一致的照明效果。UnityURP中的光照探針技術經歷了從手動放置到自適應探針體積(APV)的演進,APV能自動根據場景幾何密度生成探針網格,支持高密度區域精細采樣和開放世界流式加載。該技術使用球諧函數編碼光照數據,運行時通過三線性插值實現平滑過渡,在保證視覺質量的同時優化性能。雖然存在對高頻光照細節表現不足等限制,但通過合理配置探針密度和范圍,可有效提升場景真實感和運行效率。
浙公網安備 33010602011771號